Cara merotasi gambar secara otomatis, berdasarkan data exif

31

Ketika saya membuat gambar dengan kamera saya (Olympus E-520), dalam data EXIF ​​orientasi disimpan.

Penampil gambar standar pada Ubuntu menampilkan gambar ini dengan benar. Namun penampil Windows tidak.

Apakah ada cara untuk benar-benar memutar gambar ini (jika perlu menurut EXIF) dalam batch di Ubuntu? Misalnya dengan alat ImageMagick?

Peter Smit
sumber

Jawaban:

37

exiftrandan JHead ( jhead -autorot) dapat melakukan ini. exiftrandapat melakukan ini tanpa kehilangan, tidak yakin tentang jhead.

pengguna7963
sumber
1
exiftran sepertinya itulah yang saya butuhkan!
Peter Smit
3
jhead -autorot memanggil jpegtran, yang dapat melakukan rotasi lossless sempurna. Saya sudah lupa semua tentang hal-hal lossless oleh IJG. jpegclub.org/losslessapps.html Exiftran juga dapat melakukan rotasi lossless, dan lebih baik daripada jpegtran karena menghormati informasi exif dalam file gambar. Namun Anda harus mencatat bahwa kadang-kadang (dan saya tidak yakin dengan semua detailnya) Anda tidak dapat berputar tanpa kehilangan. Jadi, jika Anda menerapkan skrip dengan jhead untuk mengidentifikasi rotasi yang diperlukan (mirip dengan saya sebelumnya, tetapi dengan pernyataan kasus untuk menangani semua rotasi) Anda harus mendukung jatuh kembali ke rotasi lossy.
opello
1
Saya melakukan beberapa tes dengan exiftran -a (otomatis memutar berdasarkan tag orientasi exif), dan tampaknya bekerja dengan sangat baik. Berkenaan dengan rotasi lossless, saya tidak bisa mendapatkan gambar sumber kembali dengan melakukan kebalikan dari rotasi yang dilakukan. Misalnya exiftool -F 1.jpg -o 2.jpg; exiftool -F 2.jpg -o 3.jpg; md5sum dari 1.jpg dan 3.jpg tidak sama. Setelah diperiksa lebih dekat (dengan Araxis menggabungkan perbandingan biner) kadang-kadang itu hanya informasi header yang berbeda, di lain waktu itu adalah perubahan besar dalam file. Namun perbandingan gambar Araxis tidak menunjukkan piksel yang tidak berubah.
opello
Maksud saya tidak ada perubahan * piksel (itu adalah gambar yang identik dengan piksel). Juga - Saya tidak yakin tentang protokol stackoverflow / superuser, tapi saya pikir dmityugov harus mendapatkan yang ini untuk merekomendasikan alat yang tepat.
opello
1
Saya menemukan bahwa exiftran dapat menghapus beberapa metadata dari file. Misalnya, gambar yang diambil oleh Samsung Galaxy S2 memiliki bidang cap waktu (mungkin non-EXIF), dan exiftran akan menghapusnya. exiftran -a juga akan mengubah gambar yang tidak perlu rotasi. jhead -autorot bebas dari kedua masalah. OTOH, tidak memiliki opsi untuk menyimpan file mtime (tapi ada -ft switch sebagai solusi).
pfalcon
12

Alat konversi ImageMagick memiliki bendera -auto-orient yang harus menyelesaikan pekerjaan.

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

Saya mengumpulkan skrip cepat untuk beralih lebih dari * .jpg di direktori saat ini. Anda dapat dengan mudah memodifikasi ini untuk mengambil jalur ($ 1) atau apa pun yang Anda butuhkan.

opello
sumber
1
Besar! Yang saya tidak temukan. Saya menggunakannya dengan mogrify untuk melakukan banyak gambar. Hanya satu pertanyaan, mengapa itu menulis ulang semua gambar, bahkan jika mereka tidak seharusnya berubah? (Hash berbeda)
Peter Smit
Saya tidak yakin mengapa tetapi tampaknya melakukan re-encode penuh melihat baik diff gambar dan biner.
opello
Wow, ini luar biasa. Terima kasih banyak. Jika tidak ada jawaban supergood lain yang ditambahkan, saya pasti akan menerima yang ini.
Peter Smit
2

Anda dapat menggunakan XnView untuk melakukan itu. Lihat halaman-halaman ini untuk info tentang penggunaan XnView untuk melakukan rotasi otomatis dalam mode batch:

Di Windows, Anda bisa melakukannya menggunakan IrfanView . Dari bagian FAQ situs web IrfanView:

T: Bagaimana cara menggunakan operasi lossless JPG (Rotasi, IPTC, Komentar) dalam mode batch?

A: Mulai jendela Thumbnail, buka folder dengan JPG, pilih banyak JPG dan lihat di menu thumbnail File untuk Operasi Lossless JPG -> Transformasi lossless dengan ibu jari yang dipilih. Catatan: Opsi rotasi otomatis hanya berfungsi jika tag orientasi EXIF ​​disimpan dengan benar (bukan kiri atas).

swatkat
sumber
1

Dengan ImageMagick Anda juga dapat menggunakan mogrify untuk memutar file dan menulis gambar yang diputar kembali ke nama file asli.

mogrify -auto-orient *.jpg
Andy Gee
sumber