Faire pivoter les images du terminal


34

J'ai un répertoire avec beaucoup d'images mais ils sont mal orientés. Je veux faire pivoter les images pour corriger l'orientation (généralement ± 90 o ). En utilisant la visionneuse d'images (photo de puits), je peux les faire pivoter individuellement en cliquant sur le bouton de rotation, mais c'est trop fastidieux.

J'ai regardé man shotwellet shotwell --help-allmais il n'y a rien qui explique comment invoquer la commande de rotation à partir de la ligne de commande.

Existe-t-il un moyen d'invoquer la commande de rotation de Shotwell (ou de tout autre visualiseur) à partir du terminal? Ou toute autre méthode pour faire pivoter les images est également la bienvenue.


1
askubuntu.com/a/432662/15811 si vous le souhaitez chez nautilus. Mais la commande de terminal que vous voulez est "convertir" depuis "imagemagick"
Rinzwind

1
Si vous voulez une rotation sans perte et que les fichiers sont en jpeg, jetez un œil à jpegtran ; imagemagick effectuera une rotation avec perte (franchement petite) .
Rmano

Réponses:


39

Si vous cherchez une implémentation bash pure, la convertcommande ImageMagick est ce que vous recherchez:

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

Ci-dessus laissera les fichiers existants intacts et copiera les fichiers nouvellement pivotés pour /tmpque vous puissiez les déplacer ou les copier ailleurs ou même remplacer les fichiers existants après la conversion et après la vérification .

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


28
for file in *.JPG; do convert $file -rotate 90 rotated-$file; done

Cela copiera, fera pivoter et renommera vos fichiers.

Si vous souhaitez laisser les fichiers originaux intacts pour l'instant, cette méthode peut bien fonctionner pour vous ...

Notez que cela respecte la casse: si vos fichiers sont nommés * .jpg, remplacez-les par des minuscules (ou * .png ...) en conséquence.


4

Si vous souhaitez remplacer sur place, mogrifyla suite ImageMagick semble être le moyen le plus simple d'y parvenir:

# counterclockwise:
mogrify -rotate -90 *.jpg

# clockwise:
mogrify -rotate 90 *.jpg

CAVEAT : 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 . jpegtranatteint cet objectif (non testé):

# counterclockwise
ls *.jpg | xargs -n 1 jpegtran -perfect -rotate 270

# clockwise
ls *.jpg | xargs -n 1 jpegtran -perfect -rotate 90

Fonctionne parfaitement
Paul Jones

Mogrify est tout à fait un couteau suisse en ce qui concerne l'édition d'image simple, rapide et par lots
EA304GT

meilleure réponse, pourquoi ne voudriez-vous pas le faire sur place?
mLstudent33

1
@ mLstudent33: Bonne question. Il semble que ce mogrifyne soit pas sans perte pour les fichiers JPEG, mais jpegtranc'est le cas.
krlmlr

3

Voici comment je le fais:

  1. Installer gThumb

    sudo apt-get install gthumb
  2. Ouvrez nautilus et accédez à votre répertoire d'images. Faites un clic droit sur l'un et choisissez Open with -> gthumb.

  3. Dans le viewmenu, choisissez Browserou appuyez sur la Esctouche. Cela ouvrira le navigateur du répertoire affichant toutes vos images.

    entrez la description de l'image ici

  4. Appuyez sur Ctrlet 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 Tools, puis Rotate Rightou Rotate Leftselon votre préférence.

    entrez la description de l'image ici


0

Une bonne solution est de faire un ensemble de sauvegardes (par exemple préfixées backup-), de faire pivoter les fichiers originaux en produisant un ensemble 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
  • ...etc

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

L' renameoutil vous permet d'utiliser la s/before/after/syntaxe de substitution (à partir de l' sedoutil) pour échanger ce préfixe de sauvegarde et écraser les fichiers d'origine, de sorte que votre processus global pour un ensemble d'images donné 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

Remarque:

  • vous pouvez utiliser cpplutôt que mv, mais il y a ensuite 2 copies de l'original qui traîne (l'inconvénient est que vous obtenez la concaténation des préfixes, " rotated-backup-...")
  • la rotation est dans le sens des aiguilles d'une montre ( -rotate 270vous permet d'obtenir 90 ° dans le sens inverse des aiguilles d'une montre)
  • pour suivre les progrès, ajouter echo "Rotating ${imgf#backup-} ... ";après les convertappels (avant done)
  • pour une forme plus compacte (par exemple un ensemble de fichiers numérotés), utilisez une extension de paramètre comme à la echo "$(echo ${imgf#backup-img-} | cut -d\. -f 1)...";place

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

Ensuite, après vérification, vous n'avez pas gâché, supprimez les photos en les replaçant dans l'original

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

0

Vous pouvez copier / coller ce code et l'enregistrer sous rotate.sh

#!/bin/bash -e

CUR_DIR=$(pwd)
cd $1
for file in *.jpg
do
    convert $file -rotate 90 $file
done
cd $CUR_DIR

Après avoir enregistré ce fichier, exécutez-le à partir du terminal à l'aide de ./rotate.sh folder_containing_images.


Veuillez vérifier votre code et le lien donné!
George Udosen
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.