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; +}  | 
