aboutsummaryrefslogtreecommitdiff
path: root/www/inc/exif.inc.php
diff options
context:
space:
mode:
Diffstat (limited to 'www/inc/exif.inc.php')
-rw-r--r--www/inc/exif.inc.php223
1 files changed, 223 insertions, 0 deletions
diff --git a/www/inc/exif.inc.php b/www/inc/exif.inc.php
new file mode 100644
index 0000000..f78741e
--- /dev/null
+++ b/www/inc/exif.inc.php
@@ -0,0 +1,223 @@
+<?php
+
+
+function formatEXIF ($k,$v) {
+ // format some special cases
+ // dunno if EXIF support formats it so weirdly everywhere.
+ // Sure does in my php4
+
+ switch ($k) {
+ case "FocalLength":
+ $out = eval("return $v;");
+ $out .= "mm";
+ return $out;
+ break;
+ case "FNumber":
+ $out = "f/";
+ $out .= eval("return $v;");
+ return $out;
+ break;
+ case "ExposureTime":
+ // numerator = cistatel; jmenovatel = denominator :)
+ $x = explode("/",$v,2);
+ if ($x[0]>=100) {
+ $out = eval("return ${x[0]}/${x[1]};");
+ $out .= "s";
+ return $out;
+ } else {
+ return "1/".(1.0/($x[0]/$x[1]))."s";
+ }
+ break;
+ case "Flash";
+ if ($v=="0") {
+ return "No Flash";
+ } else {
+ return $v;
+ }
+ break;
+ case "ISOSpeedRatings":
+ return "ISO" . $v;
+ break;
+ case "GainControl";
+ return "EV" . $v;
+ break;
+ case "FocalLengthIn35mmFilm":
+ return $v . "mm";
+ break;
+ case "DateTime":
+ //return date("M d Y H:i:s", $v);
+ ereg("^([0-9]{4}):([0-9]{1,2}):([0-9]{1,2}) (.*)",$v,$x);
+ return $x[1] . "/" . $x[2] . "/" . $x[3] . " " . $x[4];
+ break;
+ default:
+ return $v;
+ }
+}
+
+
+if ($exif_prog=="php4") {
+ // php internal handling
+ // $file is LQ image
+ $exif_array = exif_read_data("$file");
+ reset($exif_array);
+ if ($exif_show) reset($exif_show);
+
+ if ($exif_array["Make"]) { // only render all this
+ // if there is EXIF header
+ // fancy table look
+ echo "<div id=\"exif_table\" style=\"display: none;\">\n";
+ echo "<table class=\"exif\" border=\"0\">\n";
+ //co ukazat (podle exif_show)
+ if ($exif_show) {
+ while (list($kx,$x) = each($exif_show)) {
+ while(list($k,$v)=each($exif_array)) {
+ if ($kx==$k) {
+ echo "<tr>";
+ echo "<td align=\"right\">";
+ echo $x;
+ echo ": </td>";
+ echo "<td><b>";
+ echo formatEXIF($k,$v);
+ echo "</b></td>";
+ echo "</tr>\n";
+ }
+ }
+ reset($exif_array);
+ }
+ } else {
+ //ukaze vsechno v tabulce
+ while(list($k,$v)=each($exif_array)) {
+ echo "<tr>";
+ echo "<td align=\"right\">";
+ echo $k;
+ echo ": </td>";
+ echo "<td><b>";
+ echo formatEXIF($k,$v);
+ echo "</b></td>";
+ echo "</tr>\n";
+ }
+ }
+ echo "<tr>\n";
+ echo "<td></td>";
+ echo "<td><a href=\"javascript:toggle_exif()\">" . __("Less info");
+ echo "</a></td>";
+ echo "</tr>\n";
+ echo "</table>\n";
+ echo "</div>\n";
+
+
+
+
+
+ // selected EXIF header on one line
+ echo "<div id=\"exif_line\">\n";
+ echo "<p class=\"exif\">";
+ reset($exif_array);
+ if ($exif_show) reset($exif_show);
+ if ($exif_show) {
+ while (list($kx,$x) = each($exif_show)) {
+ while(list($k,$v)=each($exif_array)) {
+ if ($kx==$k) {
+ echo "<span title=\"$x\">";
+ echo formatEXIF($k,$v);
+ echo "</span> | ";
+ }
+ }
+ reset($exif_array);
+ }
+ } else {
+ /* vsechny exif headers inline */
+ while(list($k,$v)=each($exif_array)) {
+ echo "<span title=\"";
+ echo $k;
+ echo "\">";
+ echo formatEXIF($k,$v);
+ echo "</span> | ";
+ }
+ }
+
+ echo "<a href=\"javascript:toggle_exif()\">" . __("More info");
+ echo "</a></p>\n";
+ echo "</div>\n";
+ }
+
+
+
+
+
+
+
+
+
+} else {
+ // the old code, handles e.g. metacam and jhead as EXIF extractors
+ // loading lq means it won't work if the convertor doesn't copy EXIF data
+ // (newer ImageMagick can)
+ // PATCHES WELCOME
+ exec("$exif_prog \"$gallery_dir/$galerie/lq/img-$snimek.jpg\"", $exif_data, $exif_status);
+ if ($exif_status!="2") {
+ if ($exif_style=="descriptive") {
+ // fancy table look
+ echo "<table border=\"0\" align=\"center\" class=\"exif\">\n";
+ while ($x = current($exif_data)) {
+ eregi("^ *([^:]*): *(.*)", $x, $y);
+ //filter according to $exif_show array
+ if (!$exif_show) { //all fields shown
+ echo "<tr>";
+ echo "<td align=\"right\">$y[1] :</td>";
+ echo "<td><b>$y[2]</b></td>";
+ echo "</tr>\n";
+ } else {
+ reset($exif_show);
+ while ($z = current($exif_show)) {
+ //echo ".$z. ::: .$y[1].<br>";
+ if (trim($z) == trim($y[1])) {
+ echo "<tr>";
+ echo "<td align=\"right\">$y[1] :</td>";
+ echo "<td><b>$y[2]</b></td>";
+ echo "</tr>\n";
+ }
+ next($exif_show);
+ }
+ }
+ next($exif_data);
+ }
+ echo "<tr>\n";
+ echo "<td></td>";
+ # only show if EXIF header exists
+ if ($y[1]!="File") { // don't show when no EXIF
+ echo "<td><a href=\"$ThisScript?galerie=$galerie&photo=$snimek";
+ echo "&exif_style=simple&show_thumbs=$show_thumbs\">";
+ echo "<b>display in-line</b></a></td>\n";
+ }
+ echo "</tr>\n";
+ echo "</table>\n";
+ } else {
+ //simple plaintext look
+ echo "<p class=\"exif\" align=\"center\">";
+ while ($x = current($exif_data)) {
+ eregi("^ *([^:]*): *(.*)", $x, $y);
+ if (!$exif_show) { //all fields shown
+ echo "$y[2] |";
+ } else {
+ reset($exif_show);
+ while ($z = current($exif_show)) {
+ if (trim($z) == trim($y[1])) {
+ echo "$y[2] | ";
+ }
+ next($exif_show);
+ }
+ }
+ next($exif_data);
+ }
+ # only show if EXIF header exists
+ if ($y[1]!="File") {
+ echo "<a href=\"$ThisScript?galerie=$galerie&photo=$snimek";
+ echo "&exif_style=descriptive&show_thumbs=$show_thumbs\">";
+ echo "<b>display table</b></a>\n";
+ echo "</p>\n";
+ }
+ }
+ }
+}
+?>