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?

Odpowiedzi:


37

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


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.


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).


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.