diff options
Diffstat (limited to 'mod/lightpics/lib/exif.php')
-rw-r--r-- | mod/lightpics/lib/exif.php | 110 |
1 files changed, 110 insertions, 0 deletions
diff --git a/mod/lightpics/lib/exif.php b/mod/lightpics/lib/exif.php new file mode 100644 index 000000000..46a73e920 --- /dev/null +++ b/mod/lightpics/lib/exif.php @@ -0,0 +1,110 @@ +<?php +/** + * Exif Processing Library + * + * @package TidypicsExif + */ + +/** + * Pull EXIF data from image file + * + * @param TidypicsImage $image + */ +function td_get_exif($image) { + + // catch for those who don't have exif module loaded + if (!is_callable('exif_read_data')) { + return; + } + + $mime = $image->mimetype; + if ($mime != 'image/jpeg' && $mime != 'image/pjpeg') { + return; + } + + $filename = $image->getFilenameOnFilestore(); + $exif = exif_read_data($filename, 'IFD0,EXIF', true); + if (is_array($exif) && isset($exif['EXIF'])) { + $data = array_merge($exif['IFD0'], $exif['EXIF']); + foreach ($data as $key => $value) { + if (is_string($value)) { + // there are sometimes unicode characters that cause problems with serialize + $data[$key] = preg_replace( '/[^[:print:]]/', '', $value); + } + } + $image->tp_exif = serialize($data); + } +} + +/** + * Grab array of EXIF data for display + * + * @param TidypicsImage $image + * @return array|false + */ +function tp_exif_formatted($image) { + + $exif = $image->tp_exif; + if (!$exif) { + return false; + } + + $exif = unserialize($exif); + + $model = $exif['Model']; + if (!$model) { + $model = "N/A"; + } + $exif_data['Model'] = $model; + + $exposure = $exif['ExposureTime']; + if (!$exposure) { + $exposure = "N/A"; + } + $exif_data['Shutter'] = $exposure; + + //got the code snippet below from http://www.zenphoto.org/support/topic.php?id=17 + //convert the raw values to understandible values + $Fnumber = explode("/", $exif['FNumber']); + if ($Fnumber[1] != 0) { + $Fnumber = $Fnumber[0] / $Fnumber[1]; + } else { + $Fnumber = 0; + } + if (!$Fnumber) { + $Fnumber = "N/A"; + } else { + $Fnumber = "f/$Fnumber"; + } + $exif_data['Aperture'] = $Fnumber; + + $iso = $exif['ISOSpeedRatings']; + if (!$iso) { + $iso = "N/A"; + } + $exif_data['ISO Speed'] = $iso; + + $Focal = explode("/", $exif['FocalLength']); + if ($Focal[1] != 0) { + $Focal = $Focal[0] / $Focal[1]; + } else { + $Focal = 0; + } + if (!$Focal || round($Focal) == "0") { + $Focal = 0; + } + if (round($Focal) == 0) { + $Focal = "N/A"; + } else { + $Focal = round($Focal) . "mm"; + } + $exif_data['Focal Length'] = $Focal; + + $captured = $exif['DateTime']; + if (!$captured) { + $captured = "N/A"; + } + $exif_data['Captured'] = $captured; + + return $exif_data; +} |