2011-12-21 8 views
6

के माध्यम से छवियों पर जटिल कस्टम मेटाडेटा लिखना मैं छवियों पर कस्टम मेटाडेटा लिखना चाहता हूं (ज्यादातर jpegs, लेकिन अन्य भी हो सकता है)। अब तक मैं पीआईएल के माध्यम से ऐसा करने में सक्षम नहीं हूं (मैं केंद्र 5 & पर हूं, मुझे पाइएक्सिव इंस्टॉल नहीं किया जा सका) मैं समझता हूं कि मैं कुछ पूर्व परिभाषित टैग अपडेट कर सकता हूं, लेकिन मुझे कस्टम फ़ील्ड बनाने की आवश्यकता है/टैग! क्या यह किया जा सकता है?पाइथन

यह डेटा उपयोगकर्ताओं द्वारा बनाया जाएगा, इसलिए मुझे नहीं पता कि वे टैग हाथ से पहले या उनके पास क्या हैं। मुझे उन्हें टैग/उपटैग & बनाने की अनुमति देने की आवश्यकता है, फिर उनके लिए डेटा लिखें।

Category : Human 

Physical : 
    skin_type : smooth 
    complexion : fair 
    eye_color: blue 
    beard: yes 
    beard_color: brown 
    age: mid 

Location : 
    city: london 
    terrain: grass 
    buildings: old 

मैं भी पाया गया कि जनहित याचिका JpegImagePlugin के माध्यम से एक jpeg बचत पर, सभी पिछले मेटाडाटा नए डेटा है कि आप करने के लिए नहीं मिलता है के साथ ओवरराइट है: उदाहरण के लिए, किसी को किसी विशेष छवि पर इस मेटाडाटा बनाना चाह सकते हैं संपादित? क्या यह एक बग है?

चीयर्स, एस

उत्तर

12

अजगर pyexiv2 module/लिखने मेटाडाटा पढ़ सकते हैं।

मुझे लगता है कि वैध EXIF ​​टैग का सीमित सेट है। मुझे नहीं पता कि कैसे, या यदि अपने स्वयं के कस्टम टैग बनाना संभव है। हालांकि, अगर आप Exif.Photo.UserComment टैग इस्तेमाल कर सकते हैं, और JSON के साथ इसे भरने:

import pyexiv2 
import json 

metadata = pyexiv2.ImageMetadata(filename) 
metadata.read() 
userdata={'Category':'Human', 
      'Physical': { 
       'skin_type':'smooth', 
       'complexion':'fair' 
       }, 
      'Location': { 
       'city': 'london' 
       } 
      } 
metadata['Exif.Photo.UserComment']=json.dumps(userdata) 
metadata.write() 

और इसे वापस पढ़ने के लिए:

import pprint 
filename='/tmp/image.jpg' 
metadata = pyexiv2.ImageMetadata(filename) 
metadata.read() 
userdata=json.loads(metadata['Exif.Photo.UserComment'].value) 
pprint.pprint(userdata) 

पैदावार

{u'Category': u'Human', 
u'Location': {u'city': u'london'}, 
u'Physical': {u'complexion': u'fair', u'skin_type': u'smooth'}} 
+1

इस बात के लिए बहुत-बहुत धन्यवाद ! वास्तव में, pyexiv2 साथ, मैं भी कस्टम मेटाडाटा लिख ​​सकते हैं: ' pyexiv2.xmp.register_namespace ('/', 'कस्टम') मेटाडाटा [ 'Xmp.custom.category'] = 'मानव' ' लेकिन समस्या यह है कि (सेंटोस 5 + पायथन 2.6) पर, मैं अपनी सभी निर्भरताओं के साथ pyexiv2 स्थापित नहीं कर पा रहा हूं: पी तो मैं यह देखने की कोशिश कर रहा हूं कि पीआईएल मेरे लिए काम करता है या नहीं! – Saurabh

+1

कस्टम टैग बनाने के तरीके के लिए धन्यवाद। क्षमा करें मुझे CentOS के बारे में बहुत कुछ पता नहीं है (और मुझे लगता है कि आपने 'yum install pyexiv2' को आजमाया है।) दुर्भाग्यवश, AFAIK, PIL 1.1.7 [पढ़ सकते हैं लेकिन EXIF ​​मेटाडेटा नहीं लिख सकते हैं] (http://stackoverflow.com/ ए/1608545/1 9 055 9 7) और [EXIF लिखने का समर्थन अभी तक पीआईएल 1.2 में जोड़ा नहीं गया है] (https://bitbucket.org/effbot/pil-2009-raclette/src/cd403356263f/CHANGES)। – unutbu

+0

आप सही हैं। मैं पीआईएल पर छोड़ रहा हूँ। लेकिन मैंने आपकी पिछली पोस्ट को मेरे उत्तर के रूप में स्वीकार कर लिया है क्योंकि यह मुझे आगे बढ़ने के लिए उचित आधार देता है! धन्यवाद! – Saurabh