Changeset 4705


Ignore:
Timestamp:
01/19/10 00:31:32 (10 years ago)
Author:
grum
Message:

Change Locale class by L10n class ; add Readers for Nikon and Canon cameras ; some bug corrected

Location:
extensions/AMetaData/JpegMetaData
Files:
6 added
1 deleted
11 edited

Legend:

Unmodified
Added
Removed
  • extensions/AMetaData/JpegMetaData/Common/Data.class.php

    r4686 r4705  
    9797    } 
    9898 
     99    function __destruct() 
     100    { 
     101      unset($this->byteOrder); 
     102      unset($this->offset); 
     103      unset($this->length); 
     104      unset($this->startOffset); 
     105      unset($this->data); 
     106      unset($this->currentPos); 
     107    } 
     108 
    99109    /** 
    100110     * returns the datas length 
  • extensions/AMetaData/JpegMetaData/Common/MakerNotesSignatures.class.php

    r4686 r4705  
    3535 * Define the maker notes signatures for the EXIF "MakerNote" tag 
    3636 * 
     37 * This class provides theses public functions : 
     38 *  - (static) getMaker 
     39 *  - (static) setExifMaker 
     40 *  - (static) getExifMaker 
     41 * 
    3742 * ----------------------------------------------------------------------------- 
    3843 */ 
    3944 
    4045  define("MAKER_PENTAX", "Pentax"); 
     46  define("MAKER_NIKON", "Nikon"); 
     47  define("MAKER_CANON", "Canon"); 
    4148 
    4249  Class MakerNotesSignatures 
     
    5158    const Nikon2Header = "Nikon\x00\x01\x00"; 
    5259    /** Nikon 3 signature */ 
    53     const Nikon3Header = "Nikon\x00\x02\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"; 
     60    const Nikon3Header = "Nikon\x00\x02"; 
    5461    /** Panasonic signature  */ 
    5562    const PanasonicHeader = "Panasonic\x00\x00\x00"; 
     
    7481    const FujiFilmHeaderSize  = 12; 
    7582    const Nikon2HeaderSize    = 8; 
    76     const Nikon3HeaderSize    = 18; 
     83    const Nikon3HeaderSize    = 7; 
    7784    const PanasonicHeaderSize = 12; 
    7885    const PentaxHeaderSize    = 6; 
     
    8289    const SonyHeaderSize      = 12; 
    8390    const CanonHeaderSize     = 0; 
    84     const UnknownHeaderSize     = 0; 
     91    const UnknownHeaderSize   = 0; 
    8592 
     93    static private $exifMaker = ""; 
    8694 
    8795    static public function getMaker($datas) 
     
    111119      else 
    112120       { return(self::UnknownHeader); } 
     121    } 
    113122 
     123    /** 
     124     * this function is used by IFD Reader to store all information about maker 
     125     * and camera model 
     126     * 
     127     * the stored value if used within a grep like "/canon/i" to determine the 
     128     * maker note. 
     129     * For more information about this tricks see the how the tag 0x927c is 
     130     * managed in the function "processSpecialTag" of the file 
     131     * IfdReader.class.php 
     132     * 
     133     * @param String $value : the maker or the camera model 
     134     */ 
     135    static public function setExifMaker($value) 
     136    { 
     137      if(is_array($value)) 
     138      { 
     139        foreach($value as $val) 
     140        { 
     141          self::$exifMaker.=$val." "; 
     142        } 
     143      } 
     144      else 
     145      { 
     146        self::$exifMaker.=$value." "; 
     147      } 
     148      return(self::$exifMaker); 
    114149    } 
     150 
     151    /** 
     152     * this function is used by IFD Reader to store all information about maker 
     153     * and camera model 
     154     * 
     155     * @return String 
     156     */ 
     157    static public function getExifMaker() 
     158    { 
     159      return(self::$exifMaker); 
     160    } 
     161 
    115162  } 
    116163 
  • extensions/AMetaData/JpegMetaData/Common/XmlData.class.php

    r4686 r4705  
    9898    } 
    9999 
     100    /** 
     101     * free memory before destroying the object... 
     102     */ 
    100103    function __destruct() 
    101104    { 
     105      $this->previousNode=null; 
     106      $this->nextNode=null; 
     107      unset($this->previousNode); 
     108      unset($this->nextNode); 
    102109      unset($this->attributes); 
    103110      unset($this->childs); 
     111      unset($this->value); 
     112      unset($this->name); 
     113      unset($this->level); 
    104114    } 
    105115 
     
    369379    function __destruct() 
    370380    { 
     381      unset($this->xml); 
     382      unset($this->isValid); 
     383      unset($this->isLoaded); 
    371384      unset($this->nodes); 
    372385    } 
     
    464477      $result=xml_parse_into_struct($xmlParser, $this->xml, $values); 
    465478      xml_parser_free($xmlParser); 
     479      unset($xmlParser); 
    466480 
    467481      //an error has occured while parsing the xml structure 
     
    517531        } 
    518532      } 
     533      unset($values); 
    519534      unset($tree); 
    520535      return(true); 
  • extensions/AMetaData/JpegMetaData/Readers/GenericReader.class.php

    r4698 r4705  
    7070    protected $nbEntries = 0; 
    7171    protected $entries = Array(); 
     72    protected $headerSize = 0; 
    7273 
    7374    protected $data = null; 
  • extensions/AMetaData/JpegMetaData/Readers/IfdReader.class.php

    r4698 r4705  
    106106      $this->dataOffset=$offset; 
    107107 
    108       $this->skipHeader(); 
     108      $this->skipHeader($this->headerSize); 
    109109 
    110110      $dataPointer = $this->data->offset(); 
     
    338338        case 0x010D: // DocumentName, tag 0x010D 
    339339        case 0x010E: // ImageDescription, tag 0x010E 
    340         case 0x010F: // Make, tag 0x010F 
    341         case 0x0110: // Model, tag 0x0110 
    342340        case 0x0131: // Software, tag 0x0131 
    343341        case 0x013B: // Artist, tag 0x013B 
     
    351349           */ 
    352350          $returned=ConvertData::toStrings($values); 
     351          break; 
     352        case 0x010F: // Make, tag 0x010F 
     353        case 0x0110: // Model, tag 0x0110 
     354          /* Make and Model are null terminated strings 
     355           * memorize the maker & camera from the exif tag : it's used to 
     356           * recognize the Canon camera (no header in the maker note) 
     357           */ 
     358          $returned=ConvertData::toStrings($values); 
     359          MakerNotesSignatures::setExifMaker($returned); 
    353360          break; 
    354361        case 0x011A: // XResolution, tag 0x011A 
     
    487494            case MakerNotesSignatures::OlympusHeader: 
    488495            case MakerNotesSignatures::Olympus2Header: 
    489               $returned="Olympus"; 
     496              $returned="Olympus is not implemented yet"; 
    490497              break; 
    491498            case MakerNotesSignatures::FujiFilmHeader: 
    492               $returned="FujiFilm"; 
     499              $returned="FujiFilm is not implemented yet"; 
    493500              break; 
    494501            case MakerNotesSignatures::Nikon2Header: 
    495502            case MakerNotesSignatures::Nikon3Header: 
    496               $returned="Nikon"; 
     503              require_once(JPEG_METADATA_DIR."Readers/NikonReader.class.php"); 
     504              $returned=new NikonReader($values, $valuesOffset, $this->byteOrder, $makerSignature); 
    497505              break; 
    498506            case MakerNotesSignatures::PanasonicHeader: 
    499               $returned="Panasonic"; 
     507              $returned="Panasonic is not implemented yet"; 
    500508              break; 
    501509            case MakerNotesSignatures::PentaxHeader: 
     
    506514            case MakerNotesSignatures::SigmaHeader: 
    507515            case MakerNotesSignatures::Sigma2Header: 
    508               $returned="Sigma"; 
     516              $returned="Sigma is not implemented yet"; 
    509517              break; 
    510518            case MakerNotesSignatures::SonyHeader: 
    511               $returned="Sony"; 
     519              $returned="Sony is not implemented yet"; 
    512520              break; 
    513521            default: 
    514               $returned="unknown maker => ".ConvertData::toHexDump($values, $type, 16); 
     522              /* 
     523               * Canon maker notes don't have any header 
     524               * So, the only method to know if the maker note is from a Canon 
     525               * camera is looking the exif maker value equals "Canon" or 
     526               * the camera model contains "Canon" 
     527               */ 
     528              if(preg_match("/.*canon.*/i",MakerNotesSignatures::getExifMaker())) 
     529              { 
     530                require_once(JPEG_METADATA_DIR."Readers/CanonReader.class.php"); 
     531                $returned=new CanonReader($values, $valuesOffset, $this->byteOrder, ""); 
     532              } 
     533              else 
     534              { 
     535                $returned="unknown maker => ".ConvertData::toHexDump($values, $type, 16); 
     536              } 
    515537              break; 
    516538          } 
  • extensions/AMetaData/JpegMetaData/Readers/JpegReader.class.php

    r4686 r4705  
    111111    { 
    112112      unset($this->appMarkerSegmentReader); 
     113      unset($this->fileHandler); 
    113114    } 
    114115 
  • extensions/AMetaData/JpegMetaData/Readers/SegmentReader.class.php

    r4698 r4705  
    7171    } 
    7272 
     73    function __destruct() 
     74    { 
     75      unset($this->data); 
     76      unset($this->isValid); 
     77      unset($this->isLoaded); 
     78    } 
     79 
    7380    /** 
    7481     * return true if the segment is valid 
  • extensions/AMetaData/JpegMetaData/Readers/TiffReader.class.php

    r4698 r4705  
    111111    function __destruct() 
    112112    { 
     113      parent::__destruct(); 
    113114      unset($this->IFDs); 
    114115    } 
  • extensions/AMetaData/JpegMetaData/Readers/XmpReader.class.php

    r4698 r4705  
    9797    function __destruct() 
    9898    { 
     99      unset($this->xmlData); 
    99100      unset($this->xmpTag2Exif); 
    100101      parent::__destruct(); 
  • extensions/AMetaData/JpegMetaData/TagDefinitions/XmpTags.class.php

    r4698 r4705  
    18711871      unset($tmpTags[1]); 
    18721872      unset($tmpTags[2]); 
     1873      unset($tmpTags); 
    18731874    } 
    18741875 
  • extensions/AMetaData/JpegMetaData/test/index.php

    r4698 r4705  
    4747  require_once(JPEG_METADATA_DIR."Readers/JpegReader.class.php"); 
    4848  require_once(JPEG_METADATA_DIR."Common/XmlData.class.php"); 
    49   require_once(JPEG_METADATA_DIR."Common/Locale.class.php"); 
     49  require_once(JPEG_METADATA_DIR."Common/L10n.class.php"); 
    5050 
    5151  require_once(JPEG_METADATA_DIR."TagDefinitions/IfdTags.class.php"); 
     
    335335  $page.="<span style='font-family:monospace;'>"; 
    336336 
     337  $time=microtime(true); 
     338 
    337339  $memory=memory_get_usage(); 
    338   $time=microtime(true); 
    339  
    340340  $jpeg = new JpegReader($file); 
    341341  $time2=microtime(true); 
     342 
    342343 
    343344  $page2="JpegReader extraction<br>"; 
     
    419420 
    420421    if(is_string($txt) and $val->isTranslatable()) 
    421       $txt=Locale::get($txt); 
     422      $txt=L10n::get($txt); 
    422423    if($txt instanceof DateTime) 
    423424      $txt=$txt->format("Y-m-d H:i:s"); 
     
    426427    if(is_array($value)) 
    427428      $value=print_r($value, true); 
    428     $page2.="<tr><td>".$key."</td><td>".Locale::get($val->getName())."</td><td>".$value."</td><td style='$style'>".$txt."</td></tr>"; 
     429    $page2.="<tr><td>".$key."</td><td>".L10n::get($val->getName())."</td><td>".$value."</td><td style='$style'>".$txt."</td></tr>"; 
    429430    $i++; 
    430431  } 
     
    440441  { 
    441442    $val['implemented']?$i++:$j++; 
    442     $page2.="<tr><td>".$key."</td><td>".Locale::get($val['name'])."</td><td>".($val['implemented']?"yes":"no")."</td></tr>"; 
     443    $page2.="<tr><td>".$key."</td><td>".L10n::get($val['name'])."</td><td>".($val['implemented']?"yes":"no")."</td></tr>"; 
    443444  } 
    444445  $page2.="</table>Total tags ; implemented: $i - not implemented: $j</span><hr>"; 
     
    455456 
    456457  echo $page; 
     458  unset($page2); 
     459  unset($page); 
    457460?> 
Note: See TracChangeset for help on using the changeset viewer.