Comment faire pivoter un ensemble d'images à partir de la ligne de commande?

17

J'ai un grand ensemble d'images JPEG toutes avec la même résolution. Il faudrait trop de temps pour ouvrir chacun à l'intérieur de l'interface graphique d'imagemagic ou de gimp.

Comment puis-je faire pivoter et enregistrer chaque image sous le même nom de fichier?

sharkant
la source
3
Voyez ici . Attention cependant, le ré-encodage JPEG est généralement avec perte.
Satō Katsura

Réponses:

22

Vous pouvez utiliser la convertcommande:

 convert input.jpg -rotate -degrees out.jpg

par exemple:

convert input.jpg -rotate -180 out.jpg

Enregistrez-le avec le même nom:

convert file.jpg -rotate -180 file.jpg

Faites pivoter tous les fichiers:

for photo in *.jpg ; do convert $photo -rotate 90 $photo ; done

Éditer

Vous pouvez utiliser les mogrifyoutils de ligne de commande (le meilleur outil) recommandés par @ don-crissti

mogrify -rotate 90 *.jpg
GAD3R
la source
1
thx, comment puis-je dire à la commande que le nom de fichier à gauche de -rotate -180 doit être le même qu'à sa droite, s'il y a beaucoup de fichiers?
sharkant
Faire pivoter un fichier à 180 degrés vous donnera toujours le même résultat, peu importe si vous le faites pivoter vers la gauche ou la droite.
djsmiley2k dans l'obscurité
@ GAD3R 360 degrés donnera la même image par la suite. Faire pivoter une image vers la gauche ou la droite de 180 degrés, avec les deux vous donne la même image (mais à l'envers).
djsmiley2k dans l'obscurité
2
$CAPITAL_NAMESdevrait être laissé aux variables d'environnement; pour ces variables locales dans les scripts shell ou les commandes, utilisez$normal_lowercase
cat
2
convertréencode JPEG et est donc avec perte. Mieux utiliserjpegtran
imz - Ivan Zakharyaschev
16

Pour les images JPEG et les rotations à angle droit, utilisez jpegtranou exiftran, car elles peuvent faire pivoter les images sans perte.

for f in *.jpg ; do 
    jpegtran -rotate 180 "$f" > "${f%.jpg}-rotated.jpg"
done

Ou pour effectuer une rotation sur place:

for f in *.jpg ; do
    jpegtran -rotate 180 -outfile "$f" "$f"
done

exiftrana également le -adrapeau pour faire pivoter automatiquement l'image en fonction de ce que dit la balise d'orientation EXIF.

ilkkachu
la source
Pour une rotation dans le sens antihoraire (angle gauche) avec jpegtran, utilisez -rotate 270et avec le -2drapeau d' utilisation exiftran conformément au manuel.
Timo