छवि फ़ाइलों से मेटाडेटा कैसे पट्टी करें


17

[ EDIT # 1 ओपी द्वारा: इस प्रश्न का उत्तर दिया गया है जो एक्सफ़ाल्ट फ़ोरम पर डुप्लिकेट थ्रेड में एक्सफ़िल्टल निर्माता / अनुरक्षक फिल हार्वे द्वारा बहुत अच्छी तरह से उत्तर दिया गया है ]

[ OPIT # 2 EDIT से : ExifTool FAQ से : ExifTool सभी मेटाडेटा को हटाने का प्रयास करते समय फ़ाइल से मेटाडेटा को पूरी तरह से हटाने की गारंटी नहीं हैदेखें 'लेखक की सीमाएँ']

मैं अपने पुराने हार्ड ड्राइव को उन तस्वीरों के लिए खोजना चाहता हूं जो मेरे वर्तमान बैकअप ड्राइव पर नहीं हैं। प्रारूप में jpg, png, tif, आदि शामिल हैं ... और साथ ही विभिन्न कच्चे प्रारूप (विभिन्न कैमरा मॉडल और निर्माता) भी शामिल हैं।

मुझे केवल छवि की अद्वितीयता में दिलचस्पी है और अंतर के कारण विशिष्टता नहीं है, कहते हैं, exif टैग के मूल्य, किसी दिए गए exif टैग की उपस्थिति / अनुपस्थिति, एम्बेडेड थंबनेल, आदि ...

भले ही मुझे अन्यथा समान छवियों की विभिन्न प्रतियों के बीच किसी भी भ्रष्टाचार / डेटा-रोट की तलाश करने की उम्मीद नहीं है, मैं इसका पता लगाना चाहता हूं, साथ ही आकार बदलने और रंग बदलने के कारण अंतर भी।

[ ओपी द्वारा # ३ संपादित करें: स्पष्टीकरण के लिए: झूठी सकारात्मकता का एक छोटा प्रतिशत सहनीय है (ऐसा नहीं होने पर एक फ़ाइल अद्वितीय होने के लिए निष्कर्ष निकाला जाता है) और झूठे नकारात्मक अत्यधिक अवांछनीय होते हैं (एक फ़ाइल को डुप्लिकेट होने के लिए गलत तरीके से निष्कर्ष निकाला जाता है)। ]

मेरी योजना किसी भी और सभी मेटाडेटा को हटाने के बाद md5sums के आधार पर विशिष्टता की पहचान करना है।

मैं मेटाडेटा कैसे छीन सकता हूं?

विल exiftool -all= <filename>पर्याप्त?


1
JPEG संपीड़न लाइब्रेरी अलग-अलग तरीकों से संपीड़ित होती है, इसलिए, भले ही आप सभी मेटाडेटा को हटा दें, फिर भी आप एक ही छवि के साथ एक अलग चेकसम हो सकते हैं क्योंकि यह एक अलग JPEG कार्यान्वयन के साथ संकुचित था। आपको उसी लाइब्रेरी का उपयोग करके सभी चित्रों को फिर से सहेजना होगा (जो गुणवत्ता में कुछ कमी कर सकते हैं)। इसके अलावा आप सभी छवियों को खोजने की योजना कैसे बनाते हैं? fileरॉ छवि स्वरूपों की खोज करने में विफल रहेगा और findकेवल एक्सटेंशन पर काम करेगा (यह आपके लिए बेहतर वर्णन करने के लिए उपयोगी हो सकता है)
grochmal

मैं find $dir -type f -regextype posix-extended -regex ".*\.(jpg|png|<...>|cr2|raw|raf|orf)"जहां <...>अन्य प्रत्ययों का एक गुच्छा मतलब का उपयोग कर रहा हूँ ।
जेफ

विभिन्न संपीड़न पुस्तकालयों के बारे में अच्छी बात है।
जेफ

1
आप कोशिश कर सकते हैं यदि BMP सामान्यीकृत छवियां convert image.jpg - | md5sum(ImageMagick) आपको उपयुक्त MD5 रकम दें।
aventurin

1
वहाँ एक अवधारणात्मक हैशिंग एल्गोरिथ्म है जिसे phash कहा जाता है, यह तुलना करने के लिए उपयोगी है कि अवधारणात्मक रूप से समान दो चित्र कैसे हैं। stackoverflow पर यहां एक टैग है stackoverflow.com/questions/tagged/phash अब एक उपकरण है जिसमें दो फाइलों की तुलना उपयोगी है, लेकिन हो सकता है कि काम करने के लिए O (n * n)। तक सभी मैच मिलें। वहाँ शायद वर्कफ़्लोज़ हैं जो बेहतर करते हैं, लेकिन मुझे एक बंद नहीं पता है। लेकिन फास एक ब्रेडक्रंब है जो आपको एक तक ले जा सकता है। जाहिरा तौर पर इमेजमाजिक में कुछ प्रकार के फाॅस सपोर्ट हैं
infixed

जवाबों:


12

jheadJPEG फ़ाइलों से गैर-छवि मेटाडेटा को निकालने की क्षमता है। आदमी पृष्ठ कहता है:

-dc

JPEG हेडर से टिप्पणी क्षेत्र हटाएं। ध्यान दें कि टिप्पणी Exif हेडर का हिस्सा नहीं है।

-de

Exif हैडर को पूरी तरह से हटा दें। अन्य मेटाडेटा अनुभागों को बरकरार रखता है।

-di

यदि मौजूद हो तो IPTC सेक्शन को हटा दें। अन्य मेटाडेटा अनुभागों को बरकरार रखता है।

-dx

यदि मौजूद हो तो XMP सेक्शन को हटा दें। अन्य मेटाडेटा अनुभागों को बरकरार रखता है।

-du

जेपीईजी के उन हिस्सों को हटा दें जो एक्सिफ़ नहीं हैं, टिप्पणी नहीं, और अन्यथा छवि में योगदान नहीं है - जैसे कि डेटा जो फ़ोटोशॉप छवि में छोड़ सकता है।

-purejpg

सभी JPEG अनुभाग हटाएं जो छवि प्रदान करने के लिए आवश्यक नहीं हैं। किसी भी मेटाडेटा को स्ट्रिप्स करता है जो विभिन्न एप्लिकेशन छवि में छोड़ सकते हैं। -de -dcऔर -du विकल्पों का एक संयोजन ।


रोटेशन टैग को 'छवि प्रदान करने के लिए आवश्यक'
जेफ

1
स्पष्ट होना चाहिए, लेकिन केवल जेपीईजी फाइलों के लिए काम करता है
सर्व-इंक

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

रॉ के फॉर्मेट के लिए मेरा मानना ​​है कि फिल कहते ही एकमात्र तरीका है, और इसलिए:

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

और फिर चेकसमिंग ही होगी। आपको बस उँगलियों को पार करने की ज़रूरत है कि एक एकल कार्यान्वयन के साथ अधिक विदेशी छवि प्रारूप बनाए जा सकते हैं (या एक कठोर फ़ाइल प्रारूप है)।

डिस्क्लेमर : यह आपके बीच के चेकसम की तुलना करने के लिए काम करेगा। यदि आप चेकसमों को स्टोर करते हैं और फिर -stripअपडेट के बाद पुनः चलाते हैं zlibया libjpegआप पूरी तरह से अलग चेकसमों के साथ समाप्त हो सकते हैं। आपको हर बार हर छवि के लिए चेकसम बनाने की आवश्यकता है। छवि गुणवत्ता के बारे में चिंताओं को देखते हुए यह केवल एक बार चलाने के लिए बुद्धिमान है ।


अगर मैं गलत हूं तो मुझे सुधारो। मान लीजिए दो फाइलें एक ही छवि का प्रतिनिधित्व करती हैं, लेकिन दो अलग-अलग पुस्तकालयों के साथ संपीड़ित थीं। क्या वे अलग-अलग पिक्सलों में 'अनकंप्रेस्ड' नहीं होंगे क्योंकि jpg हानिप्रद है?
जेफ

1
अक्सर नहीं, JPEG2000 में एक अच्छी तरह से परिभाषित डीसीटी है, लेकिन यह केवल छवि को बदलने का हिस्सा है। हाफ़मैन कोडिंग भी समान होनी चाहिए। लेकिन यह जहां तक ​​मानक जाता है, आप वास्तव में एक संपीड़न पुस्तकालय का उपयोग करके परिणाम को संक्षिप्त कर सकते हैं। सिद्धांत रूप से संपीड़न पुस्तकालयों (जैसे zlib) में हमेशा अलग-अलग परिणाम (समान एल्गोरिथ्म के लिए भी) उत्पन्न होंगे, लेकिन अधिकांश jpeg पुस्तकालयों में सामान रखने के लिए RNG को उसी तरह से बीज दिया जाता है (जैसे libjpeg ऐसा करता है)।
grochmal

@Jeff समस्या काफी स्वाभाविक है क्योंकि हानिपूर्ण का अर्थ है कि जानकारी खो गई है।
aventurin

बेशक यदि आप अलग-अलग संपीड़न गुणवत्ता (जैसे -quality) को परिभाषित करते हैं तो सभी दांव बंद हो जाते हैं।
grochmal

इस उत्तर के साथ कोई समस्या हो सकती है। JFIF टैग, JFIFversion सहित, इमेजमाजिक विकल्प द्वारा डाले जाते हैं -strip। इसे देखने के लिए, और exiftool -a -G1 -s <filename>के साथ बनाई गई फ़ाइलों पर चलाएँ । पुष्टि करने के लिए, भागो । स्क्रिप्ट के भविष्य के रन किसी तरह से इसे ध्यान में रखना होगा अगर JFIF संस्करण अलग था। mogrify -stripexiftool -all=exiftool -a -G1 -s <original-filename> | grep JFIF
जेफ

6

imagemagickपैकेज के साथ और केवल जेपीईजी के लिए ही नहीं :

mogrify -strip *.jpg

से मैनुअल :

-strip

किसी भी प्रोफाइल, टिप्पणी या इन PNG चंक्स की छवि को पट्टी करें: bKGD, cHRM, EXIF, gAMA, iCCP, iTXt, sRGB, tEXt, zCCP, zTXt, date।

बहुत अधिक जानकारी और जानकारी यहाँ है

नोट: यह @grochmal के समान है लेकिन बहुत अधिक सीधा और सरल है।


उस थ्रेड के अनुसार, exiftool -all= *.jpgjpg डेटा स्ट्रिप करने के लिए बेहतर है ।
वॉल्ट डब्ल्यू

0

एक संभावित समाधान जो अभी-अभी दिमाग में आया। यह मेटाडेटा के मुद्दे को दरकिनार करता है। यह मानता है कि फाइलें छवि के साथ ही समाप्त होती हैं, कि सभी मेटाडेटा फ़ाइल की शुरुआत में है।

आइए वर्तमान बैकअप ड्राइव को गोल्ड ड्राइव के रूप में देखें।

गोल्ड ड्राइव पर छवियों के लिए:

  1. किसी भी एम्बेडेड थंबनेल को निकालें।
  2. फ़ाइल को उनके अंत में शुरू करके बंद करें, M = 100k बाइट्स कहकर। अंत-चंक के रूप में पहली टेलिंग (जिसमें फ़ाइल का अंत होता है) देखें।
  3. प्रत्येक chunk के md5sums की गणना करें और उन्हें एक मास्टर सूची में संग्रहीत करें जिसे गोल्डलिस्ट कहा जाता है।

पुरानी ड्राइव पर छवियों के लिए :

  1. किसी भी एम्बेडेड थंबनेल को निकालें।
  2. अंतिम एम बाइट को एक फ़ाइल से हटा दें।
  3. इसकी md5sum की गणना करें।
  4. CLASS U: यदि राशि स्वर्ण सूची में नहीं है, तो निष्कर्ष निकालिए कि यह स्वर्ण-ड्राइव के लिए अद्वितीय है। इसे गोल्ड-ड्राइव पर कॉपी करें। शेष विखंडू की md5sums की गणना करें और उन्हें गोल्डलिस्ट में जोड़ें। अगली फ़ाइल पर जाएं।
  5. अन्यथा, दूसरे से अंतिम एम बाइट्स तक पूंछ करें। लेकिन यदि बचे हुए बाइट्स, N = 50k से कम हैं, तो M बाइट्स को बंद न करें। इसके बजाय शेष को थोड़े ओवरसाइज़्ड चंक के रूप में प्रोसेस करें। हेडर क्षेत्रों (बहिष्कृत थंबनेल) द्वारा उपभोग की जाने वाली एन सबसे बड़ी जगह से बड़ा होना चाहिए।
  6. चंक के md5sum की गणना करें।
  7. गोल्डलिस्ट की तुलना करें, और इसी तरह।
  8. CLASS D: यदि सभी चंक्सों के लिए सोने की परतें हैं, तो यह एक डुप्लिकेट है।
  9. कक्षा पी: यदि सभी विखंडू के लिए रकम है, लेकिन अंतिम गोल्डलिस्ट में हैं, तो यह निष्कर्ष है कि यह संभवतः एक डुप्लिकेट है।

क्लास पी में वे चित्र होंगे जो स्वर्ण-ड्राइव पर हैं, लेकिन अलग-अलग एक्सिडेटा हैं, या छवि के प्रमुख बाइट्स में भ्रष्टाचार / डेटा-सड़ांध है।

जब किया जाता है, तो CLASS P की अंतःक्रियात्मक रूप से जांच करें, उनकी तुलना स्वर्ण-ड्राइव पर उनके साथियों से करें।

EDIT # 3 से ओपी देखें।

CLASS U और D में असाइनमेंट 100% सटीक होना चाहिए।

CLASS P का आकार चंक के आकार M पर निर्भर करता है, क्योंकि किसी फ़ाइल के पहले M + N बाइट में लगभग निश्चित रूप से कुछ छवि डेटा (और सभी मेटाडेटा) होते हैं


मैंने आपकी पोस्ट का कुछ प्रारूपण किया था (इसलिए यह crammed पैराग्राफ के बजाय मार्कडाउन एन्यूमरेशन का उपयोग करता है)। फिर भी मैं यह काफी गूढ़ बाहर figur को आप कक्षा यू, कक्षा डी, कक्षा पी द्वारा क्या मतलब है लगता है ...
grochmal

एक पुरानी हार्ड ड्राइव पर प्रत्येक छवि फ़ाइल को तीन वर्गों में से एक U (nique), D (uplicate) P (डकैतीपूर्ण डुप्लिकेट) में से एक में असाइन करें
Jeff

0

यदि पुरानी ड्राइव में ज्यादातर डुप्लिकेट (मेटाडेटा सहित) हैं, तो दो चरणों का उपयोग करके ओपी में परिभाषित प्राचीन वस्तुएं खोजें (जो दो फाइलों को मेटाडेटा में भिन्न होने पर भी डुप्लिकेट मानते हैं):

  1. मौजूदा बैकअप ड्राइव के लिए पुरानी ड्राइव पर जो फ़ाइलें अनन्य हैं (इस वैकल्पिक अर्थ में), उन्हें या तो CLASS uU (अनस्ट्रिप्ड-यूनिक) या CLT D (upilcate) को निर्दिष्ट करने के लिए पहचानने के लिए बरकरार फ़ाइलों का md5sums का उपयोग करें। CLASS D 100% सटीक होगा। क्लास यू को छोटा होना चाहिए (धारणा से ऊपर) और इसमें सच्चे डुप्लिकेट (ओपी सेंस में) और सच्चे आकर्षण का मिश्रण होता है।

  2. छोटे, प्रबंधनीय के साथ काम करना, क्‍लास यूयू में फाइलों का सेट, फाइल तुलना की एक विधि डिजाइन करने के लिए md5sums और विभिन्न स्ट्रिपिंग तकनीकों का उपयोग करना जो ओपी में निर्धारित उद्देश्यों के लिए उपयोगी है।


0

यह थोड़ा पुराना है, लेकिन हां, एक्सफ़ॉल्टल बहुत अच्छा काम करता है।

का मेटाडेटा दिखाएँ

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 .

वर्तमान निर्देशिका में * .jpg फ़ाइलों के सभी जीपीएस मेटाडेटा निकालें

exiftool -gps:all= *.jpg
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.