60 votes

Faites pivoter les images à partir du terminal

J'ai un répertoire avec beaucoup d'images mais elles sont dans la mauvaise orientation. Je veux faire pivoter les images pour corriger l'orientation (principalement ±90o). En utilisant le visualiseur d'images (shotwell photo), je peux les faire pivoter individuellement en cliquant sur le bouton de rotation mais c'est trop fastidieux.

J'ai regardé man shotwell et shotwell --help-all mais il n'y a rien qui explique comment invoquer la commande de rotation depuis la ligne de commande.

Y a-t-il un moyen d'invoquer la commande de rotation de shotwell (ou de tout autre visualiseur) depuis le terminal ? Ou tout autre méthode pour faire pivoter les images est également la bienvenue.

65voto

Fabby Points 33498

Si vous recherchez une implémentation pure bash, la commande convert d'ImageMagick est ce que vous cherchez :

for szFile in /path/*.png
do 
    convert "$szFile" -rotate 90 /tmp/"$(basename "$szFile")" ; 
done

Au-dessus laissera les fichiers existants intacts et copiera les nouveaux fichiers tournés vers /tmp afin que vous puissiez les déplacer ou les copier ailleurs ou même remplacer les existants après la conversion et après vérification.

(et cela fonctionnera sur toutes les versions récentes d'Ubuntu car c'est un logiciel standard)

41voto

Asgeir S. Nilsen Points 805
pour fichier in *.JPG; faire convertir $fichier -rotation 90 rotate-$fichier; fin

Cela va copier-tourner-et-renommer vos fichiers.

Si vous voulez laisser les fichiers originaux intacts pour le moment, cette méthode peut bien fonctionner pour vous...

Notez que ceci est sensible à la casse : si vos fichiers sont nommés .jpg remplacez par minuscules (ou .png ...) en conséquence.

14voto

krlmlr Points 3122

Si vous voulez écraser sur place, mogrify de la suite ImageMagick semble être le moyen le plus simple pour y parvenir :

# dans le sens antihoraire :
mogrify -rotate -90 *.jpg

# dans le sens horaire :
mogrify -rotate 90 *.jpg

ATTENTION : Ce n'est pas une méthode de rotation sans perte pour les fichiers JPEG, https://www.imagemagick.org/discourse-server/viewtopic.php?t=5899. jpegtran le permet (non testé) :

# dans le sens antihoraire
ls *.jpg | xargs -n 1 jpegtran -perfect -rotate 270

# dans le sens horaire
ls *.jpg | xargs -n 1 jpegtran -perfect -rotate 90

6voto

Parto Points 14406

Voici comment je fais :

  1. Installer gThumb

     sudo apt-get install gthumb
  2. Ouvrir Nautilus et aller dans votre répertoire d'images. Cliquez avec le bouton droit sur l'une d'elles et choisissez Ouvrir avec -> gthumb.

  3. Sous le menu Vue, choisissez Navigateur ou appuyez sur la touche Esc. Cela ouvrira le navigateur de répertoire affichant toutes vos images.

    description de l'image ici

  4. Appuyez sur Ctrl et sélectionnez les images que vous souhaitez faire pivoter ou sélectionnez-les toutes via Ctrl + A.

  5. Dans la barre d'outils, sélectionnez Outils puis Faire pivoter à droite ou Faire pivoter à gauche en fonction de vos préférences.

    description de l'image ici

1voto

Louis Maddox Points 143

Une bonne solution est de créer un ensemble de sauvegardes (par exemple préfixées backup-), faire tourner les fichiers originaux pour en produire de nouveaux fichiers (préfixés par exemple rotated-), vous donnant un ensemble de

  • img-1.png
  • backup-img-1.png
  • rotated-img-1.png
  • img-2.png
  • ...et ainsi de suite

Les outils mv/cp [bash globbing] ne peuvent ajouter que des préfixes, c'est compliqué de les enlever (ça utiliserait l'expansion de paramètres, beurk...)

L'outil rename vous permet d'utiliser la syntaxe de substitution s/avant/après/ (de l'outil sed) pour échanger ce préfixe de sauvegarde et écraser les fichiers originaux, donc votre processus global pour un ensemble donné de photos img-{1..n}.png serait :

for imgf in img-*.png; do mv "$imgf" "backup-$imgf"; done
for imgf in backup-img-*.png; do convert "$imgf" -rotate 90 "rotated-$imgf"; done

Note :

  • vous pourriez utiliser cp plutôt que mv, mais alors il y a 2 copies de l'original qui traînent (l'inconvénient est que vous obtenez la concaténation des préfixes, "rotated-backup-...")
  • la rotation est dans le sens horaire (-rotate 270 vous donne 90° dans le sens antihoraire)
  • pour suivre le progrès, ajoutez echo "Rotation de ${imgf#backup-} ... "; après les appels convert (avant done)
  • pour une forme plus compacte (par exemple un ensemble de fichiers numérotés), utilisez une certaine expansion de paramètres comme echo "$(echo ${imgf#backup-img-} | cut -d\. -f 1)..."; à la place

    ( Vous ne pouvez pas supprimer le préfixe et le suffixe dans la même expansion de paramètres bash donc utilisez cut )

Ensuite, après avoir vérifié que vous n'avez pas fait d'erreur, supprimez les photos en les renvoyant à l'état original

rename 's/^rotated-//;' rotated-*
rm backup-img-*

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X