web-dev-qa-db-ja.com

pythonのExif操作ライブラリ

Python用の優れたexif(交換可能な画像ファイル形式)操作ライブラリを探しています。処理速度よりも柔軟性(プロバイダーの独自のタグを取得する機能など)が好きです。何を提案しますか?

106
oo_olo_oo

あなたはチェックアウトしたいかもしれません 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

免責事項
。 :)

62

私は最近自分で pyexiv2 を使用していますが、これは私のニーズに非常によく合っているようです。おそらくあなたにも合うかもしれません。

58
user25148

Exiv2ベースのソリューション

Exiv2(exiv2: http://exiv2.org/ )は、多くの画像タイプへのメタデータの読み書きをサポートする、成熟したオープンソースのC++ライブラリです。 (JPEG、PNG、TIFFおよび多くの生のフォーマット)、標準(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)です。

30
dlm

PILを使用:)

import os,sys
from PIL import Image
from PIL.ExifTags import TAGS

if __== '__main__':
    for (k,v) in Image.open(sys.argv[1])._getexif().iteritems():
        print '%s = %s' % (TAGS.get(k), v)
    os.system('pause')
5
Max

この記事 は、純粋なPythonを使用してEXIFメタデータを(単に読み取るだけでなく)書き込むためのPythonモジュールについて説明しています。明らかに、PIL、pyexif、EXIF-pyのいずれもEXIFの書き込みをサポートしていません。 pyexiv2は、最先端のプラットフォーム特有のものです。

5
Jason R. Coombs

http://redmine.yorba.org/projects/gexiv2/wiki のページは読み取りnow

これはPython 2または3でも同様に機能します。これにより、GEXiv2はpyexiv2の優れた代替品となり、Python 2。

そのため、Python2とPython3の両方がGExiv2でサポートされるようになりました。

良いニュース。

4
jno

私は独自のラッパーを使用しています http://www.sno.phy.queensu.ca/~phil/exiftool/ 。そして、ほとんどすべての画像形式をサポートできないということは、それが必要とされるプロジェクトにとって絶対的なものです

もちろん、欠点はpythonではないため、私と同様にサブプロセス呼び出しを使用する必要があります。

3
Geert Dekkers

また、Gheorghe Milasのjpeg.pyライブラリを http://www.emilas.com/jpeg/ で見ることもできます。これは、「A python解析するライブラリ、JPEG EXIF、IPTCおよびCOMメタデータの読み取りと書き込み。」

欠点は、DynDNSを介して動的IPでドメインをホストしているように見えるため、常に利用できるとは限らないことです。

3
Alan Miller

私は、PILのコードに基づいた独自の小さなライブラリを書き始めました。 ここで確認してください

3
Albert

どういうわけか、上記の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
3
otterb

[〜#〜] aspn [〜#〜] にはPILとEXIF.pyの使用例がいくつかあります

1
Michał Niklas

Python 2.6ではモジュールの場所が異なります。これを使用してください:

import Image    
from ExifTags import TAGS
0
Tomasz Nazar