我正在寻找适用于python的良好exif(可交换图像文件格式)操作库。与处理速度相比,我更喜欢灵活性(例如,检索提供商专有标签的能力)。你有什么建议?
MakerNote
。在此EXIF标签中,相机制造商添加了自己的标签,这些标签可保存有价值的信息。因此,您只能从以下答案中获得大多数库的基本标签。
我正在寻找适用于python的良好exif(可交换图像文件格式)操作库。与处理速度相比,我更喜欢灵活性(例如,检索提供商专有标签的能力)。你有什么建议?
MakerNote
。在此EXIF标签中,相机制造商添加了自己的标签,这些标签可保存有价值的信息。因此,您只能从以下答案中获得大多数库的基本标签。
Answers:
您可能要签出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共同努力的结果。:)
pip
!github.com/python-pillow/Pillow
我最近一直在使用pyexiv2,它似乎非常适合我的需求。也许它也适合您。
Exiv2(exiv2:http://exiv2.org/ )是一个成熟的开源C ++库,支持将元数据读取和写入多种图像类型(JPEG,PNG,TIFF和许多原始格式),并了解标准(Xmp,IPTC)和Exif)和非标准元数据(“ Makernotes”),并且可以在多种平台(Windows,Linux和Mac)上运行。
Python与exiv2的绑定是:
pyexiv2的一个优点是有一个可用于python 2.7的Windows构建。针对gexiv2的Windows构建请求位于此处:https ://bugzilla.gnome.org/show_bug.cgi?id = 712441
exiv2和绑定都是开源的(GPL)。
pyexiv2
已分叉:py3exiv2.tuxfamily.org。
使用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://redmine.yorba.org/projects/gexiv2/wiki(成为https://wiki.gnome.org/Projects/gexiv2)上的页面现在读取:
这对于Python 2或3同样适用,这使GExiv2成为仅支持Python 2的pyexiv2的理想替代品。
因此,GExiv2现在支持Python2和Python3。
好消息。
您还可以在http://www.emilas.com/jpeg/上查看Gheorghe Milas的jpeg.py库,该库是“用于解析,读取和写入JPEG EXIF,IPTC和COM元数据的python库”。
缺点是他似乎通过DynDNS将其域托管在动态IP上,因此它并不总是可用。
我用上面的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
我一直在http://www.sno.phy.queensu.ca/~phil/exiftool/周围使用我自己的包装器 -原因是它非常完整,开发人员非常活跃。而且,不支持几乎所有图像格式对于该项目来说绝对是必不可少的。
当然,缺点是它不是python,因此您需要像我一样使用子进程调用。
上有PIL和EXIF.py一些用法示例ASPN
在Python 2.6中,模块的位置不同。用这个:
import Image
from ExifTags import TAGS