用于python的Exif操作库

oo_*_*_oo 107 python exif

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

Pao*_*ino 63

你可能想看看exif-py:

Python库从tiff和jpeg文件中提取EXIF数据.非常容易使用 - $ ./EXIF.py image.jpg

Python成像库(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
Run Code Online (Sandbox Code Playgroud)

免责声明:
我实际上不知道哪个是最好的,这正是我能与谷歌拼凑起来的.:)

  • 虽然从技术上讲不允许编写EXIF标签,但我发现这非常有用.用于编写代码的+1. (21认同)
  • 这些"解决方案"都不能写回EXIF标签,因此它们不是问题的解决方案. (18认同)
  • Python 3.x没有PIL (3认同)
  • @MoreThanFive有一个PIL fork,维护很多,并与`pip`集成!https://github.com/python-pillow/Pillow (3认同)

小智 58

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

  • 对于记录:pyexiv2似乎是最好的维护它们,并且最完整(包括将EXIF标记写回文件). (9认同)
  • 对于那些关心的人:不幸的是,pyexiv2仅适用于Python 2. (6认同)
  • 维护似乎放慢了速度,在Mac上安装是一个地狱.:/ (2认同)

dlm*_*dlm 32

基于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).


Jas*_*mbs 5

本文描述了一个Python模块,用于使用纯Python编写EXIF元数据(而不仅仅是阅读它们).显然,没有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')
Run Code Online (Sandbox Code Playgroud)

  • 纯 PIL / Pillow 不允许修改 EXIF 标签。但是有一个小型图书馆可以帮助解决这个问题:https://github.com/hMatoba/Pyxif (2认同)