Python 的 Exif 操作库[关闭]
- 2025-03-11 08:53:00
- admin 原创
- 34
问题描述:
我正在寻找适用于 Python 的优秀 exif(可交换图像文件格式)操作库。我更喜欢灵活性(例如,检索提供商专有标签的能力),而不是处理速度。您有什么建议?
解决方案 1:
你可能想看看exif-py:
Python 库用于从 tiff 和 jpeg 文件中提取 EXIF 数据。非常容易使用 - $ ./EXIF.py image.jpg
或Python 图像库 (PIL):
Python 图像库 (PIL) 为您的 Python 解释器添加了图像处理功能。该库支持多种文件格式,并提供强大的图像处理和图形功能。
还有恰如其名的 pyexif:http://pyexif.sourceforge.net/
pyexif python 库和工具旨在从包含 EXIF 信息的 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
免责声明:
我实际上不知道哪个是最好的,这只是我能用谷歌拼凑起来的。:)
解决方案 2:
我最近一直在使用pyexiv2,它似乎很适合我的需求。也许它也适合您。
注意:pyexiv2 仅适用于 python2,对于 python3 使用py3exiv2
解决方案 3:
基于 Exiv2 的解决方案
Exiv2 (exiv2:http://exiv2.org/ ) 是一个成熟的开源 C++ 库,支持读取和写入多种图像类型(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 的 Windows 版本。gexiv2 的 Windows 版本请求在此处:https://bugzilla.gnome.org/show_bug.cgi ?id=712441
exiv2 及其绑定都是开源的(GPL)。
解决方案 4:
本文介绍了一个使用纯 Python 编写 EXIF 元数据(而不仅仅是读取它们)的 Python 模块。显然,PIL、pyexif 和 EXIF-py 都不支持编写 EXIF。pyexiv2 似乎是前沿的且特定于平台的。
解决方案 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')
解决方案 6:
http://redmine.yorba.org/projects/gexiv2/wiki (已变为https://wiki.gnome.org/Projects/gexiv2 )上的页面现在内容如下:
这对于 Python 2 或 3 来说都同样适用,这使得 GExiv2 成为仅支持 Python 2 的 pyexiv2 的绝佳替代品。
因此,GExiv2 现在同时支持 Python2 和 Python3。
好消息。
解决方案 7:
您还可以查看 Gheorghe Milas 的 jpeg.py 库(http://www.emilas.com/jpeg/),它是“一个用于解析、读取和写入 JPEG EXIF、IPTC 和 COM 元数据的 python 库”。
缺点是,他似乎通过 DynDNS 在动态 IP 上托管他的域名,因此并不总是可用。
解决方案 8:
不知何故,我使用上述 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
解决方案 9:
我开始编写自己的基于 PIL 中的代码的小型库。
请点击此处查看。
解决方案 10:
我一直在使用自己的包装器http://www.sno.phy.queensu.ca/~phil/exiftool/
-- 原因是它非常完整,开发人员非常活跃。而无法支持几乎所有图像格式对于需要它的项目来说绝对是个障碍
当然,缺点是它不是 python,所以你需要使用子进程调用,就像我一样。
解决方案 11:
ASPN上有一些 PIL 和 EXIF.py 使用的示例
解决方案 12:
在 Python 2.6 中,模块的位置有所不同。使用以下命令:
import Image
from ExifTags import TAGS