Les reflex numériques Canon semblent enregistrer des photos en orientation paysage et utilisent exif::orientation
pour faire la rotation.
Question: Comment imagemagick peut-il être utilisé pour réenregistrer l'image dans l'orientation voulue en utilisant les données d'orientation exif de telle sorte qu'il n'a plus besoin que les données exif s'affichent dans la bonne orientation?
Utilisez l'option auto-orient du convert
d'ImageMagick pour ce faire.
convert your-image.jpg -auto-orient output.jpg
Ou utilisez mogrify
pour le faire sur place
mogrify -auto-orient your-image.jpg
La méthode PHP Imagick serait de tester l'orientation de l'image et de faire pivoter/retourner l'image en conséquence:
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 fonction peut être utilisée comme ceci:
$img = new Imagick('/path/to/file');
autorotate($img);
$img->stripImage(); // if you want to get rid of all EXIF data
$img->writeImage();