Python 3 如何修改照片的 exif 信息
想写个小程序,目的是将GPS写入照片的exif信息中,没有处理图片信息的经验,找了python 3的相关库,貌似pillow可以处理,但粗看了一下官方文档,貌似只提供了read exif的功能,并没有找到修改exif的方法,还请有经验的大神给些指点。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
花时间自己解决了一下:目前
pillow
包并没有简便的方式修改exif
信息:其只提供了save()
方法,该方法可以将修改好的 exif 信息重新保存到照片之中(im.save(fp, format, exif=raw_exif)
),但是save
方法只接收raw_exif
的bytes
类型的 exif 数据,这就让人十分抓狂,因为pillow
的_getexif()
方法返回的是字典格式,即便可以在字典格式中增改了所需要的 exif 信息,也还是需要想办法将修改好的字典转换成raw_exif
,可是pillow
竟然没有提供这个方法...瞬间无语中。另一种方法就是通过
pillow
的Image.info['exif']
获得raw_exif
信息,然后直接修改二进制 exif 信息,不过这实现起来必将十分蛋疼....首先,做这件事情之前需要对 exif 的编码十分了解,然后还需要将所需要将增改的信息转换成bytes
类型,最后还要把信息整合进原始 exif 之中....综上,基本上放弃了通过
pillow
包解决这个问题的想法,同时_getexif()
方法目前只是个实验方法,不建议使用,所以pillow
只能再等等。python
中提供的可以修改 exif 信息的包有很多,比如pyexiv2
、pyxif
...and so on,但不幸的是这些包在 windows 下的最新的 python 版本中都不兼容(我用的是py3.5),试了一晚上只有泪奔。最终解决方法,直接装一个 py2.7,通过
pyexiv2
解决,这是pyexiv2
的官方文档: http://tilloy.net/dev/pyexiv2..., 其提供了类似 pythondict
形式的修改 exif 信息的方法,这让修改大多数 exiftag 的信息变得十分方便,但是在处理 GPS 信息的时候则要相对麻烦一点,需要将相应的坐标数据转换成有理数形式,好在pyexiv2
提供了相应的方法。下面是将十进制gps写入图片exif信息的写法,首相将
float
格式的经纬度转换成度分秒格式,然后将度分秒分别转换成有理数(具分子和分母),最后写入 exiftag 之中:正好路过,给楼主推荐一个第三方库:https://pypi.python.org/pypi/...
可以和Pillow配合使用,支持Python 3.5
python3可以用piexif库实现对exif的读写。详见:http://piexif.readthedocs.io/... 。
我看pyexiv2已经可以支持Python3了啊,试了一下也是可以的,莫非这个不是官方的更新?
说明:https://blog.csdn.net/qq_3595...
pypi:https://pypi.org/project/pyex...