用于python的Exif操作库

我正在寻找良好的Exif(可交换图像文件格式)操作库为Python。 我更喜欢灵活性(例如,检索提供商专有标签的能力),而不是处理速度。 你会build议什么?

你可能想看看exif-py :

Python库从tiff和jpeg文件中提取EXIF数据。 非常容易使用 – $ ./EXIF.py image.jpg

或Python成像库(PIL) :

Python成像库(PIL)为您的Python解释器添加image processingfunction。 该库支持多种文件格式,并提供强大的image processing和graphicsfunction。

还有一个恰当的命名pyexif: http ://pyexif.sourceforge.net/

pyexif python库和工具旨在从包含它的Jpeg和Tiff文件中提取EXIF信息。 这些信息通常包含在使用数码相机,数字胶片扫描仪等数码成像设备创build的图像中。

但是,看起来pyexif还没有被更新。 他们build议,如果他们没有做检查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的解决scheme

Exiv2(exiv2: http ://exiv2.org/)是一个成熟的开源C ++库,支持对许多图像types(JPEG,PNG,TIFF和许多原始格式)的读写元数据,理解标准(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的一个优点是有一个窗口可用于python 2.7。 gexiv2的窗口构build请求位于: https ://bugzilla.gnome.org/show_bug.cgi?id = 712441

exiv2和绑定都是开源的(GPL)。

本文介绍了一个用于使用纯Python编写EXIF元数据(而不仅仅是读取它们)的Python模块。 显然,没有PIL,pyexif,也没有EXIF-py支持写EXIF。 pyexiv2似乎是stream血的和平台特定的。

使用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://www.emilas.com/jpeg/看到Gheorghe Milas的jpeg.py库,它是“parsing,读取和写入JPEG EXIF,IPTC和COM元数据的Python库”。

缺点是他似乎通过DynDNS将他的域名托pipe在一个dynamicIP上,所以它并不总是可用的。

不知何故,我得到一个与上面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 

我开始编写自己的基于PIL代码的小型库。 在这里检查 。

我一直在使用我自己的包装http://www.sno.phy.queensu.ca/~phil/exiftool/ – 原因是它非常完整,开发非常活跃。 而且不能支持几乎所有的图像格式,对于需要的项目来说是绝对的炫目

当然缺点是它不是Python,所以你需要使用subprocess调用。

现在 http://redmine.yorba.org/projects/gexiv2/wiki的页面显示如下:;

这对于Python 2或者Python 3来说都是一样的,这使得GExiv2成为pyexiv2的一个很好的替代品,它只支持Python 2。

所以,Python 2和Python3现在都被GExiv2所支持。

好消息。

在ASPN上有一些PIL和EXIF.py使用的例子

在Python 2.6中,模块的地方是不同的。 用这个:

 import Image from ExifTags import TAGS