web-dev-qa-db-fra.com

Faire pivoter les images du terminal

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

J'ai consulté man shotwell et shotwell --help-all, mais rien ne dit comment appeler la commande rotate à partir de la ligne de commande.

Puis-je invoquer la commande de rotation de shotwell (ou de tout autre spectateur) à partir du terminal? Ou toute autre méthode de rotation des images sont également les bienvenues.

29
pranphy

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

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

En haut, les fichiers existants sont conservés et copiés dans /tmp afin que 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 en tant que logiciel standard)

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

Cela va copier -rotation - et renommer vos fichiers.

Si vous voulez laisser les fichiers originaux intacts, cette méthode peut vous convenir ...

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

25
nutty about natty

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

# counterclockwise:
mogrify -rotate -90 *.jpg

# clockwise:
mogrify -rotate 90 *.jpg
3
krlmlr

Voici comment je le fais:

  1. Installez gThumb

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

  3. Dans le menu view, choisissez Browser ou appuyez sur le bouton Esc clé. Cela ouvrira le navigateur de répertoires affichant toutes vos images.

    enter image description here

  4. Presse 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 Tools, puis Rotate Right ou Rotate Left, selon vos préférences.

    enter image description here

3
Parto

Une solution intéressante consiste à créer un ensemble de sauvegardes (par exemple, préfixé backup-), à faire pivoter les fichiers d'origine pour générer un ensemble de nouveaux fichiers (préfixé par exemple rotated-), en vous donnant un ensemble de fichiers.

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

Les outils mvname __/cp[bash globbing] ne peuvent ajouter que des préfixes, il est compliqué de les supprimer (cela utiliserait l'extension de paramètre, ewww ...)

L'outil renamevous permet d'utiliser la syntaxe de substitution s/before/after/ (à partir de l'outil sedname__) pour permuter le préfixe de sauvegarde et écraser les fichiers d'origine. Votre processus global pour un ensemble donné d'images 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 cpau lieu de mvname__, mais il y a ensuite 2 copies de l'original traînant (l'inconvénient est que vous obtenez une concaténation de préfixes, "rotated-backup-...")
  • la rotation est dans le sens des aiguilles d'une montre (-rotate 270 vous permet d'atteindre 90 ° dans le sens contraire des aiguilles d'une montre)
  • pour suivre les progrès, ajoutez echo "Rotating ${imgf#backup-} ... "; après convert(avant donename__)
  • pour une forme plus compacte (par exemple, un ensemble de fichiers numérotés), utilisez plutôt une extension de paramètre telle que echo "$(echo ${imgf#backup-img-} | cut -d\. -f 1)...";

    (Vous ne pouvez pas supprimer les préfixes et suffixes dans le même développement bash param, utilisez donc cutname__)

Après vérification, effacez les images en les replaçant dans leur format d'origine.

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

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 en utilisant ./rotate.sh folder_containing_images.

0
vin