Cách xoay hình ảnh tự động, dựa trên dữ liệu exif


31

Khi tôi chụp ảnh bằng máy ảnh của mình (Olympus E-520), trong dữ liệu EXIF, hướng được lưu trữ.

Trình xem ảnh tiêu chuẩn trên Ubuntu đang hiển thị hình ảnh này một cách chính xác. Windows view tuy nhiên không.

Có cách nào để thực sự xoay hình ảnh này (nếu cần theo EXIF) trong một đợt trên Ubuntu không? Ví dụ với một công cụ ImageMagick?

Câu trả lời:


37

exiftranJHead ( jhead -autorot) có thể làm điều này. exiftrancó thể làm điều này một cách dễ dàng, không chắc chắn về jhead.


1
exiftran có vẻ như chính xác những gì tôi cần!
Peter Smit

3
jhead -autorot gọi jpegtran, có thể thực hiện xoay vòng hoàn toàn không mất mát. Tôi đã quên tất cả về những thứ không mất mát của IJG. jpegclub.org/losslessapps.html Exiftran cũng có thể thực hiện xoay vòng không mất dữ liệu và tốt hơn jpegtran vì nó tôn trọng thông tin exif trong tệp hình ảnh. Tuy nhiên, bạn cần lưu ý rằng đôi khi (và tôi không chắc chắn về tất cả các chi tiết) bạn không thể xoay vòng một cách dễ dàng. Vì vậy, nếu bạn triển khai một tập lệnh với jhead để xác định xoay vòng cần thiết (tương tự như trước đây của tôi, nhưng với một câu lệnh tình huống để xử lý tất cả các phép quay), bạn nên hỗ trợ quay trở lại xoay vòng mất mát.
opello

1
Tôi đã thực hiện một vài thử nghiệm với exiftran -a (tự động xoay dựa trên thẻ định hướng exif) và có vẻ như nó hoạt động rất tốt. Đối với xoay không mất dữ liệu, tôi không thể lấy lại hình ảnh nguồn bằng cách thực hiện nghịch đảo của xoay được thực hiện. Ví dụ: exiftool -F 1.jpg -o 2.jpg; exiftool -F 2.jpg -o 3.jpg; md5sum của 1.jpg và 3.jpg không giống nhau. Khi kiểm tra kỹ hơn (với so sánh nhị phân hợp nhất Araxis) đôi khi đó chỉ là thông tin tiêu đề exif khác nhau, lần khác nó là những thay đổi lớn trong tệp. Tuy nhiên, so sánh hình ảnh của Araxis cho thấy không có pixel không thay đổi.
opello

Tôi có nghĩa là không thay đổi * pixel (chúng là hình ảnh giống hệt pixel). Ngoài ra - Tôi không chắc chắn về giao thức stackoverflow / superuser, nhưng tôi nghĩ dmityugov nên lấy cái này để giới thiệu công cụ thích hợp.
opello

1
Tôi thấy rằng exiftran có thể xóa một số siêu dữ liệu khỏi tệp. Ví dụ: hình ảnh được chụp bởi Samsung Galaxy S2 có trường dấu thời gian (có thể không phải là EXIF) và exiftran sẽ xóa nó. exiftran -a cũng sẽ thay đổi hình ảnh không cần xoay. jhead -autorot là miễn phí từ cả hai vấn đề. OTOH, nó thiếu tùy chọn để bảo toàn tập tin mtime (nhưng có chuyển đổi -ft như một cách giải quyết).
pfalcon

12

Công cụ chuyển đổi của ImageMagick có cờ -auto-direction sẽ hoàn thành công việc.

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

Tôi đã tập hợp một đoạn script nhanh để lặp lại * .jpg trong thư mục hiện tại. Bạn có thể dễ dàng sửa đổi điều này để đi theo một đường dẫn ($ 1) hoặc bất cứ điều gì bạn cần.


1
Tuyệt quá! Cái đó tôi không tìm thấy. Tôi sử dụng nó với mogrify để làm một loạt các hình ảnh. Một câu hỏi duy nhất, tại sao nó lại viết lại tất cả các hình ảnh, ngay cả khi chúng không được phép thay đổi? (Các giá trị băm khác nhau)
Peter Smit

Tôi không chắc tại sao nhưng có vẻ như mã hóa lại toàn bộ nhìn vào cả hình ảnh khác và hình ảnh nhị phân.
opello

Wow, điều này thật tuyệt. Cảm ơn rất nhiều. Nếu không có câu trả lời siêu nhiên nào khác được thêm vào, tôi chắc chắn sẽ chấp nhận câu trả lời này.
Peter Smit

2

Bạn có thể sử dụng XnView để làm điều đó. Kiểm tra các trang này để biết thông tin về việc sử dụng XnView để thực hiện tự động xoay trong chế độ hàng loạt:

Trong Windows, bạn có thể làm điều đó bằng cách sử dụng IrfanView . Từ trang web Câu hỏi thường gặp của IrfanView:

Q: Làm thế nào để sử dụng các hoạt động không mất dữ liệu JPG (Xoay vòng, IPTC, Nhận xét) trong chế độ hàng loạt?

A: Bắt đầu cửa sổ Thumbnail, mở thư mục bằng JPG, chọn nhiều JPG và xem trong menu hình thu nhỏ Tệp cho JPG Các thao tác không mất dữ liệu -> Biến đổi lossless bằng ngón tay cái được chọn. Lưu ý: Tùy chọn xoay tự động chỉ hoạt động nếu thẻ định hướng EXIF ​​được lưu chính xác (không phải trên cùng bên trái).


1

Với ImageMagick, bạn cũng có thể sử dụng mogrify để xoay các tệp và ghi hình ảnh được quay trở lại tên tệp gốc.

mogrify -auto-orient *.jpg
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.