Мой вариант решения. Немного исправил обработку данных exif в функции
img_get_params в /system/libs/files.helper.php
1. Модель камеры выводится корректно с именем производителя. Протестировал на имеющихся фото от Nikon, Canon, Fujifilm, Nokia Lumia, Apple iPhone, Meizu, Lenovo, Sony Errcsson.
Здесь оказалось, что в параметр exif 'IFD0.Model' Canon и Nikon, а также смартфон Lenovo прописывают не только модель аппарата, но и имя компании. Хотя для этого есть отдельное поле 'IFD0.Make'. Для этих берем только 'Model' Остальные фирмы разделяют данные на два поля, поэтому для них данные объединяем Make+Model.
2. Выдержка (exposuretime) отображается всегда в виде 1/число (в сек.)
3. Фокусное расстояние (focallength) отображается целым числом (в мм.)
4. Дополнительно вывел эквивалентное фокусное расстояние (focallengthin35mmfilm). Отображается целым числом (в мм.) Мне это интересно.
5. Что касается даты, оказалось, что Photoshop меняет при обработке exif параметр 'IFD0.DateTime'. Сносит дату съемки и ставит дату сохранения файла. Ну типа, "того ты же пофотошопил, значит это уже не оригинал". Поэтому из 3-х вариантов получения даты создания в функции, этот исключил (комментирован).
function img_get_params($path){
if ($s === false) { return false; }
if($exif){
if(isset($exif['COMPUTED']['ApertureFNumber'])){ $exif_data['aperturefnumber'] = $exif['COMPUTED']['ApertureFNumber'];
} elseif(isset($exif['EXIF']['FNumber'])){ $num = explode('/', $exif['EXIF']['FNumber']); $exif_data['aperturefnumber'] = 'f/'.($num[0]/$num[1]);
}
if(isset($exif['EXIF']['ExposureTime'])){ $num = explode('/', $exif['EXIF']['ExposureTime']); $exif_data['exposuretime'] = ($num[0] == 1) ?
$exif['EXIF']['ExposureTime'] : '1/'.round($num[1]/$num[0]).'s'; } elseif(isset($exif['IFD0']['ExposureTime'])){ $exif_data['exposuretime'] = $exif['IFD0']['ExposureTime'];
}
$make = false;
if(isset($exif['IFD0']['Make'])){ if ($exif['IFD0']['Make']!='NIKON CORPORATION'&&$exif['IFD0']['Make']!='Canon'&&$exif['IFD0']['Make']!='Lenovo '){
$exif_data['camera'] = $exif['IFD0']['Make'];
$make = true;
}
}
if(isset($exif['IFD0']['Model'])){ $exif_data['camera'] = $make ? $exif['IFD0']['Make'].' '.$exif['IFD0']['Model'] : $exif['IFD0']['Model'];
}
// if(isset($exif['IFD0']['DateTime'])){
// $exif_data['date'] = $exif['IFD0']['DateTime'];
// } elseif(isset($exif['EXIF']['DateTimeOriginal'])){
if(isset($exif['EXIF']['DateTimeOriginal'])){ $exif_data['date'] = $exif['EXIF']['DateTimeOriginal'];
} elseif(isset($exif['EXIF']['DateTimeDigitized'])){ $exif_data['date'] = $exif['EXIF']['DateTimeDigitized'];
}
if(isset($exif['EXIF']['ISOSpeedRatings'])){ $exif_data['isospeedratings'] = $exif['EXIF']['ISOSpeedRatings'];
if(is_array($exif_data['isospeedratings'])){ $exif_data['isospeedratings'] = current($exif_data['isospeedratings']); }
}
if(isset($exif['EXIF']['FocalLength'])){ $num = explode('/', $exif['EXIF']['FocalLength']); $exif_data['focallength'] = floor($num[0]/$num[1]).'mm'; }
if(isset($exif['EXIF']['FocalLengthIn35mmFilm'])){ $exif_data['focallengthin35mmfilm'] = $exif['EXIF']['FocalLengthIn35mmFilm'].'mm';
}
if(isset($exif['IFD0']['Orientation'])){ $exif_data['orientation'] = $exif['IFD0']['Orientation'];
}
}
$orientation = 'square';
if($s[0] > $s[1]){
$orientation = 'landscape';
}
if($s[0] < $s[1]){
$orientation = 'portrait';
}
'orientation' => $orientation,
'width' => $s[0],
'height' => $s[1],
'mime' => $s['mime'],
'exif' => $exif_data,
);
}
Пример: