Comment faire pivoter les images automatiquement, en fonction des données exif

31

Lorsque je fais des photos avec mon appareil photo (Olympus E-520), dans les données EXIF, l'orientation est enregistrée.

Le visualiseur d'images standard sur Ubuntu affiche correctement ces images. La visionneuse Windows n'est cependant pas.

Existe-t-il un moyen de vraiment faire pivoter ces images (si nécessaire selon EXIF) dans un lot sur Ubuntu? Par exemple avec un outil ImageMagick?

Peter Smit
la source

Réponses:

37

exiftranet JHead ( jhead -autorot) peut le faire. exiftranpeut le faire sans perte, pas sûr jhead.

user7963
la source
1
exiftran semble être exactement ce dont j'ai besoin!
Peter Smit
3
jhead -autorot invoque jpegtran, qui peut effectuer une rotation parfaitement sans perte. J'avais tout oublié des trucs sans perte d'IJG. jpegclub.org/losslessapps.html Exiftran peut également effectuer une rotation sans perte et est meilleur que jpegtran car il respecte les informations exif dans le fichier image. Vous devez cependant noter que parfois (et je ne suis pas sûr de tous les détails), vous ne pouvez pas tourner sans perte. Donc, si vous implémentez un script avec jhead pour identifier la rotation nécessaire (similaire à la précédente, mais avec une instruction case pour gérer toutes les rotations), vous devez prendre en charge le retour à la rotation avec perte.
opello le
1
J'ai fait quelques tests avec exiftran -a (rotation automatique basée sur la balise d'orientation exif), et cela semble très bien fonctionner. En ce qui concerne la rotation sans perte, je n'ai pas pu récupérer l'image source en effectuant l'inverse de la rotation effectuée. Par exemple, exiftool -F 1.jpg -o 2.jpg; exiftool -F 2.jpg -o 3.jpg; md5sum de 1.jpg et 3.jpg ne sont pas les mêmes. En y regardant de plus près (avec la comparaison binaire de fusion Araxis), il s'agissait parfois uniquement d'informations d'en-tête exif qui différaient, d'autres fois, il s'agissait de changements majeurs dans le fichier. Cependant, la comparaison d'images d'Araxis Merge n'a montré aucun pixel inchangé.
opello
Je voulais dire pas de pixels * modifiés (c'étaient des images identiques aux pixels). Aussi - je ne suis pas sûr du protocole stackoverflow / superuser, mais je pense que dmityugov devrait obtenir celui-ci pour recommander l'outil approprié.
opello
1
J'ai trouvé que exiftran peut supprimer certaines métadonnées du fichier. Par exemple, les images prises par le Samsung Galaxy S2 ont un champ d'horodatage (éventuellement non EXIF), et exiftran le supprimera. exiftran -a modifiera également l'image qui n'a pas besoin de rotation. jhead -autorot est exempt des deux problèmes. OTOH, il manque une option pour conserver le fichier mtime (mais il y a le commutateur -ft comme solution de contournement).
pfalcon
12

L'outil de conversion d'ImageMagick a un indicateur -auto-orient qui devrait faire le travail.

#!/bin/bash

JHEAD=jhead
SED=sed
CONVERT=convert

for f in *.jpg
do
        orientation=$($JHEAD -v $f | $SED -nr 's:.*Orientation = ([0-9]+).*:\1:p')

        if [ -z $orientation ]
        then
                orientation=0
        fi

        if [ $orientation -gt 1 ]
        then
                echo Rotating $f...
                mv $f $f.bak
                $CONVERT -auto-orient $f.bak $f
        fi
done

J'ai créé un script rapide pour itérer sur * .jpg dans le répertoire courant. Vous pouvez facilement modifier cela pour prendre un chemin ($ 1) ou tout ce dont vous avez besoin.

opello
la source
1
Génial! Celui que je n'ai pas trouvé. Je l'utilise avec mogrify pour faire un lot d'images. Une seule question, pourquoi réécrit-il toutes les images, même si elles ne sont pas censées changer? (Les hachages diffèrent)
Peter Smit
Je ne sais pas pourquoi, mais il semble faire un ré-encodage complet en regardant à la fois le diff d'image et un diff binaire.
opello
Wow, c'est super. Merci beaucoup. Si aucune autre bonne réponse n'est ajoutée, j'accepterai sûrement celle-ci.
Peter Smit
2

Vous pouvez utiliser XnView pour ce faire. Consultez ces pages pour plus d'informations sur l'utilisation de XnView pour effectuer la rotation automatique en mode batch:

Sous Windows, vous pouvez le faire en utilisant IrfanView . De la section FAQ du site Web d'IrfanView:

Q: Comment utiliser les opérations sans perte JPG (Rotation, IPTC, Commentaire) en mode batch?

R: Ouvrez la fenêtre des vignettes, ouvrez le dossier contenant les JPG, sélectionnez de nombreux JPG et voyez dans le menu des vignettes Fichier pour les opérations sans perte JPG -> Transformations sans perte avec les pouces sélectionnés. Remarque: L'option de rotation automatique ne fonctionne que si la balise d'orientation EXIF ​​est correctement enregistrée (pas en haut à gauche).

swatkat
la source
1

Avec ImageMagick, vous pouvez également utiliser mogrify pour faire pivoter les fichiers et réécrire l'image pivotée dans les noms de fichiers d'origine.

mogrify -auto-orient *.jpg
Andy Gee
la source