Modification of EXIF extraction

This commit is contained in:
Quentin Ligier 2016-04-17 21:06:25 +02:00
parent 45a5713e1b
commit 00ca1e02d3
2 changed files with 66 additions and 45 deletions

View File

@ -307,7 +307,7 @@ final class Photo {
$newUrl2x = LYCHEE_UPLOADS_THUMB . $photoName[0] . '@2x.jpeg';
// Create thumbnails with Imagick
if(extension_loaded('imagick')&&Settings::get()['imagick']==='1') {
if(Settings::hasImagick()) {
// Read image
$thumb = new Imagick();
@ -727,39 +727,11 @@ final class Photo {
$info = getimagesize($url, $iptcArray);
// General information
$return['type'] = $info['mime'];
$return['width'] = $info[0];
$return['height'] = $info[1];
// Size
$size = filesize($url)/1024;
if ($size>=1024) $return['size'] = round($size/1024, 1) . ' MB';
else $return['size'] = round($size, 1) . ' KB';
// IPTC Metadata Fallback
$return['type'] = $info['mime'];
$return['width'] = $info[0];
$return['height'] = $info[1];
$return['title'] = '';
$return['description'] = '';
// IPTC Metadata
if(isset($iptcArray['APP13'])) {
$iptcInfo = iptcparse($iptcArray['APP13']);
if (is_array($iptcInfo)) {
$temp = @$iptcInfo['2#105'][0];
if (isset($temp)&&strlen($temp)>0) $return['title'] = $temp;
$temp = @$iptcInfo['2#120'][0];
if (isset($temp)&&strlen($temp)>0) $return['description'] = $temp;
$temp = @$iptcInfo['2#005'][0];
if (isset($temp)&&strlen($temp)>0&&$return['title']==='') $return['title'] = $temp;
}
}
// EXIF Metadata Fallback
$return['orientation'] = '';
$return['iso'] = '';
$return['aperture'] = '';
@ -768,6 +740,47 @@ final class Photo {
$return['shutter'] = '';
$return['focal'] = '';
$return['takestamp'] = 0;
$return['lens'] = '';
$return['tags'] = array();
$return['position'] = '';
$return['latitude'] = '';
$return['longitude'] = '';
$return['altitude'] = '';
// Size
$size = filesize($url)/1024;
if ($size>=1024) $return['size'] = round($size/1024, 1) . ' MB';
else $return['size'] = round($size, 1) . ' KB';
// IPTC Metadata
// See https://www.iptc.org/std/IIM/4.2/specification/IIMV4.2.pdf for mapping
if(isset($iptcArray['APP13'])) {
$iptcInfo = iptcparse($iptcArray['APP13']);
if (is_array($iptcInfo)) {
// Title
if (!empty($iptcInfo['2#105'][0])) $return['title'] = $iptcInfo['2#105'][0];
else if (!empty($iptcInfo['2#005'][0])) $return['title'] = $iptcInfo['2#005'][0];
// Description
if (!empty($iptcInfo['2#120'][0])) $return['description'] = $iptcInfo['2#120'][0];
// Tags
if (!empty($iptcInfo['2#025'])) $return['tags'] = $iptcInfo['2#025'];
// Position
$fields = array();
if (!empty($iptcInfo['2#090'])) $fields[] = trim($iptcInfo['2#090']);
if (!empty($iptcInfo['2#092'])) $fields[] = trim($iptcInfo['2#092']);
if (!empty($iptcInfo['2#095'])) $fields[] = trim($iptcInfo['2#095']);
if (!empty($iptcInfo['2#101'])) $fields[] = trim($iptcInfo['2#101']);
if (!empty($fields)) $return['position'] = implode(', ', $fields);
}
}
// Read EXIF
if ($info['mime']=='image/jpeg') $exif = @exif_read_data($url, 'EXIF', 0);
@ -779,24 +792,19 @@ final class Photo {
if (isset($exif['Orientation'])) $return['orientation'] = $exif['Orientation'];
else if (isset($exif['IFD0']['Orientation'])) $return['orientation'] = $exif['IFD0']['Orientation'];
$temp = @$exif['ISOSpeedRatings'];
if (isset($temp)) $return['iso'] = $temp;
if (!empty($exif['ISOSpeedRatings'])) $return['iso'] = $exif['ISOSpeedRatings'];
$temp = @$exif['COMPUTED']['ApertureFNumber'];
if (isset($temp)) $return['aperture'] = $temp;
if (!empty($exif['COMPUTED']['ApertureFNumber'])) $return['aperture'] = $exif['COMPUTED']['ApertureFNumber'];
$temp = @$exif['Make'];
if (isset($temp)) $return['make'] = trim($temp);
if (!empty($exif['Make'])) $return['make'] = trim($exif['Make']);
$temp = @$exif['Model'];
if (isset($temp)) $return['model'] = trim($temp);
if (!empty($exif['Model'])) $return['model'] = trim($exif['Model']);
$temp = @$exif['ExposureTime'];
if (isset($temp)) $return['shutter'] = $exif['ExposureTime'] . ' s';
if (!empty($exif['ExposureTime'])) $return['shutter'] = $exif['ExposureTime'] . ' s';
$temp = @$exif['FocalLength'];
if (isset($temp)) {
if (strpos($temp, '/')!==FALSE) {
if (strpos($temp, '/')!==false) {
$temp = explode('/', $temp, 2);
$temp = $temp[0] / $temp[1];
$temp = round($temp, 1);
@ -805,8 +813,14 @@ final class Photo {
$return['focal'] = $temp . ' mm';
}
$temp = @$exif['DateTimeOriginal'];
if (isset($temp)) $return['takestamp'] = strtotime($temp);
if (!empty($exif['DateTimeOriginal'])) $return['takestamp'] = strtotime($exif['DateTimeOriginal']);
// Lens field from Lightroom
if (!empty($exif['UndefinedTag:0xA434'])) $return['lens'] = trim($exif['UndefinedTag:0xA434']);
$return['latitude'] = '';
$return['longitude'] = '';
}

View File

@ -221,6 +221,13 @@ final class Settings {
}
/**
* @return array Returns the settings of Lychee.
*/
public static function hasImagick() {
return (bool)(extension_loaded('imagick')&&self::get()['imagick']==='1');
}
}
?>