python-3.x - 更改 exif 数据而不重新压缩 JPEG 图像
问题描述
我编写了一个 python 3 CLI 工具来修复库中照片的创建日期(请参见 此处。
我使用 Pillow 加载和保存图像,使用 piexif 处理 exif 数据检索/修改。
我的问题是我只想更改图片中的EXIF数据而不是重新压缩整个图像。枕头保存似乎无法做到这一点。
我的问题是:
- 有什么更好的 exif 库可以用来仅处理 exif 数据(到目前为止,我尝试了 py3exiv2、pexif 和 piexif)?
- 如果没有,有没有办法指示 Pillow 只更改图像的 exif 而不在保存时重新压缩?
谢谢 !
到目前为止,这是我用来更改创建日期的代码:
# Get original exif data
try:
exif_dict = piexif.load(obj.path)
except (KeyError, piexif._exceptions.InvalidImageDataError):
logger.debug('No exif data for {}'.format(obj.path))
return
# Change creation date in exif_dict
date = obj.decided_stamp.strftime('%Y:%m:%d %H:%M:%S').encode('ascii')
try:
exif_dict['Exif'][EXIF_TAKE_TIME_ORIG] = date
except (KeyError, piexif._exceptions.InvalidImageDataError):
return
exif_bytes = piexif.dump(exif_dict)
# Save new exif
im = Image.open(obj.path)
im.save(obj.path, 'jpeg', exif=exif_bytes)
解决方案
在你的情况下,我认为没有必要使用 Pillow。
exif_bytes = piexif.dump(exif_dict)
piexif.insert(exif_bytes, obj.path)
推荐阅读
- python - 在 django 中执行外部脚本的推荐做法是什么?
- swift - iOS:GMSPlacePickerViewController 国家限制
- javascript - Highcharts - 在同步图表中重置缩放
- javascript - Axios 中的单元测试拦截器逻辑
- docker - 使用 docker-compose 的 Dockerfile 中定义的卷
- angularjs - 如何在 promise then() karma 和 jasmine 中对条件进行单元测试
- java - Jackson ObjectMapper 将值读入特定的 Java 对象
- bash - 如何从文本文件中迭代每组几行?
- visual-studio - 从 Visual Studio 交叉编译时使用 Raspberry Pi 库
- php - 从 php 中的链接运行查询