Веб програмирование : Определение и изменение ориентации изображения. PHP.
Написал andrey3761 в 20.05.2015 18:40:00 ( 15363 прочтений )
Веб програмирование

Вы иногда сталкивались с ситуацией, что загруженные на Ваш сайт фотографии с телефона в портретной (вертикальной) ориентации перевёрнуты на 90 градусов? Это объясняется тем, что телефон всегда сохраняет фотографии в альбомной (горизонтально) ориентации и устанавливает метку ориентации в EXIF тегах. Приложение само должно перевернуть фотографию.




Так почему же PHP этого не делает? Неужели он не в состоянии переворачивать фотографии? Всё дело не в PHP, а в программистах, которые данную возможность не учитывают. В данной статье мы научимся правильно обрабатывать фотографии, отснятые на телефон.
Для начала нам необходимо прочитать EXIF данные из нашего изображения. Делается это очень просто


$filename = 'filename.jpg';
$exif = exif_read_data($filename);


Теперь попробуем узнать ориентацию изображения, но учитывайте тот факт, что значение Orientation есть не у всех изображений


if( isset( $exif['Orientation'] ) ) {
$orientation = $exif['Orientation'];
} else {
$orientation = NULL;
}

 

Переменная $orientation содержит значение ориентации или NULL, если оно не определено. Теперь остаётся самое простое, это перевернуть изображение. Для этих целей используем функцию imagerotate() из библиотеки GD. Она принимает три параметра: Ресурс изображения, которое  необходимо повернуть; угол поворота в градусах против часовой стрелке; цвет фона свободной зоны после поворота.


// Открываем изображение
$resImage = imagecreatefromjpeg($image);
switch( $orientation ) {
case 3:
// Поворачиваем изображение на 180 градусов, вверх ногами
$resImage = imagerotate( $resImage, 180, 0 );
break;
case 6:
// Поворачиваем изображение на 90 градусов по часовой стрелки
$resImage = imagerotate( $resImage, 270, 0 );
break;
case 8:
// Поворачиваем изображение на 90 градусов против часовой стрелки
$resImage = imagerotate( $resImage, 90, 0 );
break;
}


После этого наше изображение примет тот вид, которого вы ждали при создании фотографии.

 
Теперь разберёмся, как переворачивать изображения библиотекой Imagic, это делается с помощью метода rotateImage(). Он принимает два параметра: цвет фона свободной зоны после поворота;  угол поворота в градусах по часовой стрелке. В этом заключается отличие, не перепутайте!

 


// Открываем изображение
$resImage = new Imagick( $image );
// Выбор ориентации
switch( $orientation ) {
case 3:
// Переворачиваем на 180 градусов по часовой стрелке
$resImage->rotateImage( new ImagickPixel(), 180 );
break;
case 6:
// Поворачиваем изображение на 90 градусов по часовой стрелки
$resImage->rotateImage( new ImagickPixel(), 90 );
break;
case 8:
// Поворачиваем изображение на 90 градусов против часовой стрелки
$resImage->rotateImage( new ImagickPixel(), 270 );
break;
}


А теперь вы можете свободно использовать ресурс изображения для своих целей. Только не забудьте изменить ширину на высоту!


Теги: PHP   Ориентация  
Предыдущая новость Следующая новость
Комментарии принадлежат их авторам. Мы не несем ответственности за их содержание.
Отправитель Нити

Кто активен

2 пользователь(ей) активно (1 пользователь(ей) просматривают Web)

Участников: 0
Гостей: 2

далее...

Рекомендуем