source: extensions/AMetaData/JpegMetaData/test/index.php @ 4686

Last change on this file since 4686 was 4686, checked in by grum, 15 years ago

[Plugin:AMetaData] prepare the directory for a future plugin

  • Property svn:executable set to *
File size: 11.7 KB
Line 
1<?php
2 ini_set('error_reporting', E_ALL | E_STRICT);
3 ini_set('display_errors', true);
4
5  require_once("./../JpegMetaData.class.php");
6  require_once(JPEG_METADATA_DIR."Readers/JpegReader.class.php");
7  require_once(JPEG_METADATA_DIR."Common/XmlData.class.php");
8  require_once(JPEG_METADATA_DIR."Common/Locale.class.php");
9
10  require_once(JPEG_METADATA_DIR."TagDefinitions/IfdTags.class.php");
11  require_once(JPEG_METADATA_DIR."TagDefinitions/PentaxTags.class.php");
12  require_once(JPEG_METADATA_DIR."TagDefinitions/GpsTags.class.php");
13  require_once(JPEG_METADATA_DIR."TagDefinitions/XmpTags.class.php");
14
15echo "
16<html>
17<header>
18<meta http-equiv='Content-Type' content='text/html; charset=utf-8' />
19</header>
20<body>
21-- Tests --<br>
22";
23
24echo "<hr>-- Images --<br>";
25
26$d = scandir(dirname(__FILE__));
27
28foreach($d as $key => $file)
29{
30  if(preg_match("/.*\.(jpg|jpeg)/i",$file))
31    echo "[<a href='?file=".$file."'>$file</a>]&nbsp; ";
32}
33
34
35echo "<hr>-- Resultat --<br>";
36
37
38function dump_xml($xml)
39{
40  $color=Array(
41   0 => "000000",
42   1 => "ff0000",
43   2 => "0000ff",
44   3 => "008000",
45   4 => "800000",
46   5 => "000080",
47   6 => "008080",
48   7 => "808000",
49   8 => "800080",
50   9 => "808080");
51
52  $parser = xml_parser_create();
53  xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, 0);
54  xml_parser_set_option($parser, XML_OPTION_SKIP_WHITE, 1);
55  xml_parse_into_struct($parser, $xml, $values, $tags);
56  xml_parser_free($parser);
57
58  foreach($values as $key => $val)
59  {
60    switch($val['type'])
61    {
62      case "open":
63        echo "<span style='color:#".$color[$val['level']]."'>(".$val['level'].")".str_repeat("&nbsp;", 3*$val['level'])."".$val['tag']."</span>";
64        if(array_key_exists("attributes", $val))
65          foreach($val['attributes'] as $key2 => $val2)
66          {
67            echo "<br><span style='color:#".$color[$val['level']]."'>".str_repeat("&nbsp;", 5+3*$val['level'])."<i>[".$key2."] ".$val2."</i></span>";
68          }
69        break;
70      case "close":
71        echo "<span style='color:#".$color[$val['level']]."'>(".$val['level'].")".str_repeat("&nbsp;", 3*$val['level'])."/".$val['tag']."</span>";
72        if(array_key_exists("attributes", $val))
73          foreach($val['attributes'] as $key2 => $val2)
74          {
75            echo "<br><span style='color:#".$color[$val['level']]."'>".str_repeat("&nbsp;", 5+3*$val['level'])."<i>[".$key2."] ".$val2."</i></span>";
76          }
77        break;
78      case "complete":
79        echo "<span style='color:#".$color[$val['level']]."'>(".$val['level'].")".str_repeat("&nbsp;", 3*$val['level'])."/".$val['tag']."</span>";
80        if(array_key_exists("attributes", $val))
81          foreach($val['attributes'] as $key2 => $val2)
82          {
83            echo "<br><span style='color:#".$color[$val['level']]."'>".str_repeat("&nbsp;", 5+3*$val['level'])."<i>[".$key2."] ".$val2."</i></span>";
84          }
85        break;
86    }
87    if(array_key_exists('value', $val))
88     echo " <span style='color:#ff00ff;'>".$val['value']."</span>";
89    echo "<br>";
90
91  }
92
93  $tmp=new XmlData($xml);
94
95  //echo "has node:".($tmp->hasNodes()?"Y":"N")."<br>";
96
97  dump_node($tmp->getFirstNode());
98
99
100}
101
102function dump_node($node)
103{
104  if($node==NULL)
105    return(false);
106  //echo "name:".$node->getName()." / level:".$node->getLevel()." / attributes: ".count($node->getAttributes())." / has child:".($node->hasChilds()?"Y":"N")."<br>";
107
108  if($node->hasChilds())
109  {
110    dump_node($node->getFirstChild());
111  }
112
113  dump_node($node->getNextNode());
114}
115
116function dump_ifd($key2, $val2)
117{
118  echo sprintf("IFD %02d: ", $key2).$val2->toString()."<br>";
119
120  foreach($val2->getTags() as $key3 => $val3)
121  {
122    dump_tag($key3, $val3->getTag(), "<span style='color:#804080;'>".sprintf("[%02d] ", $key3).$val3->toString()."</span><br>");
123
124    /*
125    if($val3->isOffset())
126    {
127      echo "<div style='color:#ff0000;margin-left:40px;'>";
128      echo ConvertData::toHexDump($val3->getValue(), $val3->getType(),15)." => ".substr($val3->getValue(),0,254)."<br>";
129      echo "</div>";
130    }
131    */
132
133    if($val3->getTag()->getLabel() instanceof IfdReader)
134    {
135      echo "<div style='padding:1px;margin-bottom:2px;margin-right:4px;margin-left:25px;border:1px dotted #6060FF;'>";
136      dump_ifd($key3, $val3->getTag()->getLabel());
137      echo "</div>";
138    }
139  }
140}
141
142function dump_xmp($key2, $val2)
143{
144  if(is_string($val2->getValue()))
145    $extra=$val2->getValue();
146  elseif(is_array($val2->getValue()))
147    $extra=print_r($val2->getValue(), true);
148  else
149    $extra=ConvertData::toHexDump($val2->getValue(), ByteType::ASCII);
150
151  $extra="<br><span style='color:#000000;'>".$extra."</span><br>";
152
153  echo "<div style='color:#000000;margin-left:12px;border-bottom:1px solid #808080;";
154  if(!$val2->getIsKnown())
155  {
156    echo "background:#ffd0d0;'>";
157  }
158  elseif(!$val2->getIsImplemented())
159  {
160    echo "background:#ffffd0;'>";
161  }
162  else
163  {
164    echo "background:#d0ffd0;'>";
165    $extra="";
166  }
167
168  echo "<span style='color:#804080;'>".$val2->toString().$extra;
169 /* if($val2->getName()!=$val2->getId())
170    echo " ==> Id: ".$val2->getId();*/
171  echo "</span>";
172
173  echo "</div>";
174}
175
176function dump_tag($key3, $val3, $extra)
177{
178    echo "<div style='color:#000000;margin-left:12px;border-bottom:1px solid #808080;";
179    if(!$val3->getIsKnown())
180    {
181      echo "background:#ffd0d0;'>".$extra;
182    }
183    elseif(!$val3->getIsImplemented())
184    {
185      echo "background:#ffffd0;'>".$extra;
186    }
187    else
188    {
189      echo "background:#d0ffd0;'>";
190    }
191
192    echo str_replace(" ", "&nbsp;", "     ").$val3->toString("small")."<br>";
193
194    echo "</div>";
195}
196
197/*
198function cmp($a, $b)
199{
200    if ($a['value'] == $b['value']) {
201        return 0;
202    }
203    return ($a['value'] < $b['value']) ? -1 : 1;
204}
205
206function list_for_po()
207{
208
209  $tmpTagName=Array();
210  $tmpValues=Array();
211
212  $tagList=Array(
213    new IfdTags(),
214    new XmpTags(),
215    new IptcTags(),
216    new GpsTags(),
217    new PentaxTags(),
218  );
219
220
221  foreach($tagList as $key => $tag)
222  {
223
224    foreach($tag->getTags() as $key => $val)
225    {
226      if(array_key_exists('tagName', $val))
227        $name=$val['tagName'];
228      else
229        $name="";
230
231      if(is_string($key))
232        $tKey=$key;
233      else
234        $tKey=sprintf("0x%04x", $key);
235
236      if($name!="")
237        $tKey.=" ($name)";
238
239      if($name!="")
240      {
241        $tmpTagName[]=Array('group' => $tag->getLabel()." / ".$tKey, 'value' => $name);
242      }
243      else
244      {
245        $tmpTagName[]=Array('group' => $tag->getLabel()." / ".$tKey, 'value' => $key);
246      }
247
248      if(array_key_exists('tagValues', $val) and $val['translatable'])
249      {
250        foreach($val['tagValues'] as $key2 => $val2)
251        {
252          $tmpValues[]=Array('group' => $tag->getLabel()." / ".$tKey, 'value' => $val2);
253        }
254      }
255
256      if(array_key_exists('tagValues.special', $val) and $val['translatable'])
257      {
258        foreach($val['tagValues.special'] as $key2 => $val2)
259        {
260          $tmpValues[]=Array('group' => $tag->getLabel()." / ".$tKey, 'value' => $val2);
261        }
262      }
263
264      if(array_key_exists('tagValues.specialNames', $val) and $val['translatable'])
265      {
266        foreach($val['tagValues.specialNames'] as $key2 => $val2)
267        {
268          $tmpValues[]=Array('group' => $tag->getLabel()." / ".$tKey, 'value' => $val2);
269        }
270      }
271
272      if(array_key_exists('tagValues.specialValues', $val) and $val['translatable'])
273      {
274        foreach($val['tagValues.specialValues'] as $key2 => $val2)
275        {
276          $tmpValues[]=Array('group' => $tag->getLabel()." / ".$tKey, 'value' => $val2);
277        }
278      }
279
280      if(array_key_exists('tagValues.computed', $val) and $val['translatable'])
281      {
282        foreach($val['tagValues.computed'] as $key2 => $val2)
283        {
284          $tmpValues[]=Array('group' => $tag->getLabel()." / ".$tKey, 'value' => $val2);
285        }
286      }
287
288
289    }
290
291  }
292
293  $tmp=array_merge($tmpTagName, $tmpValues);
294  usort($tmp, "cmp");
295
296  foreach($tmp as $key => $val)
297  {
298    echo "#. ".$val['group']."<br>";
299    echo "msgid \"".$val['value']."\"<br>";
300    echo "msgstr \"".$val['value']."\"<br><br>";
301  }
302
303}
304*/
305
306  if(isset($_GET["file"]))
307  {
308    $file=$_GET["file"];
309  }
310  else
311  {
312    die("no filename ?<br/></body></html>");
313  }
314
315  $memory=memory_get_usage();
316  echo "memory : ".$memory."<br>";
317
318  $jpeg = new JpegReader($file);
319  echo "<span style='font-family:monospace;'>JpegReader<br>";
320  echo "fileName=".$jpeg->getFileName()."<br>";
321  echo "isValid=".($jpeg->isValid()?"Y":"N")."<br>";
322  echo "isLoaded=".($jpeg->isLoaded()?"Y":"N")."<br>";
323  echo "NbMarkers=".$jpeg->countAppMarkerSegments()."<br>";
324  foreach($jpeg->getAppMarkerSegments() as $key => $val)
325  {
326    echo "<div style='border:1px solid #000000;padding:4px;margin:1px;'>";
327    echo sprintf("[%02d] ", $key).$val->toString()."<br>";
328    if($val->dataLoaded())
329    {
330      echo "<div style='color:#0000ff;font-weight:bold;margin-left:20px;'>";
331      $data=$val->getData();
332      if($data instanceof TiffReader)
333      {
334        echo $data->toString()."<br>";
335
336        foreach($data->getIFDs() as $key2 => $val2)
337        {
338          echo "<div style='color:#0000ff;font-weight:normal;margin-left:12px;'>";
339
340          dump_ifd($key2, $val2);
341
342          echo "</div>";
343        }
344
345      }
346      elseif($data instanceof XmpReader)
347      {
348        echo htmlentities($data->toString())."<br>";
349        echo dump_xml($data->toString())."<br>";
350
351        foreach($data->getTags() as $key2 => $val2)
352        {
353          echo "<div style='color:#0000ff;font-weight:normal;margin-left:12px;'>";
354
355          dump_xmp($key2, $val2);
356
357          echo "</div>";
358        }
359
360
361      }
362      elseif($data instanceof IptcReader)
363      {
364        $data->optimizeDateTime();
365        foreach($data->getTags() as $key2 => $val2)
366        {
367          echo "<div style='color:#0000ff;font-weight:normal;margin-left:12px;'>";
368
369          dump_tag($key2, $val2, "");
370
371          echo "</div>";
372        }
373
374
375      }
376      else
377      {
378       echo htmlentities($val->getData())."<br>";
379      }
380      echo "</div>";
381    }
382    echo "</div>";
383
384  }
385  echo "</span><hr>";
386
387
388  Locale::set("en_UK");
389
390  echo "<span style='font-family:monospace;'>JpegMetaData - tag from test file<br>";
391  echo "<table style='border:1px solid #000000;'>";
392  echo "<tr style='border-bottom:1x solid #000000;'><th>Key</th><th>Name</th><th>Value</th><th>Computed Value</th></tr>";
393  $jpegmd = new JpegMetaData($file, Array(
394    'filter' => JpegMetaData::TAGFILTER_IMPLEMENTED,
395    'optimizeIptcDateTime' => true)
396  );
397
398  $i=0;
399  foreach($jpegmd->getTags() as $key => $val)
400  {
401    $txt=$val->getLabel();
402    $value=$val->getValue();
403
404    if($val->getIsTranslatable())
405      $style="color:#0000ff";
406    else
407      $style="color:#000000";
408
409    if(is_string($txt) and $val->getIsTranslatable())
410      $txt=Locale::get($txt);
411    if($txt instanceof DateTime)
412      $txt=$txt->format("Y-m-d H:i:s");
413    if(is_array($txt))
414      $txt=print_r($txt, true);
415    if(is_array($value))
416      $value=print_r($value, true);
417    echo "<tr><td>".$key."</td><td>".Locale::get($val->getName())."</td><td>".$value."</td><td style='$style'>".$txt."</td></tr>";
418    $i++;
419  }
420  echo "</table>Total tags: $i</span><hr>";
421
422  $i=0;
423  $j=0;
424  echo "<span style='font-family:monospace;'>JpegMetaData - known tags<br>";
425  echo "<table style='border:1px solid #000000;'>";
426  echo "<tr style='border-bottom:1x solid #000000;'><th>Key</th><th>Name</th><th>Implemented</th></tr>";
427  foreach($jpegmd->getTagList(Array('filter' => JpegMetaData::TAGFILTER_ALL, 'xmp' => true, 'maker' => true, 'iptc' => true)) as $key => $val)
428  {
429    $val['implemented']?$i++:$j++;
430    echo "<tr><td>".$key."</td><td>".Locale::get($val['name'])."</td><td>".($val['implemented']?"yes":"no")."</td></tr>";
431  }
432  echo "</table>Total tags ; implemented: $i - not implemented: $j</span><hr>";
433
434  unset($jpegmd);
435  unset($jpeg);
436  $memory2=memory_get_usage();
437  echo "memory : ".$memory2." (memory leak ? = ".($memory2-$memory).")<br>";
438  echo "<br/></body></html>";
439?>
Note: See TracBrowser for help on using the repository browser.