问题:python的Exif操作库
我正在寻找适用于python的良好exif(可交换图像文件格式)操作库。与处理速度相比,我更喜欢灵活性(例如,检索提供商专有标签的能力)。你有什么建议?
回答 0
您可能要签出exif-py:
从tiff和jpeg文件提取EXIF数据的Python库。非常易于使用-$ ./EXIF.py image.jpg
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
免责声明:
实际上我不知道哪个是最好的,这就是我与Google共同努力的结果。:)
回答 1
我最近一直在使用pyexiv2,它似乎非常适合我的需求。也许它也适合您。
回答 2
基于Exiv2的解决方案
Exiv2(exiv2:http://exiv2.org/ )是一个成熟的开源C ++库,支持将元数据读取和写入多种图像类型(JPEG,PNG,TIFF和许多原始格式),并了解标准(Xmp,IPTC)和Exif)和非标准元数据(“ Makernotes”),并且可以在多种平台(Windows,Linux和Mac)上运行。
Python与exiv2的绑定是:
- 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的Windows构建。针对gexiv2的Windows构建请求位于此处:https ://bugzilla.gnome.org/show_bug.cgi?id = 712441
exiv2和绑定都是开源的(GPL)。
回答 3
本文介绍了一个Python模块,用于使用纯Python编写EXIF元数据(而不仅仅是读取它们)。显然,PIL,pyexif或EXIF-py都不支持编写EXIF。pyexiv2似乎是尖端的,并且是特定于平台的。
回答 4
使用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
http://redmine.yorba.org/projects/gexiv2/wiki(成为https://wiki.gnome.org/Projects/gexiv2)上的页面现在读取:
这对于Python 2或3同样适用,这使GExiv2成为仅支持Python 2的pyexiv2的理想替代品。
因此,GExiv2现在支持Python2和Python3。
好消息。
回答 6
您还可以在http://www.emilas.com/jpeg/上查看Gheorghe Milas的jpeg.py库,该库是“用于解析,读取和写入JPEG EXIF,IPTC和COM元数据的python库”。
缺点是他似乎通过DynDNS将其域托管在动态IP上,因此它并不总是可用。
回答 7
我用上面的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
我开始根据PIL中的代码编写自己的小型库。 在这里检查。
回答 9
我一直在http://www.sno.phy.queensu.ca/~phil/exiftool/周围使用我自己的包装器 -原因是它非常完整,开发人员非常活跃。而且,不支持几乎所有图像格式对于该项目来说绝对是必不可少的。
当然,缺点是它不是python,因此您需要像我一样使用子进程调用。
回答 10
上有PIL和EXIF.py一些用法示例ASPN
回答 11
在Python 2.6中,模块的位置不同。用这个:
import Image
from ExifTags import TAGS