4images Forum & Community

4images Issues / Ausgaben => Discussion & Troubleshooting => Topic started by: flattley on January 08, 2011, 02:06:08 AM

Title: Exif Information
Post by: flattley on January 08, 2011, 02:06:08 AM
Hi all, I am currently using 4images version 1.7.9 and I am trying to get the exif information to be shown.

I have read a couple of the tutorials and plugins on how to do this. I can get most of the exif info shown, but the one I am having trouble with is the GPS Lat/Lon/Alt exif information.

I have modified the includes/functions.php, exif.php files and I can't get it to show the GPS exif info at all.

This is what I have added to the includes/functions file:

Quote
 $exif_match['GPSLatitude'] = "GPSLatitude";
  $exif_match['GPSLatitudeRef'] = "GPSLatitudeRef";
  $exif_match['GPSLongitude'] = "GPSLongitude";
  $exif_match['GPSLongitudeRef'] = "GPSLongitudeRef";
  $exif_match['GPSAltitude'] = "GPSAltitude";

...

elseif ($key == "GPSLatitudeRef") {
              if ($exif_info == "N") {
                 $GPSLatitudeRef = "North";
                 $GPSLatfaktor = 1;
                 } else {
                    $GPSLatitudeRef = "South";
                    $GPSLatfaktor = -1;
                 }
                 
        }
        elseif ($key == "GPSLongitudeRef") {
              if ($exif_info == "E") {
                 $GPSLongitudeRef = "East";
                 $GPSLongfaktor = 1;
                 } else {
                 $GPSLongitudeRef = "West";
                 $GPSLongfaktor = -1;
                 }
            }
        elseif ($key == "GPSLatitude") {
           $GPSLatitude_h = explode("/", $exif_info[0]);
           $GPSLatitude_m = explode("/", $exif_info[1]);
           $GPSLatitude_s = explode("/", $exif_info[2]);
           
           $GPSLat_h = $GPSLatitude_h[0] / $GPSLatitude_h[1];
           $GPSLat_m = $GPSLatitude_m[0] / $GPSLatitude_m[1];
           $GPSLat_s = $GPSLatitude_s[0] / $GPSLatitude_s[1];
           
           $GPSLatGrad = $GPSLatfaktor * ($GPSLat_h + ($GPSLat_m + ($GPSLat_s / 60))/60);
           
           $exif_array[$exif_match[$key]] =  $GPSLatitudeRef . " " .$GPSLat_h . "° ". $GPSLat_m . "' " . $GPSLat_s . "'' ($GPSLatGrad)";
        }
        elseif ($key == "GPSLongitude") {
           $GPSLongitude_h = explode("/", $exif_info[0]);
           $GPSLongitude_m = explode("/", $exif_info[1]);
           $GPSLongitude_s = explode("/", $exif_info[2]);
           
           $GPSLong_h = $GPSLongitude_h[0] / $GPSLongitude_h[1];
           $GPSLong_m = $GPSLongitude_m[0] / $GPSLongitude_m[1];
           $GPSLong_s = $GPSLongitude_s[0] / $GPSLongitude_s[1];
           
           $GPSLongGrad = $GPSLatfaktor * ($GPSLong_h + ($GPSLong_m + ($GPSLong_s / 60))/60);
           
           $exif_array[$exif_match[$key]] =  $GPSLongitudeRef . " " . $GPSLong_h . "° ". $GPSLong_m . "' " . $GPSLong_s . "'' ($GPSLongGrad)";
        }
        elseif ($key == "GPSAltitude") {
             $GPSAltitude = explode("/", $exif_info);
          $exif_array[$exif_match[$key]] = ($GPSAltitude[0] / $GPSAltitude[1]) . " Meter über NN";
        }  
I have also included a link to the exif.php file and this is the contents of that  file:

Quote
<?php

/*
   4images EXIF MOD
   Version : 0.3
   Date: 2003-01-17
   By: fatman (fatman_li@yahoo.com.hk)
   
*/

// true: enable the field filter
// false: disable the field filter
define('EXIF_CONTROL', true);

// add the field name for show in exif section
// remember the field name with the colon ":"
define('EXIF_FILTER', "
Model:
Orientation:
ExposureTime:
FNumber:
ISOSpeedRatings:
ExposureBiasValue:
MeteringMode:
Flash:
FocalLength:
ColorSpace:
FileSource:
//Below is self added
GPSLatitutde:
//End
");

function exif_filter_control() {
  return EXIF_CONTROL;
}

function exif_filter($name) {
  if (strpos(EXIF_FILTER, ($name . ":")) > 0) {
    return true;
  } else {
    return false;
  }
  
}   


function exif_get_str_val($val) {
  $val = (substr($val, 0, strpos($val, "/"))) / (substr($val, strpos($val, "/") + 1));
  return $val;
}

function exif_parse_value($name, $val) {
  switch($name) {
     case "Orientation":
       if($val==1) $val = "Normal";
       if($val==2) $val = "Mirrored";
       if($val==3) $val = "Upsidedown";
       if($val==4) $val = "Upsidedown Mirrored";
       if($val==5) $val = "90deg CW Mirrored";
       if($val==6) $val = "90deg CCW";
       if($val==7) $val = "90deg CCW Mirrored";
       if($val==8) $val = "90deg CW";
       break;
     case "ResolutionUnit":
       if($val==1) $val = "No Unit";
       if($val==2) $val = "Inch";
       if($val==3) $val = "Centimeter";
       break;
     case "YCbCrPositioning":
       if($val==1) $val = "Pixel Array";
       if($val==2) $val = "Datum Point";
       break;
     case "ExposureTime":
       $val = $val . " seconds";
       break;
     case "FNumber":
       $val = "F/" . exif_get_str_val($val);
       break;
     case "ExposureProgram":
       if($val==1) $val = "Manual control";
       if($val==2) $val = "Program normal";
       if($val==3) $val = "Aperture priority";
       if($val==4) $val = "Shutter priority";
       if($val==5) $val = "Program creative(slow program)";
       if($val==6) $val = "Program action(high-speed program)";
       if($val==7) $val = "Portrait mode";
       if($val==8) $val = "Landscape mode";
       break;      
     case "ExifVersion":
       $val = round($val / 100, 2);
       break;
     case "ComponentsConfiguration":
       $val = bin2hex($val);
       $val = str_replace("01","Y",$val);
       $val = str_replace("02","Cb",$val);
       $val = str_replace("03","Cr",$val);
       $val = str_replace("04","R",$val);
       $val = str_replace("05","G",$val);
       $val = str_replace("06","B",$val);
       $val = str_replace("00","",$val);      
       break;
     case "CompressedBitsPerPixel":
       $val = exif_get_str_val($val);
       break;
     case "ShutterSpeedValue":
       $val = "1/" . round(pow(2, exif_get_str_val($val))) . " seconds";
       break;
     case "ApertureValue":
       $val = "F/" . round(pow(sqrt(2), exif_get_str_val($val)),1);
       break;
     case "BrightnessValue ":
       $val = exif_get_str_val($val);
       break;      
     case "ExposureBiasValue":
       if ((substr($val, 0, strpos($val, "/"))) == "0") {
           $val = "0 Step";
       } else {
           $val = $val . " Step";
       }
       break;
     case "MaxApertureValue":
       $val = "F/" . round(pow(sqrt(2), exif_get_str_val($val)),1);
       break;
     case "SubjectDistance":
       $val = exif_get_str_val($val) . " M";
       break;      
     case "MeteringMode":
       if($val==0) $val = "Unknown";
       if($val==1) $val = "Average";
       if($val==2) $val = "Center Weighted Average";
       if($val==3) $val = "Spot";
       if($val==4) $val = "Multi-spot";
       if($val==5) $val = "Multi-segment";
       if($val==6) $val = "Partial";
       if($val==255) $val = "Other";      
       break;
     case "LightSource":
       if($val==0) $val = "Unknown";
       if($val==1) $val = "Daylight";
       if($val==2) $val = "Fluorescent";
       if($val==3) $val = "Tungsten";
       if($val==10) $val = "Flash";
       if($val==17) $val = "Standard light A";
       if($val==18) $val = "Standard light B";
       if($val==19) $val = "Standard light C";
       if($val==20) $val = "D55";
       if($val==21) $val = "D65";
       if($val==22) $val = "D75";
       if($val==255) $val = "Other";
       break;      
     case "Flash":
       if($val==0) $val = "No Flash";
       if($val==1) $val = "Flash fired";
       if($val==5) $val = "Flash fired but strobe return light not detected";
       if($val==7) $val = "Flash fired and strobe return light detected";
       if($val==9) $val = "Undefined";
       break;
     case "FocalLength":
       $val = exif_get_str_val($val) . " mm";
       break;
     case "FlashPixVersion":
       $val = round($val / 100, 2);
       break;
     case "ColorSpace":
       if($val==1) $val = "sRGB";
       if($val=='65535') $val = "Uncalibrated";
       break;
     case "FocalPlaneXResolution":
       $val = round(exif_get_str_val($val));
       break;
     case "FocalPlaneYResolution":
       $val = round(exif_get_str_val($val));
       break;                      
     case "FocalPlaneResolutionUnit":
       if($val==1) $val = "No Unit";
       if($val==2) $val = "Inch";
       if($val==3) $val = "Centimeter";
       break;
     case "SensingMethod":
       if($val==2) $val = "1 chip color area sensor";
       break;
     case "FileSource":
       $val = bin2hex($val);
       if($val==0x03) $val = "Digital still camera";      
       break;
     case "FileSource":
       $val = bin2hex($val);
       if($val==0x01) $val = "Directly photographed";      
       break;
//Below is self added
     case "GPSLatitude":
       $val = exif_get_str_val($val);
       break;
//End


     }
    
  return $val;
}
?>

Any help or pointers of where I may be going wrong is much appreciated.

The image properties include the GPS info

Cheers,

Chris
Title: Re: Exif Information
Post by: V@no on January 08, 2011, 04:34:53 AM
This is what I have added to the includes/functions file:
Is that the EXACT code you've added? if so, it already doesn't look correct...
Perhaps show the entire function where you added that code (please use [code][/code] for code).
Title: Re: Exif Information
Post by: flattley on January 08, 2011, 04:32:25 PM
Hi V@no,

This is the exif function from the functions.php file

Code: [Select]

function get_exif_info($exif) {
  $exif_match = array();
  $exif_match['Make'] = "make";
  $exif_match['Model'] = "model";
  $exif_match['DateTimeOriginal'] = "datetime";
  $exif_match['ISOSpeedRatings'] = "isospeed";
  $exif_match['ExposureTime'] = "exposure";
  $exif_match['FNumber'] = "aperture";
  $exif_match['FocalLength'] = "focallen";

  $exif_match['GPSLatitude'] = "GPSLatitude";
  $exif_match['GPSLatitudeRef'] = "GPSLatitudeRef";
  $exif_match['GPSLongitude'] = "GPSLongitude";
  $exif_match['GPSLongitudeRef'] = "GPSLongitudeRef";
  $exif_match['GPSAltitude'] = "GPSAltitude";




  $exif_array = array();
  if (is_array($exif)) {
    foreach ($exif as $key => $val) {
      if (isset($exif_match[$key])) {
        $exif_info = $val;
        if ($key == "DateTimeOriginal") {
          $exif_array[$exif_match[$key]] = preg_replace("/([0-9]{4}):([0-9]{2}):([0-9]{2})/", "\\3.\\2.\\1", $exif_info);
        }
        elseif ( $key == "ExposureTime" ) {
            $ExposureTime = explode("/", $exif_info);
            if ( $ExposureTime[0] == 1 && $ExposureTime[1] == 1 ){
                $exif_array[$exif_match[$key]] = $ExposureTime[1]." sec(s)";
            } elseif ( $ExposureTime[0] == 1 ) {
                $exif_array[$exif_match[$key]] = "1/".($ExposureTime[1] * $ExposureTime[0])." sec(s)";
            } elseif ( $ExposureTime[1] > 1 ) {
                $exif_array[$exif_match[$key]] = ($ExposureTime[0]/$ExposureTime[1])." sec(s)";
            } elseif( $ExposureTime[1] == 1 ) {
                $exif_array[$exif_match[$key]] = ($ExposureTime[0] * $ExposureTime[1])." sec(s)";
            }
        }
        elseif ($key == "FNumber") {
 $aperture = explode("/", $exif_info);
          $exif_array[$exif_match[$key]] = "F/" . ($aperture[0] / $aperture[1]);
        }
        elseif ($key == "FocalLength") {
 $focalLen = explode("/", $exif_info);
          $exif_array[$exif_match[$key]] = ($focalLen[0] / $focalLen[1]) . "mm";
        }

// GPS EXIF START - Changes by Erik Groennerud - www.koelschwasser.de 8.2007
        elseif ($key == "GPSLatitudeRef") {
  if ($exif_info == "N") {
  $GPSLatitudeRef = "North";
  $GPSLatfaktor = 1;
  } else {
  $GPSLatitudeRef = "South";
  $GPSLatfaktor = -1;
  }
 
        }
        elseif ($key == "GPSLongitudeRef") {
  if ($exif_info == "E") {
  $GPSLongitudeRef = "East";
  $GPSLongfaktor = 1;
  } else {
  $GPSLongitudeRef = "West";
  $GPSLongfaktor = -1;
  }
}
        elseif ($key == "GPSLatitude") {
         $GPSLatitude_h = explode("/", $exif_info[0]);
         $GPSLatitude_m = explode("/", $exif_info[1]);
         $GPSLatitude_s = explode("/", $exif_info[2]);
        
         $GPSLat_h = $GPSLatitude_h[0] / $GPSLatitude_h[1];
         $GPSLat_m = $GPSLatitude_m[0] / $GPSLatitude_m[1];
         $GPSLat_s = $GPSLatitude_s[0] / $GPSLatitude_s[1];
        
         $GPSLatGrad = $GPSLatfaktor * ($GPSLat_h + ($GPSLat_m + ($GPSLat_s / 60))/60);
        
         $exif_array[$exif_match[$key]] =  $GPSLatitudeRef . " " .$GPSLat_h . "° ". $GPSLat_m . "' " . $GPSLat_s . "'' ($GPSLatGrad)";
        }
        elseif ($key == "GPSLongitude") {
         $GPSLongitude_h = explode("/", $exif_info[0]);
         $GPSLongitude_m = explode("/", $exif_info[1]);
         $GPSLongitude_s = explode("/", $exif_info[2]);
        
         $GPSLong_h = $GPSLongitude_h[0] / $GPSLongitude_h[1];
         $GPSLong_m = $GPSLongitude_m[0] / $GPSLongitude_m[1];
         $GPSLong_s = $GPSLongitude_s[0] / $GPSLongitude_s[1];
        
         $GPSLongGrad = $GPSLatfaktor * ($GPSLong_h + ($GPSLong_m + ($GPSLong_s / 60))/60);
        
         $exif_array[$exif_match[$key]] =  $GPSLongitudeRef . " " . $GPSLong_h . "° ". $GPSLong_m . "' " . $GPSLong_s . "'' ($GPSLongGrad)";
        }
        elseif ($key == "GPSAltitude") {
    $GPSAltitude = explode("/", $exif_info);
          $exif_array[$exif_match[$key]] = ($GPSAltitude[0] / $GPSAltitude[1]) . " Metres";
        }  
// GPS EXIF ENDE



        else {
          $exif_array[$exif_match[$key]] = $exif_info;
        }
      }
    }
  }
  return $exif_array;
}

Title: Re: Exif Information
Post by: V@no on January 08, 2011, 04:47:40 PM
Maybe it's your photos?

it seem to be working fine for me:
Title: Re: Exif Information
Post by: flattley on January 08, 2011, 05:05:46 PM
Hi V@no,

Thanks for your reply.

Have you changed any other files at all to display this. I tried adding it to the exif.php file and it isn't showing anything at all. The info is in the image properties when I view it on my computer. I have attached the image properties from the right click menu on the computer and also what it is displaying on the photo details on the gallery

This is what I have in the exif.php file

Code: [Select]
<?php

/*
4images EXIF MOD 
Version : 0.3
Date: 2003-01-17
By: fatman (fatman_li@yahoo.com.hk)

*/

// true: enable the field filter
// false: disable the field filter
define('EXIF_CONTROL'true);

// add the field name for show in exif section 
// remember the field name with the colon ":"
define('EXIF_FILTER'"
Model:
Orientation:
ExposureTime:
FNumber:
ISOSpeedRatings:
ExposureBiasValue:
MeteringMode:
Flash:
FocalLength:
ColorSpace:
FileSource:
GPSLatitutde:
Lon:
Alt:
"
);

function 
exif_filter_control() {
  return 
EXIF_CONTROL;
}

function 
exif_filter($name) {
  if (
strpos(EXIF_FILTER, ($name ":")) > 0) {
    return 
true;
  } else {
    return 
false;
  }
  
}



function 
exif_get_str_val($val) {
  
$val = (substr($val0strpos($val"/"))) / (substr($valstrpos($val"/") + 1));
  return 
$val;
}

function 
exif_parse_value($name$val) {
  switch(
$name) {
     case 
"Orientation"
       if(
$val==1$val "Normal";
       if(
$val==2$val "Mirrored";
       if(
$val==3$val "Upsidedown";
       if(
$val==4$val "Upsidedown Mirrored";
       if(
$val==5$val "90deg CW Mirrored";
       if(
$val==6$val "90deg CCW";
       if(
$val==7$val "90deg CCW Mirrored";
       if(
$val==8$val "90deg CW";
       break;
     case 
"ResolutionUnit"
       if(
$val==1$val "No Unit";
       if(
$val==2$val "Inch";
       if(
$val==3$val "Centimeter";
       break;
     case 
"YCbCrPositioning"
       if(
$val==1$val "Pixel Array";
       if(
$val==2$val "Datum Point";
       break;
     case 
"ExposureTime"
       
$val $val " seconds";
       break;
     case 
"FNumber"
       
$val "F/" exif_get_str_val($val);
       break;
     case 
"ExposureProgram"
       if(
$val==1$val "Manual control";
       if(
$val==2$val "Program normal";
       if(
$val==3$val "Aperture priority";
       if(
$val==4$val "Shutter priority";
       if(
$val==5$val "Program creative(slow program)";
       if(
$val==6$val "Program action(high-speed program)";
       if(
$val==7$val "Portrait mode";
       if(
$val==8$val "Landscape mode";
       break;       
     case 
"ExifVersion"
       
$val round($val 1002);
       break;
     case 
"ComponentsConfiguration"
       
$val bin2hex($val);
       
$val str_replace("01","Y",$val);
       
$val str_replace("02","Cb",$val);
       
$val str_replace("03","Cr",$val);
       
$val str_replace("04","R",$val);
       
$val str_replace("05","G",$val);
       
$val str_replace("06","B",$val);
       
$val str_replace("00","",$val);       
       break;
     case 
"CompressedBitsPerPixel"
       
$val exif_get_str_val($val);
       break;
     case 
"ShutterSpeedValue"
       
$val "1/" round(pow(2exif_get_str_val($val))) . " seconds";
       break;
     case 
"ApertureValue"
       
$val "F/" round(pow(sqrt(2), exif_get_str_val($val)),1);
       break;
     case 
"BrightnessValue "
       
$val exif_get_str_val($val);
       break;       
     case 
"ExposureBiasValue":
       if ((
substr($val0strpos($val"/"))) == "0") {
       
 $val "0 Step";
       } else {
       
 $val $val " Step";
       }
       break;
     case 
"MaxApertureValue"
       
$val "F/" round(pow(sqrt(2), exif_get_str_val($val)),1);
       break;
     case 
"SubjectDistance"
       
$val exif_get_str_val($val) . " M";
       break;       
     case 
"MeteringMode"
       if(
$val==0$val "Unknown";
       if(
$val==1$val "Average";
       if(
$val==2$val "Center Weighted Average";
       if(
$val==3$val "Spot";
       if(
$val==4$val "Multi-spot";
       if(
$val==5$val "Multi-segment";
       if(
$val==6$val "Partial";
       if(
$val==255$val "Other";       
       break;
     case 
"LightSource"
       if(
$val==0$val "Unknown";
       if(
$val==1$val "Daylight";
       if(
$val==2$val "Fluorescent";
       if(
$val==3$val "Tungsten";
       if(
$val==10$val "Flash";
       if(
$val==17$val "Standard light A";
       if(
$val==18$val "Standard light B";
       if(
$val==19$val "Standard light C";
       if(
$val==20$val "D55";
       if(
$val==21$val "D65";
       if(
$val==22$val "D75";
       if(
$val==255$val "Other";
       break;       
     case 
"Flash"
       if(
$val==0$val "No Flash";
       if(
$val==1$val "Flash fired";
       if(
$val==5$val "Flash fired but strobe return light not detected";
       if(
$val==7$val "Flash fired and strobe return light detected";
       if(
$val==9$val "Undefined"
       break;
     case 
"FocalLength"
       
$val exif_get_str_val($val) . " mm";
       break; 
     case 
"FlashPixVersion"
       
$val round($val 1002);
       break;
     case 
"ColorSpace"
       if(
$val==1$val "sRGB";
       if(
$val=='65535'$val "Uncalibrated";
       break;
     case 
"FocalPlaneXResolution"
       
$val round(exif_get_str_val($val));
       break; 
     case 
"FocalPlaneYResolution"
       
$val round(exif_get_str_val($val));
       break;                       
     case 
"FocalPlaneResolutionUnit"
       if(
$val==1$val "No Unit";
       if(
$val==2$val "Inch";
       if(
$val==3$val "Centimeter";
       break;
     case 
"SensingMethod"
       if(
$val==2$val "1 chip color area sensor";
       break;
     case 
"FileSource":
       
$val bin2hex($val);
       if(
$val==0x03$val "Digital still camera";      
       break;
     case 
"FileSource":
       
$val bin2hex($val);
       if(
$val==0x01$val "Directly photographed";      
       break;
     case 
"GPSLatitude":
       
$val exif_get_str_val($val);
       break;



     }
     
  return 
$val;
}
?>

Title: Re: Exif Information
Post by: V@no on January 08, 2011, 05:10:43 PM
No, I haven't changed anything else, it's a fresh v1.7.9 with your modified function. Perhaps your issue is related to EXIF mod you are using, not images
Title: Re: Exif Information
Post by: flattley on January 08, 2011, 05:13:06 PM
Would you suggest that I don't use the exif mod? Does 4images have a built in exif function without using a mod to get the exif data?
Title: Re: Exif Information
Post by: V@no on January 08, 2011, 05:17:03 PM
4images has the feature, but very limited. If I'm not mistaken the mod (there are at least two of them by the way) provide much wider range of information.
I'm not suggesting you don't use the mod, but I'd suggest you try ask at the mod's topic, perhaps author or someone else who is familiar with the mod can assist you.
Title: Re: Exif Information
Post by: flattley on January 08, 2011, 05:19:23 PM
OK V@no, thanks for your help anyway. I think I found the other exif mod and it seems to be what I am looking for
Title: Re: Exif Information
Post by: mawenzi on January 08, 2011, 06:36:28 PM
@flattley

... try this ... http://www.4homepages.de/forum/index.php?topic=21017.0