วิธีการตัดข้อมูลเมตาจากไฟล์ภาพ


17

[ แก้ไข # 1 โดย OP:ปรากฎว่าคำถามนี้ได้รับคำตอบค่อนข้างดีโดยผู้สร้าง / ผู้ดูแล exiftool Phil Harvey ในเธรดที่ซ้ำกันบนฟอรัม ExifTool ]

[ แก้ไข # 2 โดย OP:จากExifTool คำถามที่พบบ่อย : ExifTool ไม่รับประกันว่าจะลบข้อมูลเมตาทั้งหมดจากไฟล์เมื่อพยายามลบข้อมูลเมตาทั้งหมด ดู 'ข้อ จำกัด นักเขียน']

ฉันต้องการค้นหาภาพถ่ายที่ไม่ได้อยู่ในไดรฟ์สำรองข้อมูลปัจจุบันของฉัน รูปแบบรวมถึง jpg, png, tif, ฯลฯ ... รวมถึงรูปแบบ raw ที่หลากหลาย (รุ่นและผู้ผลิตกล้องที่แตกต่างกัน)

ฉันสนใจเฉพาะภาพของตัวเองเท่านั้นและไม่เป็นเอกลักษณ์เนื่องจากความแตกต่างในการพูดค่าของแท็ก exif การมี / ไม่มีแท็ก exif ที่กำหนดเองภาพขนาดย่อที่ฝัง ฯลฯ

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

[ แก้ไข # 3 โดย OP:เพื่อความกระจ่าง: เปอร์เซ็นต์ที่ผิดพลาดเล็กน้อยสามารถยอมรับได้ (ไฟล์จะสรุปว่าไม่ซ้ำกันเมื่อไม่มี) และเชิงลบที่ไม่พึงประสงค์เป็นอย่างมาก ]

แผนของฉันคือการระบุเอกลักษณ์ตาม md5sums หลังจากลอกเมทาดาทาใด ๆ และทั้งหมด

ฉันจะตัดข้อมูลเมตาได้อย่างไร

จะexiftool -all= <filename>พอเพียง?


1
ไลบรารีการบีบอัด JPEG บีบอัดในรูปแบบที่แตกต่างกันดังนั้นแม้ว่าคุณจะตัดข้อมูลเมตาทั้งหมดที่คุณอาจยังคงจบด้วยภาพเดียวกันที่มีการตรวจสอบที่แตกต่างกันเพราะมันถูกบีบอัดด้วยการใช้ JPEG ที่แตกต่างกัน คุณจะต้องบันทึกรูปภาพทั้งหมดอีกครั้งโดยใช้ไลบรารีเดียวกัน (ซึ่งอาจลดคุณภาพลงบ้าง) คุณวางแผนที่จะค้นหาภาพทั้งหมดอย่างไร? fileจะล้มเหลวในการค้นพบรูปแบบไฟล์ RAW และfindใช้งานได้เฉพาะกับส่วนขยายเท่านั้น (อาจเป็นประโยชน์ในการอธิบายสิ่งที่คุณมีได้ดีกว่า)
grochmal

ฉันใช้find $dir -type f -regextype posix-extended -regex ".*\.(jpg|png|<...>|cr2|raw|raf|orf)"ที่<...>หมายถึงส่วนต่อท้ายอื่น ๆ
Jeff

จุดดีเกี่ยวกับไลบรารีการบีบอัดที่แตกต่างกัน
Jeff

1
คุณสามารถลองดูว่าภาพมาตรฐาน BMP convert image.jpg - | md5sum(ImageMagick) จะให้ผลบวก MD5 กับคุณหรือไม่
aventurin

1
มีอัลกอริทึมการแปลงแป้นพิมพ์แบบรับรู้ที่เรียกว่า phash ซึ่งมีประโยชน์สำหรับการเปรียบเทียบภาพสองภาพที่คล้ายกันแบบรับรู้ stackoverflow มีแท็กที่นี่stackoverflow.com/questions/tagged/phash ตอนนี้การมีเครื่องมือที่เปรียบเทียบสองไฟล์มีประโยชน์ แต่อาจนำไปสู่การมีงาน O (n * n) เพื่อค้นหารายการที่ตรงกันทั้งหมด อาจมีเวิร์กโฟลว์ที่ทำได้ดีกว่า แต่ฉันไม่รู้จักใครเลย แต่ phash เป็น breadcrumb ที่อาจนำคุณไปสู่หนึ่ง imagemagick เห็นได้ชัดว่ามีการสนับสนุน phash บางอย่าง
ผสม

คำตอบ:


12

jheadมีความสามารถในการลบข้อมูลเมตาที่ไม่ใช่รูปภาพออกจากไฟล์ JPEG หน้าคนพูดว่า:

-dc

ลบช่องแสดงความคิดเห็นจากส่วนหัว JPEG โปรดทราบว่าความคิดเห็นไม่ได้เป็นส่วนหนึ่งของส่วนหัว Exif

-de

ลบส่วนหัว Exif ทั้งหมด คงส่วนเมทาดาทาอื่นไว้ไม่เปลี่ยนแปลง

-di

ลบส่วน IPTC ถ้ามี คงส่วนเมทาดาทาอื่นไว้ไม่เปลี่ยนแปลง

-dx

ลบส่วน XMP ถ้ามี คงส่วนเมทาดาทาอื่นไว้ไม่เปลี่ยนแปลง

-du

ลบส่วนของ jpeg ที่ไม่ใช่ Exif ไม่แสดงความคิดเห็นและไม่สนับสนุนรูปภาพเช่นข้อมูลที่ photoshop อาจเก็บไว้ในภาพ

-purejpg

ลบส่วน JPEG ทั้งหมดที่ไม่จำเป็นสำหรับการแสดงภาพ แยกเมทาดาทาใด ๆ ที่แอปพลิเคชันต่างๆอาจทิ้งไว้ในภาพ การรวมกันของ-de -dcและ-du ตัวเลือก


แท็กหมุนอาจถูกพิจารณาว่าเป็น'จำเป็นสำหรับการเรนเดอร์รูปภาพ'
Jeff

1
ควรมีความชัดเจน แต่ทำงานเฉพาะสำหรับ JPEGไฟล์
Serv-Inc

6

ฉันจะไปกับ ImageMagick สำหรับภาพส่วนใหญ่ นี่เป็นเพราะการใช้งานห้องสมุดที่แตกต่างกันจะให้ผลลัพธ์ที่ถูกบีบอัดที่แตกต่างกัน ImageMagick สามารถทำการรวมการบีบอัดได้

ประเภททั่วไปนั้นง่ายเนื่องจากระบบปฏิบัติการมีห้องสมุดให้อ่านและเขียน ดังนั้น:

find . -type f -name '*.jp*g' -o -type f -name '*.JP*G' \
       -exec mogrify -strip -taint -compress JPEG {} \;

find . -type f -name '*.png' -o -type f -name '*.PNG' \
       -exec mogrify -strip -taint -compress Lossless {} \;

find . -type f -name '*.gif' -o -type f -name '*.GIF' \
       -exec mogrify -strip -taint -compress LZW {} \;

เพื่อให้แน่ใจว่าคุณมีภาพที่เขียนในลักษณะเดียวกัน จากนั้นคุณสามารถดำเนินการ:

find . -type f -regextype posix-extended \
       -regex ".*\.(jpe?g|JPE?G|png|PNG|gif|GIF)" \
       -exec md5sum {} \; > checksums
sort -k 1 checksums |
cut -d ' ' -f 1 |
uniq -d |
while read x; do
    grep $x checksums
done

สำหรับรูปแบบ RAW ฉันเชื่อว่าวิธีเดียวที่จะทำได้คือ Phil พูดและดังนั้น:

find . <blah blah> -exec exiftool -all= {} \;

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

คำเตือน : มันจะทำงานเพื่อเปรียบเทียบผลรวมตรวจสอบระหว่างพวกเขา หากคุณจัดเก็บเช็คซัมและเรียกใช้อีกครั้ง-stripหลังจากการอัปเดตzlibหรือlibjpegคุณอาจลงท้ายด้วยเช็คซัมที่แตกต่างกันโดยสิ้นเชิง คุณต้องสร้าง checksums สำหรับทุกภาพทุกครั้ง ได้รับความกังวลเกี่ยวกับคุณภาพของภาพก็ควรที่จะทำงานนี้เพียงครั้งเดียว


ถูกต้องฉันถ้าฉันผิด สมมติว่าสองไฟล์แสดงรูปภาพเดียวกัน แต่ถูกบีบอัดด้วยสองไลบรารีที่แตกต่างกัน พวกเขาจะไม่ 'คลายการบีบอัด' เป็นพิกเซลที่แตกต่างกันหรือไม่เนื่องจาก jpg เป็นแบบสูญเสีย?
เจฟฟ์

1
มักจะไม่ใช่ JPEG2000 มี DCT ที่กำหนดไว้อย่างดี แต่นั่นเป็นเพียงส่วนหนึ่งของการเปลี่ยนภาพ การเข้ารหัส huffman ควรเหมือนกัน แต่เท่าที่มาตรฐานจะไปคุณสามารถบีบอัดผลลัพธ์โดยใช้ไลบรารีการบีบอัด ในทฤษฎีการบีบอัดไลบรารี่ (เช่น zlib) จะให้ผลลัพธ์ที่แตกต่างกันเสมอ (แม้สำหรับอัลกอริทึมเดียวกัน) แต่ไลบรารี jpeg ส่วนใหญ่จะใช้ RNG ในลักษณะเดียวกันเพื่อรักษาสิ่งต่าง ๆ ที่มีสติ
grochmal

@Jeff ปัญหาค่อนข้างเป็นธรรมชาติเนื่องจากความสูญเสียหมายความว่าข้อมูลหายไป
aventurin

แน่นอนถ้าคุณกำหนดคุณภาพการบีบอัดที่แตกต่างกัน (เช่น-quality) การเดิมพันทั้งหมดจะปิด
grochmal

อาจมีปัญหากับคำตอบนี้ แท็ก JFIF รวมทั้ง JFIFversion จะถูกแทรก-stripโดยตัวเลือก ImageMagick หากต้องการดูนี้เรียกใช้exiftool -a -G1 -s <filename>ไฟล์ที่สร้างขึ้นด้วยและmogrify -strip เพื่อยืนยันการทำงานexiftool -all= exiftool -a -G1 -s <original-filename> | grep JFIFการรันสคริปต์ในอนาคตจะต้องพิจารณาสิ่งนี้หากรุ่น JFIF แตกต่างกัน
Jeff

6

ด้วยimagemagickแพ็คเกจและไม่เพียง แต่สำหรับ JPEGคุณสามารถ:

mogrify -strip *.jpg

จากคู่มือ :

-strip

ดึงภาพโปรไฟล์ความคิดเห็นหรือชิ้นส่วน PNG เหล่านี้: bKGD, cHRM, EXIF, gAMA, iCCP, iTXt, sRGB, ข้อความ, zCCP, zTXt, วันที่

ข้อมูลมากขึ้นและประการที่นี่

หมายเหตุ:นี่คล้ายกับ @grochmal แต่ตรงไปตรงมาและเรียบง่ายกว่ามาก


ตามเธรดนั้นดีกว่าไปด้วยexiftool -all= *.jpgเพื่อตัดข้อมูล jpg
Walt W

0

ทางออกที่เป็นไปได้ที่เพิ่งมาถึงใจ มันหลีกเลี่ยงปัญหาของข้อมูลเมตา จะถือว่าไฟล์ลงท้ายด้วยอิมเมจเองเมตาดาต้าทั้งหมดอยู่ที่จุดเริ่มต้นของไฟล์

ลองอ้างถึงไดรฟ์สำรองปัจจุบันเป็นไดรฟ์สีทอง

สำหรับรูปภาพบนไดรฟ์ทอง:

  1. ลบภาพขนาดย่อที่ฝังไว้
  2. แยกไฟล์ที่เริ่มต้นด้วยการปิดท้ายพูด M = 100k ไบต์ อ้างถึง tailing แรก (ที่มีจุดสิ้นสุดไฟล์) เป็น end-chunk
  3. คำนวณ md5sums ของแต่ละอันและเก็บไว้ในรายการหลักที่เรียกว่า goldlist

สำหรับภาพในไดรฟ์เก่า :

  1. ลบภาพขนาดย่อที่ฝังไว้
  2. ปิดท้ายไฟล์ M ไบต์สุดท้าย
  3. คำนวณ md5sum
  4. CLASS U: ถ้าผลรวมไม่ได้อยู่ในรายการทองแล้วสรุปไฟล์นั้นไม่ซ้ำกับไดรฟ์ทอง คัดลอกไปยังไดรฟ์ทอง คำนวณ md5sums ของชิ้นที่เหลือและเพิ่มลงใน goldlist ไปที่ไฟล์ถัดไป
  5. มิฉะนั้นให้ปิดไบต์ที่สองถึง M สุดท้าย แต่ถ้าจำนวนไบต์ที่เหลือน้อยกว่าให้พูดว่า N = 50k ดังนั้นอย่าละ M ไบต์ แทนที่จะประมวลผลส่วนที่เหลือเป็นก้อนขนาดใหญ่เล็กน้อย N จะต้องมีขนาดใหญ่กว่าพื้นที่ที่ใหญ่ที่สุดที่ใช้โดยส่วนหัว (ยกเว้นภาพขนาดเล็ก)
  6. คำนวณก้อน md5sum
  7. เปรียบเทียบกับ goldlist และอื่น ๆ
  8. ระดับ D: หากจำนวนเงินทั้งหมดของกลุ่มที่อยู่ในบัญชีทองแล้วสรุปว่ามันซ้ำกัน
  9. คลาส P: หากผลรวมสำหรับชิ้นทั้งหมด แต่ชิ้นสุดท้ายอยู่ในบัญชีทองแล้วสรุปได้ว่ามันอาจจะซ้ำกัน

คลาส P จะมีภาพที่อยู่บนไดรฟ์ทอง แต่มี exifdata ที่แตกต่างกันหรือมีความเสียหาย / เน่าข้อมูลในไบต์ชั้นนำของภาพ

เมื่อเสร็จแล้วให้ตรวจสอบ CLASS P แบบโต้ตอบเปรียบเทียบกับเพื่อนของพวกเขาในไดรฟ์ทอง

ดูแก้ไข # 3 เพื่อ OP

การกำหนดใน CLASS U และ D ควรแม่นยำ 100%

ขนาด CLASS P ขึ้นอยู่กับขนาดก้อน M เนื่องจาก M + N ไบต์แรกของไฟล์เกือบจะแน่นอนมีข้อมูลภาพบางส่วน (และข้อมูลเมตาทั้งหมด)


ฉันทำการจัดรูปแบบโพสต์ของคุณบางส่วน (ดังนั้นมันจึงใช้การแจงนับมาร์คอัปแทนที่จะย่อหน้าที่หนาตา) ถึงกระนั้นฉันก็พบว่ามันเป็นเรื่องลึกลับที่จะอธิบายความหมายของ CLASS U, CLASS D, CLASS P ...
grochmal

กำหนดไฟล์ภาพแต่ละภาพในฮาร์ดไดรฟ์เก่าให้เป็นหนึ่งในสามชั้น U (nique), D (uplicate) P (robably ซ้ำ)
เจฟฟ์

0

หากไดรฟ์เก่ามีข้อมูลที่ซ้ำกันส่วนใหญ่ (รวมถึงเมทาดาทา) ให้ใช้สองขั้นตอนในการค้นหาของที่ไม่ซ้ำตามที่กำหนดใน OP (ซึ่งถือว่าไฟล์สองไฟล์นั้นซ้ำกันแม้ว่าจะแตกต่างกันในเมตาดาต้า):

  1. ใช้ md5sums ของไฟล์ unstripped ที่ไม่มีการเปลี่ยนแปลงเพื่อระบุว่าไฟล์ใดในไดรฟ์เก่านั้นมีลักษณะเฉพาะ (ในกรณีอื่น) ไปยังไดรฟ์สำรองปัจจุบันซึ่งกำหนดให้กับ CLASS uU (unstripped-Unique) หรือ CLASS D (upilcate) CLASS D จะถูกต้อง 100% คลาส uU ควรมีขนาดเล็ก (ตามสมมติฐานด้านบน) และมีการผสมผสานของการทำซ้ำที่แท้จริง (ในความหมาย OP) และการรวมกันที่ไม่ซ้ำกัน

  2. การทำงานกับชุดไฟล์ขนาดเล็กเช่น managable ชุดไฟล์ใน CLASS uU ใช้ md5sums และเทคนิคการลอกแบบต่างๆเพื่อออกแบบวิธีการเปรียบเทียบไฟล์ที่มีประโยชน์สำหรับวัตถุประสงค์ที่วางไว้ใน OP


0

นี่เก่าไปหน่อย แต่ใช่ exiftool ทำงานได้ดีมาก

แสดงข้อมูลเมตาของ

exiftool photo.jpg

แสดงข้อมูลเมตาสำหรับไฟล์ * .jpg ทั้งหมด

หมายเหตุ: นามสกุลเป็นแบบตรงตามตัวพิมพ์ใหญ่ - เล็ก

exiftool -ext jpg

เหมือนข้างต้น แต่รวมไดเรกทอรีย่อย

exiftool -r -ext jpg .

ลบข้อมูลเมตาทั้งหมด

exiftool -all= -overwrite_original photo.jpg

ลบข้อมูลเมตาทั้งหมดของไฟล์ * .jpg ทั้งหมดในไดเรกทอรีปัจจุบัน

exiftool -all= -overwrite_original -ext jpg 

เหมือนข้างต้น แต่รวมไดเรกทอรีย่อย

exiftool -all= -r -overwrite_original -ext jpg .

ลบข้อมูลเมตา GPS ทั้งหมดของไฟล์ * .jpg ในไดเรกทอรีปัจจุบัน

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