Определение ориентации EXIF ​​и поворот изображения с помощью ImageMagick

Canon DSLRs, как представляется, сохраняет фотографии в альбомной ориентации и использует exif::orientation для вращения.

Вопрос: Как можно использовать imagemagick для повторного сохранения изображения в предполагаемую ориентацию с использованием данных ориентации exif, чтобы больше не требовалось отображать данные exif в правильной ориентации?

Для этого вы можете использовать опцию auto-orient для преобразования.

 convert your-image.jpg -auto-orient output.jpg 

Метод PHP Imagick – проверить ориентацию изображения и повернуть / перевернуть изображение соответственно:

 function autorotate(Imagick $image) { switch ($image->getImageOrientation()) { case Imagick::ORIENTATION_TOPLEFT: break; case Imagick::ORIENTATION_TOPRIGHT: $image->flopImage(); break; case Imagick::ORIENTATION_BOTTOMRIGHT: $image->rotateImage("#000", 180); break; case Imagick::ORIENTATION_BOTTOMLEFT: $image->flopImage(); $image->rotateImage("#000", 180); break; case Imagick::ORIENTATION_LEFTTOP: $image->flopImage(); $image->rotateImage("#000", -90); break; case Imagick::ORIENTATION_RIGHTTOP: $image->rotateImage("#000", 90); break; case Imagick::ORIENTATION_RIGHTBOTTOM: $image->flopImage(); $image->rotateImage("#000", 90); break; case Imagick::ORIENTATION_LEFTBOTTOM: $image->rotateImage("#000", -90); break; default: // Invalid orientation break; } $image->setImageOrientation(Imagick::ORIENTATION_TOPLEFT); return $image; } 

Функция может быть использована следующим образом:

 $img = new Imagick('/path/to/file'); autorotate($img); $img->stripImage(); // if you want to get rid of all EXIF data $img->writeImage();