114 votes

Détecter l'orientation EXIF et faire pivoter l'image en utilisant ImageMagick

Les reflex numériques Canon semblent enregistrer les photos en mode paysage et utilisent exif::orientation pour effectuer la rotation.

Question: Comment utiliser ImageMagick pour réenregistrer l'image dans l'orientation voulue en utilisant les données d'orientation exif de sorte qu'elle ne nécessite plus les données exif pour s'afficher dans la bonne orientation ?

178voto

dlemstra Points 5200

Utilisez l'option auto-orient de la commande convert d'ImageMagick pour cela.

convert votre-image.jpg -auto-orient output.jpg

Ou utilisez mogrify pour le faire sur place

mogrify -auto-orient votre-image.jpg

58voto

tarleb Points 6712

La manière 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: // Orientation invalide
        break;
    }
    $image->setImageOrientation(Imagick::ORIENTATION_TOPLEFT);
}

La fonction pourrait être utilisée de cette manière :

$img = new Imagick('/chemin/vers/fichier');
autorotate($img);
$img->stripImage(); // si vous voulez vous débarrasser de toutes les données EXIF
$img->writeImage();

3voto

Dev Null Points 60

mogrify et convert vont tous les deux redimensionner l'image de manière irréversible lors de la correction de l'orientation.

Utilisez exiftran à la place pour une rotation sans perte.

Une fonctionnalité intéressante de exiftran est son drapeau inplace (-i) qui vous permet de traiter un répertoire entier en une seule fois, combiné avec le drapeau "auto" -a, comme ceci :

exiftran -ai *.jpg

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X