Jak automatycznie obracać obrazy na podstawie danych exif

31

Kiedy robię zdjęcia za pomocą aparatu (Olympus E-520), w danych EXIF ​​orientacja jest zapisywana.

Standardowa przeglądarka obrazów w systemie Ubuntu wyświetla te obrazy poprawnie. Przeglądarka Windows jednak nie.

Czy istnieje sposób, aby naprawdę obrócić te obrazy (jeśli to konieczne zgodnie z EXIF) w partii na Ubuntu? Na przykład za pomocą narzędzia ImageMagick?

Peter Smit
źródło

Odpowiedzi:

37

exiftrani JHead ( jhead -autorot) może to zrobić. exiftranmoże to zrobić bez strat, nie jestem pewien jhead.

użytkownik7963
źródło
1
exiftran wygląda na to , czego dokładnie potrzebuję!
Peter Smit,
3
jhead -autorot wywołuje jpegtran, który może wykonywać idealnie bezstratny obrót. Zapomniałem o bezstratnych rzeczach IJG. jpegclub.org/losslessapps.html Exiftran może także wykonywać bezstratne obracanie i jest lepszy niż jpegtran, ponieważ respektuje informacje exif w pliku obrazu. Należy jednak pamiętać, że czasami (i nie jestem pewien co do wszystkich szczegółów) nie można bezstratnie obracać. Jeśli więc zaimplementujesz skrypt z nagłówkiem, aby zidentyfikować niezbędny obrót (podobny do mojego poprzedniego, ale z instrukcją case do obsługi wszystkich obrotów), powinieneś wesprzeć powrót do rotacji stratnej.
opello
1
Zrobiłem kilka testów z exiftran -a (automatyczne obracanie w oparciu o znacznik orientacji exif) i wydaje się, że działa bardzo dobrze. W odniesieniu do bezstratnego obrotu nie mogłem odzyskać obrazu źródłowego, wykonując odwrotność wykonanego obrotu. Np. Exiftool -F 1.jpg -o 2.jpg; exiftool -F 2.jpg -o 3.jpg; md5sum z 1.jpg i 3.jpg nie są takie same. Przy bliższej inspekcji (z porównaniem binarnym scalania Araxis) czasami były to tylko informacje nagłówka exif, które różniły się, innym razem były to poważne zmiany w pliku. Jednak porównanie obrazów scalania Araxis nie wykazało żadnych niezmienionych pikseli.
opello
Miałem na myśli brak zmienionych * pikseli (były to obrazy identyczne z pikselami). Ponadto - nie jestem pewien protokołu stosu / superużytkownika, ale myślę, że dmityugov powinien go pobrać za polecenie odpowiedniego narzędzia.
opello
1
Odkryłem, że exiftran może usunąć niektóre metadane z pliku. Na przykład zdjęcia zrobione przez Samsung Galaxy S2 mają pole znacznika czasu (być może nie EXIF), a exiftran je usunie. exiftran -a zmieni również obraz, który nie wymaga obrotu. jhead -autorot jest wolny od obu problemów. OTOH, nie ma opcji zachowania mtime pliku (ale jest obejście -ft jako obejście).
pfalcon,
12

Narzędzie do konwersji ImageMagick ma flagę -auto-orient, która powinna wykonać zadanie.

#!/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

Wrzuciłem szybki skrypt do iteracji nad * .jpg w bieżącym katalogu. Możesz to łatwo zmodyfikować, aby uzyskać ścieżkę (1 USD) lub cokolwiek potrzebujesz.

opello
źródło
1
Świetny! Tego nie znalazłem. Używam go z mogrify do robienia serii zdjęć. Tylko jedno pytanie, dlaczego przepisuje wszystkie obrazy, nawet jeśli nie powinny się zmieniać? (Haszdy się różnią)
Peter Smit
Nie jestem pewien dlaczego, ale wydaje się, że wykonuje pełne ponowne kodowanie, patrząc zarówno na różnicę obrazu, jak i różnicę binarną.
opello
Wow, to jest świetne. Dziękuję bardzo. Jeśli nie zostaną dodane inne superodpowiednie odpowiedzi, na pewno to zaakceptuję.
Peter Smit,
2

Możesz to zrobić za pomocą XnView . Sprawdź te strony, aby uzyskać informacje na temat używania XnView do automatycznego obracania w trybie wsadowym:

W systemie Windows możesz to zrobić za pomocą IrfanView . Ze strony FAQ IrfanView:

P: Jak korzystać z bezstratnych operacji JPG (rotacja, IPTC, komentarz) w trybie wsadowym?

A: Uruchom okno miniatury, otwórz folder z JPG, wybierz wiele JPG i zobaczyć w menu Plik do miniatur JPG Lossless Operations -> Lossless transformacje z wybranymi kciukami. Uwaga: Opcja automatycznego obracania działa tylko wtedy, gdy znacznik orientacji EXIF ​​jest poprawnie zapisany (nie w lewym górnym rogu).

swatkat
źródło
1

Za pomocą ImageMagick możesz także użyć mogrify do obracania plików i zapisywania obróconego obrazu z powrotem do oryginalnych nazw plików.

mogrify -auto-orient *.jpg
Andy Gee
źródło