Bilder vom Terminal drehen


34

Ich habe ein Verzeichnis mit vielen Bildern, die jedoch falsch ausgerichtet sind. Ich möchte die Bilder in die richtige Richtung drehen (meist ± 90 o ). Mit dem Bildbetrachter (shotwell photo) kann ich sie einzeln drehen, indem ich auf die Schaltfläche "Drehen" klicke, aber das ist zu mühsam.

Ich schaute auf man shotwellund shotwell --help-allaber es gibt nichts , das erklärt , wie Sie den Befehl Drehen von der Kommandozeile aufzurufen.

Kann ich den Befehl "Drehen" von shotwell (oder einem anderen Viewer) vom Terminal aus aufrufen? Oder andere Methoden zum Drehen von Bildern sind ebenfalls willkommen.


1
askubuntu.com/a/432662/15811 wenn Sie es von Nautilus wollen. Der gewünschte Terminalbefehl lautet jedoch "convert" von "imagemagick"
Rinzwind

1
Wenn Sie eine verlustfreie Rotation wünschen und die Dateien im JPEG-Format vorliegen , schauen Sie sich jpegtran an . imagemagick macht eine (ehrlich gesagt kleine) verlustbehaftete Rotation .
Rmano

Antworten:


39

Wenn Sie nach einer reinen Bash-Implementierung suchen, ist der convertBefehl von ImageMagick genau das, wonach Sie suchen:

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

Oben werden vorhandene Dateien intakt gelassen und die neu gedrehten kopiert, /tmpsodass Sie sie nach der Konvertierung und nach der Überprüfung an einen anderen Ort verschieben oder kopieren oder sogar die vorhandenen ersetzen können .

(und es wird auf allen neueren Versionen von Ubuntu als Standard-Software funktionieren)


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

Dies wird urheber- drehen -and-benennen Sie Ihre Dateien.

Wenn Sie die Originaldateien nur noch unberührt lassen möchten, funktioniert diese Methode möglicherweise gut für Sie ...

Beachten Sie dabei die Groß- und Kleinschreibung: Wenn Ihre Dateien den Namen * .jpg haben, ersetzen Sie sie entsprechend durch Kleinbuchstaben (oder * .png ...).


4

Wenn Sie mogrifydirekt überschreiben möchten, scheint die ImageMagick-Suite der einfachste Weg zu sein, dies zu erreichen:

# counterclockwise:
mogrify -rotate -90 *.jpg

# clockwise:
mogrify -rotate 90 *.jpg

CAVEAT : Dies ist keine verlustfreie Rotationsmethode für JPEG-Dateien, https://www.imagemagick.org/discourse-server/viewtopic.php?t=5899 . jpegtranerreicht dies (ungetestet):

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

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

Funktioniert perfekt
Paul Jones

Mogrify ist ein echtes Schweizer Messer, wenn es um einfache, schnelle Stapelverarbeitung von
Bildern geht

Beste Antwort: Warum möchten Sie dies nicht direkt tun?
mLstudent33

1
@ mLstudent33: Gute Frage. Es scheint, dass mogrifyes für JPEG-Dateien nicht verlustfrei ist, aber es jpegtranist.
krlmlr

3

So mache ich es:

  1. Installieren Sie gThumb

    sudo apt-get install gthumb
  2. Öffne nautilus und gehe in dein Bilderverzeichnis. Klicken Sie mit der rechten Maustaste darauf und wählen Sie Open with -> gthumb.

  3. Unter dem viewMenü wählen Browseroder drücken Sie die EscTaste. Dadurch wird der Verzeichnis-Browser geöffnet, in dem alle Ihre Bilder angezeigt werden.

    Bildbeschreibung hier eingeben

  4. Drücken Sie Ctrlund wählen Sie die Bilder aus, die Sie drehen möchten, oder wählen Sie alle mit Ctrl+ aus A.

  5. Wählen Sie in der Symbolleiste Toolsund dann Rotate Rightoder Rotate Leftje nach Ihren Vorlieben.

    Bildbeschreibung hier eingeben


0

Eine schöne Lösung ist eine Reihe von Sicherungen (zB vorangestelltes zu machen backup-), drehen Sie die Original - Dateien eine Reihe von neuen Dateien (zB vorangestellte Herstellung rotated-), so dass Sie eine Reihe von

  • img-1.png
  • backup-img-1.png
  • rotated-img-1.png
  • img-2.png
  • ...und so weiter

Die mv/ cptools [bash globbing] können nur Präfixe hinzufügen, es ist chaotisch, sie zu entfernen (es würde Parametererweiterung verwenden, ewww ...)

Mit dem renameTool können Sie die s/before/after/Ersetzungssyntax (aus dem sedTool) verwenden, um das Sicherungspräfix auszutauschen und die Originaldateien zu überschreiben. Der Gesamtprozess für einen bestimmten Satz von Bildern img-lautet also {1..n}.png :

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

Hinweis:

  • Sie könnten cpanstatt verwenden mv, aber dann gibt es 2 Kopien des Originals herumliegen (Nachteil ist, Sie erhalten Verkettung von Präfixen, " rotated-backup-...")
  • Drehung ist im Uhrzeigersinn (um -rotate 27090 ° gegen den Uhrzeigersinn)
  • Nachverfolgen des Fortschritts durch Hinzufügen echo "Rotating ${imgf#backup-} ... ";nach convertAufrufen (vorher done)
  • Verwenden Sie für eine kompaktere Form (z. B. eine Reihe von nummerierten Dateien) echo "$(echo ${imgf#backup-img-} | cut -d\. -f 1)...";stattdessen eine Parametererweiterung wie

    (Sie können Präfix und Suffix nicht in derselben Bash-Parameter-Erweiterung entfernen, verwenden Sie daher cut)

Löschen Sie die Bilder, nachdem Sie überprüft haben, dass Sie nichts falsch gemacht haben, indem Sie sie wieder auf das Original verschieben

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

0

Sie können diesen Code kopieren, einfügen und als speichern rotate.sh

#!/bin/bash -e

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

Führen Sie diese Datei nach dem Speichern über das Terminal aus ./rotate.sh folder_containing_images.


Bitte überprüfen Sie Ihren Code und den angegebenen Link!
George Udosen
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.