用于python的Exif操作库

时间:2009-04-19 13:15:44

标签: python exif

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

12 个答案:

答案 0 :(得分:62)

您可能需要查看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

<强>声明
我实际上不知道哪个最好,这就是我能与谷歌拼凑起来的东西。 :)

答案 1 :(得分:57)

我最近自己一直在使用pyexiv2,它似乎非常适合我的需求。也许它也适合你的。

答案 2 :(得分:30)

基于Exiv2的解决方案

Exiv2(exiv2:http://exiv2.org/)是一个成熟的开源C ++库,支持读取和写入多种图像类型(JPEG,PNG,TIFF和许多原始格式)的元数据,理解标准(Xmp,IPTC)和Exif)和非标准元数据(“Makernotes”),并在多个平台上运行(Windows,Linux,以及一些工作,Mac)。

与exiv2的Python绑定是:

pyexiv2的一个优点是可以为python 2.7提供windows构建。这里有一个关于gexiv2的windows构建请求:https://bugzilla.gnome.org/show_bug.cgi?id=712441

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

答案 3 :(得分:5)

This article描述了一个Python模块,用于使用纯Python编写EXIF元数据(而不仅仅是阅读它们)。显然,没有PIL,pyexif和EXIF-py支持编写EXIF。 pyexiv2似乎是前沿和平台特定的。

答案 4 :(得分: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')

答案 5 :(得分:3)

您还可以在http://www.emilas.com/jpeg/查看Gheorghe Milas的jpeg.py库,它是“用于解析,读取和写入JPEG EXIF,IPTC和COM元数据的python库。”

缺点是他似乎是通过DynDNS在动态IP上托管他的域名,所以它并不总是可用。

答案 6 :(得分:3)

我开始编写自己的小型库,它基于PIL中的代码。 check it here

答案 7 :(得分:3)

不知怎的,我用上面的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

答案 8 :(得分:3)

我一直在http://www.sno.phy.queensu.ca/~phil/exiftool/周围使用我自己的包装器 - 原因是它非常完整,开发非常活跃。而且无法支持几乎所有的图像格式是

所需项目的绝对优势

缺点当然是它不是python,所以你需要像我一样使用子进程调用。

答案 9 :(得分:3)

http://redmine.yorba.org/projects/gexiv2/wiki处的页面现在读

  

这对于Python 2或3也同样有效   GExiv2是pyexiv2的绝佳替代品,仅支持pyexiv2   Python 2。

因此,现在GExiv2支持Python2和Python3。

好消息。

答案 10 :(得分:1)

ASPN

上有一些PIL和EXIF.py用法示例

答案 11 :(得分:0)

在Python 2.6中,模块的位置是不同的。使用此:

import Image    
from ExifTags import TAGS