Python用の優れたexif(交換可能な画像ファイル形式)操作ライブラリを探しています。私は、処理速度よりも柔軟性 (プロバイダー独自のタグを取得する機能など) を好みます。何を提案しますか?
12 に答える
exif-pyをチェックアウトすることをお勧めします:
tiff および jpeg ファイルから EXIF データを抽出する Python ライブラリ。非常に使いやすい - $ ./EXIF.py image.jpg
またはPython Imaging Library (PIL) :
Python Imaging Library (PIL) は、Python インタープリターに画像処理機能を追加します。このライブラリは多くのファイル形式をサポートし、強力な画像処理およびグラフィックス機能を提供します。
適切な名前の pyexif もあります: http://pyexif.sourceforge.net/
pyexif python ライブラリとツールは、それを含む Jpeg および Tiff ファイルから EXIF 情報を抽出することを目的としています。この情報は通常、デジタル カメラ、デジタル フィルム スキャナーなどのデジタル イメージング デバイスを使用して作成された画像に含まれています。
ただし、pyexif はかなり長い間更新されていないようです。彼らは、彼らが EXIF-py をチェックするトリックを行っていない場合に推奨します。そのため、sourceforge ページで最近いくつかのアクティビティが行われているようですが、最初にそれを試す必要があります。最後に、PIL を使用してこれを行うことができます。
from PIL import Image
from PIL.ExifTags import TAGS
def get_exif(fn):
ret = {}
i = Image.open(fn)
info = i._getexif()
for tag, value in info.items():
decoded = TAGS.get(tag, tag)
ret[decoded] = value
return ret
免責事項:
実際、どれが最適かはわかりません。これは、私が Google と組み合わせてできたものです。:)
私は最近pyexiv2を自分で使用していますが、私のニーズに非常にうまく合っているようです。もしかしたら、あなたにも合うかもしれません。
Exiv2ベースのソリューション
Exiv2(exiv2:http ://exiv2.org/ )は、多くの画像タイプ(JPEG、PNG、TIFF、および多くのraw形式)へのメタデータの読み取りと書き込みをサポートする成熟したオープンソースのC ++ライブラリであり、標準(Xmp、IPTC)を理解しますおよびExif)および非標準メタデータ(「Makernotes」)であり、複数のプラットフォーム(Windows、Linux、および一部の作業ではMac)で実行されます。
exiv2へのPythonバインディングは次のとおりです。
- gexiv2(多言語バインディングですが、python 2.6 / 2.7 / 3.Xで動作します):https ://wiki.gnome.org/gexiv2
- pyexiv2(サポートされなくなりましたが、Python 2.6 / 2.7で動作します):http ://tilloy.net/dev/pyexiv2/
pyexiv2の利点の1つは、Python2.7で使用できるWindowsビルドがあることです。gexiv2のWindowsビルドリクエストはこちらです:https ://bugzilla.gnome.org/show_bug.cgi?id = 712441
exiv2とバインディングはすべてオープンソース(GPL)です。
PILを使用してください:)
import os,sys
from PIL import Image
from PIL.ExifTags import TAGS
if __name__ == '__main__':
for (k,v) in Image.open(sys.argv[1])._getexif().iteritems():
print '%s = %s' % (TAGS.get(k), v)
os.system('pause')
この記事では、純粋な Python を使用して EXIF メタデータを書き込む (読み取るだけでなく) Python モジュールについて説明します。どうやら、PIL、pyexif、EXIF-py のいずれも EXIF の書き込みをサポートしていないようです。pyexiv2 は最先端で、プラットフォーム固有のようです。
http://redmine.yorba.org/projects/gexiv2/wikiのページ( https://wiki.gnome.org/Projects/gexiv2になりました)は次のようになります:
これは Python 2 または 3 のどちらでも同様に機能するため、GExiv2 は Python 2 のみをサポートする pyexiv2 の優れた代替品になります。
そのため、Python2 と Python3 の両方が GExiv2 でサポートされるようになりました。
朗報です。
私はhttp://www.sno.phy.queensu.ca/~phil/exiftool/の周りで自分のラッパーを使用しています。 その理由は、それが非常に完全であり、開発者が非常にアクティブであるためです。そして、ほとんどすべての画像形式をサポートできないことは、それが必要とされるプロジェクトにとって絶対的なショートッパーです
もちろん欠点は、Pythonではないことです。そのため、私と同じように、サブプロセス呼び出しを使用する必要があります。
私はPILのコードに基づいた独自の小さなライブラリを書き始めました。 こちらで確認してください。
http://www.emilas.com/jpeg/にあるGheorghe Milas の jpeg.py ライブラリも参照してください。これは、「JPEG EXIF、IPTC、および COM メタデータを解析、読み取り、書き込みするための Python ライブラリ」です。
欠点は、DynDNS を介して動的 IP でドメインをホストしているように見えるため、常に利用できるとは限らないことです。
どういうわけか、上記の Paolo のコードで _getexif の attributeError が発生します。私は Python 2.6.6 と PIL 1.1.7 を使用しています。_getexif は廃止されましたか??
ここに私のために働いた小さな変更があります。
from PIL import Image
from PIL.ExifTags import TAGS
def get_exif(fn):
ret = {}
i = Image.open(fn)
# info = i._getexif()
info = i.tag.tags
for tag, value in info.items():
decoded = TAGS.get(tag, tag)
ret[decoded] = value
return ret
ASPN での PIL およびEXIF.pyの使用例がいくつかあります。
Python 2.6 では、モジュールの場所が異なります。これを使って:
import Image
from ExifTags import TAGS