Цифровые зеркальные камеры Canon сохраняют фотографии в альбомной ориентации и используют их exif::orientation
для вращения.
Вопрос: Как можно использовать imagemagick для повторного сохранения изображения в заданной ориентации с использованием данных ориентации exif, чтобы данные exif больше не отображались в правильной ориентации?
php
imagemagick
exif
Никсиникс
источник
источник
Ответы:
Для этого используйте опцию автоматической ориентации ImageMagick
convert
.Или используйте,
mogrify
чтобы сделать это на местеисточник
mogrify
вместо этого,convert
если хотите заменить существующий файл (на месте), что полезно, когда вы хотите заполнить каталог.Способ 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); }
Функцию можно использовать так:
$img = new Imagick('/path/to/file'); autorotate($img); $img->stripImage(); // if you want to get rid of all EXIF data $img->writeImage();
источник
rotateImage
. Если вы хотите проверить все ориентации: существует аккуратное репозиторий на github, в котором есть изображение для каждого значения exif.