Automatische Drehung von Bildern basierend auf Exif-Daten


31

Wenn ich mit meiner Kamera (Olympus E-520) Bilder mache, wird die Ausrichtung in den EXIF-Daten gespeichert.

Der Standard-Bildbetrachter unter Ubuntu zeigt diese Bilder korrekt an. Windows Viewer jedoch nicht.

Gibt es eine Möglichkeit, diese Bilder (ggf. gemäß EXIF) in einem Stapel unter Ubuntu wirklich zu drehen? Zum Beispiel mit einem ImageMagick-Tool?

Antworten:


37

exiftranund JHead ( jhead -autorot) kann dies tun. exiftrankann dies verlustfrei tun, nicht sicher jhead.


1
Exiftran sieht so aus, als ob es genau das ist , was ich brauche!
Peter Smit

3
jhead -autorot ruft jpegtran auf, was eine absolut verlustfreie Rotation ermöglicht. Ich hatte alles über die verlustfreien Sachen von IJG vergessen. jpegclub.org/losslessapps.html Exiftran kann auch verlustfrei rotieren und ist besser als jpegtran, da es Exif-Informationen in der Bilddatei berücksichtigt. Sie sollten jedoch beachten, dass Sie manchmal (und ich bin mir nicht sicher in allen Details) nicht verlustfrei drehen können. Wenn Sie also ein Skript mit jhead implementieren, um die erforderliche Rotation zu ermitteln (ähnlich wie bei meinem vorherigen Skript, jedoch mit einer case-Anweisung, mit der alle Rotationen behandelt werden), sollten Sie es unterstützen, auf eine verlustbehaftete Rotation zurückzugreifen.
Opello

1
Ich habe ein paar Tests mit Exiftran -a (automatische Drehung basierend auf dem Exif-Orientierungs-Tag) durchgeführt, und es scheint sehr gut zu funktionieren. In Bezug auf verlustfreie Rotation konnte ich das Quellbild nicht zurückerhalten, indem ich die Umkehrung der durchgeführten Rotation ausführte. ZB exiftool -F 1.jpg -o 2.jpg; exiftool -F 2.jpg -o 3.jpg; md5sum von 1.jpg und 3.jpg sind nicht dasselbe. Bei näherer Betrachtung (mit Araxis Merge Binary-Vergleich) waren es manchmal nur exif-Header-Informationen, die sich unterschieden, andere Male waren es größere Änderungen in der Datei. Der Bildvergleich von Araxis merge zeigte jedoch keine unveränderten Pixel.
Opello

Ich meinte keine veränderten * Pixel (es waren pixelidentische Bilder). Auch - Ich bin nicht sicher, was das Stackoverflow / Superuser-Protokoll angeht, aber ich denke, dmityugov sollte dieses bekommen, um das richtige Tool zu empfehlen.
Opello

1
Ich fand, dass Exiftran einige Metadaten aus der Datei entfernen kann. Mit dem Samsung Galaxy S2 aufgenommene Bilder haben beispielsweise ein Zeitstempelfeld (möglicherweise nicht EXIF), und das Exiftran entfernt es. exiftran -a ändert auch das Bild, das nicht gedreht werden muss. jhead -autorot ist frei von beiden Problemen. OTOH, es fehlt die Option, die Datei-Mtime beizubehalten (aber es gibt -ft-Schalter als Workaround).
Pfalcon

12

Das Konvertierungstool von ImageMagick verfügt über ein -auto-orientiertes Flag, mit dem die Arbeit erledigt werden soll.

#!/bin/bash

JHEAD=jhead
SED=sed
CONVERT=convert

for f in *.jpg
do
        orientation=$($JHEAD -v $f | $SED -nr 's:.*Orientation = ([0-9]+).*:\1:p')

        if [ -z $orientation ]
        then
                orientation=0
        fi

        if [ $orientation -gt 1 ]
        then
                echo Rotating $f...
                mv $f $f.bak
                $CONVERT -auto-orient $f.bak $f
        fi
done

Ich habe ein schnelles Skript zusammengestellt, um über * .jpg im aktuellen Verzeichnis zu iterieren. Sie können dies leicht ändern, um einen Pfad ($ 1) oder was auch immer Sie brauchen, aufzunehmen.


1
Groß! Den habe ich nicht gefunden. Ich benutze es mit mogrify, um eine Reihe von Bildern zu machen. Nur eine Frage: Warum werden alle Bilder neu geschrieben, auch wenn sie sich nicht ändern sollen? (Die Hashes unterscheiden sich)
Peter Smit

Ich bin mir nicht sicher, warum, aber es scheint eine vollständige Neucodierung durchzuführen, die sowohl das Bilddiff als auch ein binäres Diff betrachtet.
Opello

Wow, das ist großartig. Vielen Dank. Wenn keine anderen superguten Antworten hinzugefügt werden, werde ich diese mit Sicherheit akzeptieren.
Peter Smit

2

Sie können dazu XnView verwenden. Auf diesen Seiten finden Sie Informationen zur Verwendung von XnView für die automatische Drehung im Stapelmodus:

In Windows können Sie dies mit IrfanView tun . Im FAQ-Bereich der IrfanView-Website:

F: Wie verwende ich verlustfreie JPG-Operationen (Rotation, IPTC, Comment) im Batch-Modus?

A: Starten Sie das Thumbnail-Fenster, öffnen Sie den Ordner mit JPGs, wählen Sie viele JPGs aus und zeigen Sie im Thumbnail-Menü Datei für JPG Lossless Operations -> Lossless Transformationen mit ausgewählten Thumbs an. Hinweis: Die Option für die automatische Drehung funktioniert nur, wenn das EXIF-Ausrichtungs-Tag ordnungsgemäß gespeichert ist (nicht oben links).


1

Mit ImageMagick können Sie die Dateien auch mit mogrify drehen und das gedrehte Bild in die ursprünglichen Dateinamen zurückschreiben.

mogrify -auto-orient *.jpg
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.