Python用Exif操作ライブラリ[終了]


108

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


おそらく質問は次のようになります。「Pythonを使用して機能セット(たとえば、プロバイダーの独自のタグを取得する機能やさまざまな画像形式との互換性)を高速で強調するExif(交換可能な画像ファイル形式)を編集するために利用できるオプションは何ですか?」
dlm 2013

1
@Wooble et al:「この質問をヘルプセンターのルールに合わせて言い換えることができる場合は、質問を編集するかコメントを残してください。」私は後者を行いましたが、Qはそれ以上コメントせずに終了しました。何ができますか?(理解しようとするだけであり、それが
予想外の

この質問をするとき、私は他の開発者の意見を求めていました!PackageOpinionOverflow?
Derek Litz

1
ここにあるほとんどすべての非exiv2ソリューションはにアクセスできないことに注意してくださいMakerNote。このEXIFタグでは、カメラメーカーが貴重な情報を保持する独自のタグを追加します。したがって、以下の回答から、ほとんどのライブラリの基本タグのみを取得できます。
user136036

回答:


65

あなたは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

免責事項
私は実際にどれが最良かわからない、これは私がグーグルとつなぎ合わせることができたものにすぎない。:)


19
これらの「ソリューション」はどれもEXIFタグを書き戻すことができないため、これらは問題の解決策ではありません。
odinho-Velmont、2011年1

22
技術的にはEXIFタグの書き込みは許可されていませんが、これは非常に便利です。コードを書くための+1。
セリン

3
Python 3.xのPILなし
5

素晴らしい概要。ちょうどノート:EXIF-Pyは、現在のPythonと互換性がありません(Pythonの3.3.3でテストし、また参照のそれはそう3.xのgithub.com/ianare/exif-py/issues/12)。
セル画

3
@MoreThanFive頻繁に保守され、pip!と統合されるPILフォークがあります。github.com/python-pillow/Pillow
ibizaman '10

59

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


9
記録のために:pyexiv2はそれらすべての中で最もよく維持され、最も完全なようです(ファイルにEXIFタグを書き戻すことを含む)。
rbp

1
pyexiv2はvirtualenv内に簡単にインストールできますか?
マットオースティン

2
メンテナンスが遅くなっているようで、Macへのインストールは地獄です。:/
Vortexfive 2012

6
気に人のために:残念ながら、pyexiv2は、Python 2のためにのみ利用可能です
texnic

1
<QUOTE src = " redmine.yorba.org/projects/gexiv2/wiki ">これは、Python 2または3のどちらでも同様に機能し、Python 2のみをサポートするpyexiv2の代わりにGExiv2を使用します。</ QUOTE>
jno

31

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

Exiv2(exiv2:http ://exiv2.org/ )は、多くの画像タイプ(JPEG、PNG、TIFF、および多くの未加工形式)へのメタデータの読み書きをサポートする成熟したオープンソースの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つの利点は、Python 2.7で利用可能なWindowsビルドがあることです。gexiv2のWindowsビルドリクエストはこちら:https ://bugzilla.gnome.org/show_bug.cgi?id=712441

exiv2とバインディングはすべてオープンソース(GPL)です。


exiv2へのバインディングに関する最新情報に基づいてこれを更新
dlm

pyexiv2フォークされました:py3exiv2.tuxfamily.org
Artem Klevtsov 2016年

tilloy.netリンクが停止
jtlz2

5

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


これが最先端でないと考えられるかどうかはわかりません。
Mad Physicist、

5

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')

1
純粋なPIL /枕はEXIFタグの変更を許可しません。しかし、それを支援する小さなライブラリがあります:github.com/hMatoba/Pyxif
Simon Steinberger

4

ページhttp://redmine.yorba.org/projects/gexiv2/wikiは(になったhttps://wiki.gnome.org/Projects/gexiv2)読みになりました

これは、Python 2または3のどちらでも同じように機能し、Python 2のみをサポートするpyexiv2の代わりにGExiv2を使用できます。

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

朗報です。


2
リンクは機能しません。これは動作しますwiki.gnome.org/Projects/gexiv2
user881300

良い更新!2013年から3年が経過しました...
jno 2016年

3

また、http: //www.emilas.com/jpeg/にあるGheorghe Milasのjpeg.pyライブラリもご覧ください。これは、「JPEG EXIF、IPTC、およびCOMメタデータを解析、読み取り、書き込みするためのPythonライブラリ」です。

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


もう存在しません。
Simon Steinberger

3

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


3

私はhttp://www.sno.phy.queensu.ca/~phil/exiftool/の周りで独自のラッパーを使用しています -その理由は、それが非常に完全で、開発者が非常にアクティブだからです。そして、ほとんどすべての画像フォーマットをサポートできないことは、それが必要とされるプロジェクトの絶対的なショートッパーです

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


exiftool github.com/smarnach/pyexiftoolの pythonラッパーがあります。非常に完成しているという事実に対するexiftoolへの1票。
Long Vu

彼はPython libを求めています。
Diego Woitasen


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.