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();