2011-12-21 37 views
6

私は画像にカスタムメタデータを書きたいと思っています(主にjpegですが、他のものも可能です)。これまで私はPILを使ってこれを行うことはできませんでした(私はcentos 5にあります。&私はpyexivをインストールできませんでした) 私はいくつかの事前定義されたタグを更新できますが、私はカスタムフィールド/タグ!それはできますか?Pythonで画像に複雑なカスタムメタデータを書き込む

このデータはユーザーによって作成されるため、これらのタグがどのようなものであるか、そのタグが含むものはわかりません。私は彼らにタグ/サブタグ&を作成させてからそれらのためのデータを書くことを許可する必要があります。例えば、誰かが特定の画像の上に、このメタデータを作成することもできます。

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 

私もPIL JpegImagePluginてJPEGを保存すると、以前のすべてのメタデータがあなたに取得しない新しいデータで上書きされることがわかりました編集?それはバグですか?

乾杯、 S

答えて

12

のpython 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'] = '人間 ' しかし、問題は、(centos 5 + python2.6)で、pyexiv2をすべての依存関係と共にインストールできないということです:P私はPILが私のために働くかどうかを調べようとしています! – Saurabh

+1

カスタムタグの作成方法を教えていただきありがとうございます。残念ながら、AFAIK、PIL 1.1.7 [EXIFメタデータを読むことはできますが、書き込むことはできません](http://stackoverflow.com/ a/1608545/190597)、[EXIF書き込みサポートはまだPIL 1.2に追加されていません](https://bitbucket.org/effbot/pil-2009-raclette/src/cd403356263f/CHANGES)。 – unutbu

+0

あなたは正しいです。私はPILをあきらめています。しかし、前の投稿を私の答えとして受け入れました。ありがとう! – Saurabh

関連する問題