我正在为python寻找好的exif(可交换图像文件格式)操作库。我更喜欢灵活性(例如,检索提供商专有标签的能力)而不是处理速度。你会建议什么?
答案 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: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)
答案 11 :(得分:0)
在Python 2.6中,模块的位置是不同的。使用此:
import Image
from ExifTags import TAGS