Las DSLR de Canon parecen guardar fotos en orientación horizontal y se utilizan exif::orientation
para hacer la rotación.
Pregunta: ¿Cómo se puede usar imagemagick para volver a guardar la imagen en la orientación deseada usando los datos de orientación exif de manera que ya no requiera que los datos exif se muestren en la orientación correcta?
php
imagemagick
exif
Nyxynyx
fuente
fuente
Respuestas:
Utilice la opción de orientación automática de ImageMagick
convert
para hacer esto.O usa
mogrify
para hacerlo en su lugarfuente
mogrify
lugar deconvert
si desea reemplazar el archivo existente (en el lugar), lo cual es útil cuando desea completar un directorio.La forma PHP Imagick sería probar la orientación de la imagen y rotar / voltear la imagen en consecuencia:
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); }
La función podría usarse así:
$img = new Imagick('/path/to/file'); autorotate($img); $img->stripImage(); // if you want to get rid of all EXIF data $img->writeImage();
fuente
rotateImage
cosas. Si desea probar todas las orientaciones: hay un repositorio github ordenado que tiene una imagen para cada valor exif.