私はpythonの良いexif(交換可能な画像ファイル形式)操作ライブラリを探しています。処理速度よりも柔軟性(プロバイダーの独自のタグを取得する機能など)を優先します。何を提案しますか?
MakerNote
。このEXIFタグでは、カメラメーカーが貴重な情報を保持する独自のタグを追加します。したがって、以下の回答から、ほとんどのライブラリの基本タグのみを取得できます。
私はpythonの良いexif(交換可能な画像ファイル形式)操作ライブラリを探しています。処理速度よりも柔軟性(プロバイダーの独自のタグを取得する機能など)を優先します。何を提案しますか?
MakerNote
。このEXIFタグでは、カメラメーカーが貴重な情報を保持する独自のタグを追加します。したがって、以下の回答から、ほとんどのライブラリの基本タグのみを取得できます。
回答:
あなたは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
免責事項:
私は実際にどれが最良かわからない、これは私がグーグルとつなぎ合わせることができたものにすぎない。:)
pip
!と統合されるPILフォークがあります。github.com/python-pillow/Pillow
私は最近pyexiv2を使用していますが、それは私のニーズに非常にうまく適合しているようです。多分それはあなたにも合うかもしれません。
Exiv2(exiv2:http ://exiv2.org/ )は、多くの画像タイプ(JPEG、PNG、TIFF、および多くの未加工形式)へのメタデータの読み書きをサポートする成熟したオープンソースのC ++ライブラリであり、標準(Xmp、IPTC)を理解していますおよびExif)および非標準のメタデータ(「Makernotes」)、および複数のプラットフォーム(Windows、Linux、および一部の作業ではMac)で実行されます。
exiv2へのPythonバインディングは次のとおりです。
pyexiv2の1つの利点は、Python 2.7で利用可能なWindowsビルドがあることです。gexiv2のWindowsビルドリクエストはこちら:https ://bugzilla.gnome.org/show_bug.cgi?id=712441
exiv2とバインディングはすべてオープンソース(GPL)です。
pyexiv2
フォークされました:py3exiv2.tuxfamily.org。
この記事では、純粋なPythonを使用して(それらを読み取るだけでなく)EXIFメタデータを書き込むためのPythonモジュールについて説明します。どうやら、PIL、pyexif、EXIF-pyのいずれもEXIFの書き込みをサポートしていません。pyexiv2は最先端でプラットフォーム固有のようです。
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')
ページhttp://redmine.yorba.org/projects/gexiv2/wikiは(になったhttps://wiki.gnome.org/Projects/gexiv2)読みになりました:
これは、Python 2または3のどちらでも同じように機能し、Python 2のみをサポートするpyexiv2の代わりにGExiv2を使用できます。
そのため、Python2とPython3の両方がGExiv2でサポートされるようになりました。
朗報です。
また、http: //www.emilas.com/jpeg/にあるGheorghe Milasのjpeg.pyライブラリもご覧ください。これは、「JPEG EXIF、IPTC、およびCOMメタデータを解析、読み取り、書き込みするためのPythonライブラリ」です。
欠点は、DynDNSを介して動的IPでドメインをホストしているように見えるため、常に使用できるとは限らないことです。
どういうわけか、上記のPaoloのコードで_getexifのattributeErrorを取得します。Python2.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
PILのコードに基づく独自の小さなライブラリを書き始めました。 こちらで確認してください。
私はhttp://www.sno.phy.queensu.ca/~phil/exiftool/の周りで独自のラッパーを使用しています -その理由は、それが非常に完全で、開発者が非常にアクティブだからです。そして、ほとんどすべての画像フォーマットをサポートできないことは、それが必要とされるプロジェクトの絶対的なショートッパーです
もちろん、欠点はpythonではないことです。そのため、私と同じように、サブプロセス呼び出しを使用する必要があります。