Wydaje się, że lustrzanki cyfrowe Canon zapisują zdjęcia w orientacji poziomej i używają exif::orientation
ich do obracania.
Pytanie: W jaki sposób można użyć imagemagick do ponownego zapisania obrazu w zamierzonej orientacji przy użyciu danych orientacji exif, tak aby dane exif nie były już wyświetlane we właściwej orientacji?
php
imagemagick
exif
Nyxynyx
źródło
źródło
Odpowiedzi:
Aby to zrobić, użyj opcji auto-orientacji programu ImageMagick
convert
.Lub użyj,
mogrify
aby zrobić to na miejscuźródło
mogrify
zamiast,convert
jeśli chcesz zastąpić istniejący plik (w miejscu), co jest przydatne, gdy chcesz zapełnić katalog.Sposób PHP Imagick polega na przetestowaniu orientacji obrazu i odpowiednim obróceniu / odwróceniu obrazu:
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); }
Funkcji można użyć w następujący sposób:
$img = new Imagick('/path/to/file'); autorotate($img); $img->stripImage(); // if you want to get rid of all EXIF data $img->writeImage();
źródło
rotateImage
rzeczy. Jeśli chcesz przetestować wszystkie orientacje: istnieje zgrabne repozytorium github, które ma obraz dla każdej wartości exif.