PageRenderTime 59ms CodeModel.GetById 20ms RepoModel.GetById 0ms app.codeStats 0ms

/module/Tag/lib/Tag_ModuleClass.php

https://github.com/noldmess/EagleEye
PHP | 194 lines | 170 code | 18 blank | 6 comment | 6 complexity | bbfac7f89f659b4412a096ca9df6d952 MD5 | raw file
  1. <?php
  2. class Tag_ModuleClass implements OCA\FaceFinder\ClassInterface{
  3. private $tagArray;
  4. private $id;
  5. private $foringkey;
  6. private function __construct() {
  7. }
  8. function getJSON(){
  9. return $this->tagArray;
  10. }
  11. public static function getInstanceBySQL($id,$tagarray,$foringkey){
  12. $class=new self();
  13. $class->setTagArray($tagarray);
  14. $class->setID($id);
  15. $class->setForingkey($foringkey);
  16. return $class;
  17. }
  18. public static function getInstanceByPath($path,$foringkey){
  19. $class=new self();
  20. if (\OC_Filesystem::file_exists($path)) {
  21. getimagesize(OC_Filesystem::getLocalFile($path),$info);
  22. if(isset($info['APP13'])){
  23. $iptc = iptcparse($info['APP13']);
  24. $class->setTagArray($iptc);
  25. }
  26. }
  27. $class->setForingkey($foringkey);
  28. return $class;
  29. }
  30. public function getTagArray(){
  31. return $this->tagArray;
  32. }
  33. public function getID(){
  34. return $this->id;
  35. }
  36. public function getForingkey(){
  37. return $this->foringkey;
  38. }
  39. public function setTagArray($tagArray){
  40. $this->tagArray=$tagArray;
  41. }
  42. public function setID($id){
  43. $this->id=$id;
  44. }
  45. public function setForingkey($foringkey){
  46. $this->foringkey=$foringkey;
  47. }
  48. public function addTag($key,$tag,$x1=0,$x2=0,$y1=0,$y2=0){
  49. //TODO Optimise only easy solutiuon
  50. foreach($this->tagArray as $tagelement){
  51. if($tagelement['tag']==$tag)
  52. return false;
  53. }
  54. $this->tagArray[]=array("name"=>self::IPTCCodeToString($key),"tag"=>$tag,"x1"=>$x1,"x2"=>$x2,"y1"=>$y1,"y2"=>$y2);
  55. return true;
  56. }
  57. public function writeTag($paht){
  58. if (\OC_Filesystem::file_exists($paht)) {
  59. $help=$this->getTagArray();
  60. $iptc = array();
  61. $i=1;
  62. foreach ($help as $s){
  63. $iptc=$iptc+array("2#".self::StringToIPTCCode($s['name']).$i=>$s['tag']);
  64. $i++;
  65. }
  66. $data = '';
  67. foreach($iptc as $tag => $string){
  68. $tag = str_replace("2#", "", $tag);
  69. $tag = substr($tag, 0, 3);
  70. $data .= $this->iptc_make_tag(2, $tag, $string);
  71. }
  72. $content = iptcembed($data,OC_Filesystem::getLocalFile($paht));
  73. $fp=OC_Filesystem::fopen($paht,"wb");
  74. if (!$fp) {
  75. OCP\Util::writeLog("facefinder",OC_Filesystem:: getLocalFile("/")." sdfsdf",OCP\Util::ERROR);
  76. }else{
  77. fwrite($fp, $content);
  78. fclose($fp);
  79. }
  80. }
  81. }
  82. private function iptc_make_tag($rec, $data, $value)
  83. {
  84. $length = strlen($value);
  85. $retval = chr(0x1C) . chr($rec) . chr($data);
  86. if($length < 0x8000){
  87. $retval .= chr($length >> 8) . chr($length & 0xFF);
  88. }
  89. else{
  90. $retval .= chr(0x80).chr(0x04).chr(($length >> 24) & 0xFF).chr(($length >> 16) & 0xFF) . chr(($length >> 8) & 0xFF).chr($length & 0xFF);
  91. }
  92. return $retval . $value;
  93. }
  94. public static function IPTCCodeToString($ipct){
  95. $ipct_tmp = substr($ipct, 2);
  96. switch($ipct_tmp){
  97. case '005':return 'OBJECT_NAME';
  98. case '007':return 'EDIT_STATUS';
  99. case '010':return 'PRIORITY';
  100. case '015':return 'CATEGORY';
  101. case '020':return 'SUPPLEMENTAL_CATEGORY';
  102. case '022':return 'FIXTURE_IDENTIFIER';
  103. case '025':return 'KEYWORDS';
  104. case '030':return 'RELEASE_DATE';
  105. case '035':return 'RELEASE_TIME';
  106. case '040':return 'SPECIAL_INSTRUCTIONS';
  107. case '045':return 'REFERENCE_SERVICE';
  108. case '047':return 'REFERENCE_DATE';
  109. case '050':return 'REFERENCE_NUMBER';
  110. case '055':return 'CREATED_DATE';
  111. case '060':return 'RELEASE_TIME';
  112. case '062':return 'DigitalCreationDate';
  113. case '063':return 'DigitalCreationTime';
  114. case '065':return 'ORIGINATING_PROGRAM';
  115. case '070':return 'PROGRAM_VERSION';
  116. case '075':return 'OBJECT_CYCLE';
  117. case '080':return 'BYLINE';
  118. case '085':return 'BYLINE_TITLE';
  119. case '090':return 'CITY';
  120. case '095':return 'PROVINCE_STATE';
  121. case '100':return 'COUNTRY_CODE';
  122. case '101':return 'COUNTRY';
  123. case '103':return 'ORIGINAL_TRANSMISSION_REFERENCE';
  124. case '105':return 'HEADLINE';
  125. case '110':return 'CREDIT';
  126. case '115':return 'SOURCE';
  127. case '116':return 'COPYRIGHT_STRING';
  128. case '120':return 'CAPTION';
  129. case '121':return 'LOCAL_CAPTION';
  130. default:return $ipct;
  131. }
  132. }
  133. /**
  134. * @ todo
  135. * @param unknown_type $ipct
  136. * @return string|unknown
  137. */
  138. public static function StringToIPTCCode($ipct){
  139. switch($ipct){
  140. case 'OBJECT_NAME':return '005';
  141. case 'EDIT_STATUS':return '007';
  142. case 'PRIORITY':return '010';
  143. case 'CATEGORY':return '015';
  144. case 'SUPPLEMENTAL_CATEGORY':return '020';
  145. case 'FIXTURE_IDENTIFIER':return 'FIXTURE_IDENTIFIER';
  146. case 'KEYWORDS':return '025';
  147. case 'RELEASE_DATE030':return '030';
  148. case 'RELEASE_TIME':return '035';
  149. case 'SPECIAL_INSTRUCTIONS':return '040';
  150. case 'REFERENCE_SERVICE':return '045';
  151. case 'REFERENCE_DATE':return '047';
  152. case 'REFERENCE_NUMBER':return '050';
  153. case 'CREATED_DATE':return '055';
  154. case 'RELEASE_TIME':return '060';
  155. case 'DigitalCreationDate':return '062';
  156. case 'DigitalCreationTime':return '063';
  157. case 'ORIGINATING_PROGRAM':return '065';
  158. case 'PROGRAM_VERSION':return '070';
  159. case 'OBJECT_CYCLE':return '075';
  160. case 'BYLINE':return '080';
  161. case 'BYLINE_TITLE':return '085';
  162. case 'CITY':return '090';
  163. case 'PROVINCE_STATE':return '095';
  164. case 'COUNTRY_CODE':return '100';
  165. case 'COUNTRY':return '101';
  166. case 'ORIGINAL_TRANSMISSION_REFERENCE':return '103';
  167. case 'HEADLINE':return '105';
  168. case 'CREDIT':return '110';
  169. case 'SOURCE':return '115';
  170. case 'COPYRIGHT_STRING':return '116';
  171. case 'CAPTION':return '120';
  172. case 'LOCAL_CAPTION':return '121';
  173. default:return $ipct;
  174. }
  175. }
  176. }