Arm1.ru

Определение ориентации фото на PHP через EXIF

Шпаргалка.

Вертикальные фотографии, снятые в портретном режиме на Android и iPhone сохраняются как горизонтальные, но в EXIF пишется ориентация фото.

Если вывести значение команды:

$exif = exif_read_data( $existingFilePath, 0, true);

То увидим среди значений массива:

array
(
...
    [IFD0] => Array
    (
        [Make] => Sony
        [Model] => LT25i
        [Orientation] => 6
        [XResolution] => 72/1
        [YResolution] => 72/1
        [ResolutionUnit] => 2
        [Software] => 9.1.A.1.145_58_f100
        [DateTime] => 2013:07:26 17:00:01
        [YCbCrPositioning] => 1
        [Exif_IFD_Pointer] => 214
        [GPS_IFD_Pointer] => 626
    )
...
)

В данном случае это значит, что при показе этой фотографии - отображающее его приложение должно повернуть на 90 градусов фото, т.к. фото в портретной ориентации.

Чтобы при заливке картинок на сервер и изменении их (создание уменьшенной копии, создание превьюшки) не было косяков, можно определять такие фотки кодом:

<?php
imagecopyresampled( $resultImage, $sourceImage, 0, 0, 0, 0, $new_width, $new_height, $width, $height );

$exif = exif_read_data( $existingFilePath, 0, true);
if( false === empty( $exif['IFD0']['Orientation'] ) ) {
    switch( $exif['IFD0']['Orientation'] ) {
        case 8:
            $resultImage = imagerotate( $resultImage, 90, 0 );
            break;
        case 3:
            $resultImage = imagerotate( $resultImage,180,0);
            break;
        case 6:
            $resultImage = imagerotate( $resultImage,-90,0);
            break;
    }
}

Что интересно - Windows Phone сохраняет фотографию в портретной ориентации как вертикальное изображение.

keyboard_return back