Ignore:
Timestamp:
Jan 19, 2010, 12:31:32 AM (14 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.