วิธีการหมุนภาพโดยอัตโนมัติตามข้อมูล exif


31

เมื่อฉันถ่ายภาพด้วยกล้องของฉัน (Olympus E-520) ในข้อมูล EXIF ​​การวางแนวจะถูกเก็บไว้

โปรแกรมดูรูปภาพมาตรฐานใน Ubuntu แสดงภาพนี้อย่างถูกต้อง ตัวแสดง Windows ไม่

มีวิธีหมุนรูปนี้จริง ๆ (ถ้าจำเป็นตาม EXIF) ในชุดบน Ubuntu หรือไม่ ตัวอย่างเช่นเครื่องมือ ImageMagick?

คำตอบ:


37

exiftranและJHead ( jhead -autorot)สามารถทำได้ exiftranสามารถทำเช่นนี้ losslessly jheadไม่แน่ใจเกี่ยวกับ


1
ลักษณะ exiftran เหมือนมันว่าสิ่งที่ฉันต้องการ!
Peter Smit

3
jhead -autorot เรียก jpegtran ซึ่งสามารถทำการหมุนแบบ lossless ได้อย่างสมบูรณ์ ฉันลืมทุกอย่างเกี่ยวกับสิ่งที่ไม่สูญเสียโดย IJG jpegclub.org/losslessapps.html Exiftran สามารถทำการหมุนแบบไม่สูญเสียและดีกว่า jpegtran เพราะมันเคารพข้อมูล exif ในไฟล์รูปภาพ คุณควรทราบว่าบางครั้ง (และฉันไม่แน่ใจในรายละเอียดทั้งหมด) คุณไม่สามารถหมุนได้อย่างไม่สูญเสีย ดังนั้นหากคุณใช้สคริปต์ที่มี jhead เพื่อระบุการหมุนที่จำเป็น (คล้ายกับของฉันก่อนหน้านี้ แต่ด้วยคำสั่ง case เพื่อจัดการการหมุนทั้งหมด) คุณควรสนับสนุนการถอยกลับไปสู่การหมุนที่สูญเสียไป
opello

1
ฉันทำการทดสอบสองสามครั้งกับ exiftran -a (หมุนอัตโนมัติตามแท็กปฐมนิเทศ exif) และดูเหมือนว่าจะทำงานได้ดีมาก เกี่ยวกับการหมุนแบบไม่สูญเสียฉันไม่สามารถดึงภาพต้นฉบับกลับมาได้ด้วยการย้อนกลับของการหมุนที่ทำ เช่น exiftool -F 1.jpg -o 2.jpg; exiftool -F 2.jpg -o 3.jpg; md5sum ของ 1.jpg และ 3.jpg ไม่เหมือนกัน เมื่อตรวจสอบอย่างใกล้ชิด (กับ Araxis ผสานการเปรียบเทียบแบบไบนารี) บางครั้งมันเป็นเพียงข้อมูลส่วนหัวที่แตกต่างกันบางครั้งก็เป็นการเปลี่ยนแปลงครั้งใหญ่ในไฟล์ อย่างไรก็ตามการเปรียบเทียบภาพของ Araxis ผสานแสดงให้เห็นว่าไม่มีพิกเซลไม่เปลี่ยนแปลง
opello

ฉันหมายถึงไม่มีการเปลี่ยนแปลง * พิกเซล (พวกเขาเป็นภาพที่เหมือนพิกเซล) นอกจากนี้ - ฉันไม่แน่ใจในโปรโตคอล stackoverflow / superuser แต่ฉันคิดว่า dmityugov ควรใช้อันนี้เพื่อแนะนำเครื่องมือที่เหมาะสม
opello

1
ฉันพบว่า exiftran สามารถลบข้อมูลเมตาบางส่วนออกจากไฟล์ได้ ตัวอย่างเช่นรูปภาพที่ถ่ายโดย Samsung Galaxy S2 มีฟิลด์เวลา (อาจไม่ใช่ EXIF) และ exiftran จะลบออก exiftran -a จะเปลี่ยนรูปภาพที่ไม่ต้องการการหมุน jhead -autorot ฟรีจากทั้งสองประเด็น OTOH ไม่มีตัวเลือกในการรักษาไฟล์ mtime (แต่มี -ft switch เป็นวิธีแก้ปัญหา)
pfalcon

12

เครื่องมือแปลงภาพของ ImageMagick มีแฟล็ก -auto-orientซึ่งควรทำงานให้เสร็จ

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

ฉันได้รวมสคริปท์สั้น ๆ เพื่อรวมซ้ำ * .jpg ในไดเรกทอรีปัจจุบัน คุณสามารถปรับเปลี่ยนสิ่งนี้เพื่อให้อยู่ในเส้นทาง ($ 1) หรืออะไรก็ตามที่คุณต้องการ


1
ที่ดี! ฉันไม่พบ ฉันใช้กับ mogrify เพื่อทำภาพเป็นชุด คำถามเดียวเท่านั้นทำไมมันเขียนใหม่ทุกภาพแม้ว่าพวกเขาจะไม่ควรเปลี่ยน? (ความแตกต่างของแฮช)
Peter Smit

ฉันไม่แน่ใจว่าทำไมแต่ดูเหมือนว่าจะเข้ารหัสเต็มรูปแบบอีกครั้งดูทั้ง diff ภาพและ binary diff
opello

ว้าวนี่เยี่ยมมาก ขอบคุณมาก ๆ. หากไม่มีการเพิ่มคำตอบของ supergood อื่น ๆ ฉันจะยอมรับสิ่งนี้อย่างแน่นอน
Peter Smit

2

คุณสามารถใช้XnViewเพื่อทำเช่นนั้น ตรวจสอบหน้าเหล่านี้สำหรับข้อมูลเกี่ยวกับการใช้ XnView เพื่อหมุนอัตโนมัติในโหมดแบทช์:

ใน Windows คุณสามารถทำเช่นนั้นโดยใช้IrfanView จากส่วนคำถามที่พบบ่อยของเว็บไซต์ IrfanView:

ถาม:วิธีใช้ JPG การดำเนินการแบบไม่สูญเสีย (การหมุน, IPTC, ความคิดเห็น) ในโหมดแบทช์?

ตอบ:เริ่มต้นหน้าต่างย่อเปิดโฟลเดอร์ที่มี JPG เลือก JPG จำนวนมากและดูในเมนูภาพย่อขนาดไฟล์สำหรับการดำเนินการสูญเสีย JPG -> การแปลงแบบไม่สูญเสียด้วยนิ้วหัวแม่มือที่เลือก หมายเหตุ: ตัวเลือกการหมุนอัตโนมัติจะทำงานเฉพาะเมื่อมีการบันทึกแท็กการวางแนว EXIF ​​อย่างเหมาะสม (ไม่ใช่มุมบนซ้าย)


1

ด้วย ImageMagick คุณยังสามารถใช้ mogrify เพื่อหมุนไฟล์และเขียนภาพที่หมุนกลับไปยังชื่อไฟล์ดั้งเดิม

mogrify -auto-orient *.jpg
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.