php - Detecte la orientación EXIF y gire la imagen usando ImageMagick
(2)
Las réflex digitales de Canon parecen guardar fotos en orientación horizontal y utilizan exif::orientation
para hacer la rotación.
Pregunta: ¿Cómo se puede utilizar imagemagick para volver a guardar la imagen en la orientación deseada utilizando los datos de orientación exif de modo que ya no se requiera que los datos exif se muestren en la orientación correcta?
La forma de 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);
return $image;
}
La función podría ser utilizada así:
$img = new Imagick(''/path/to/file'');
autorotate($img);
$img->stripImage(); // if you want to get rid of all EXIF data
$img->writeImage();
Podrías usar la opción auto-orient de convertir para hacer esto.
convert your-image.jpg -auto-orient output.jpg