首页 > 解决方案 > 更改 exif 数据而不重新压缩 JPEG 图像

问题描述

我编写了一个 python 3 CLI 工具来修复库中照片的创建日期(请参见 此处

我使用 Pillow 加载和保存图像,使用 piexif 处理 exif 数据检索/修改。

我的问题是我只想更改图片中的EXIF数据而不是重新压缩整个图像。枕头保存似乎无法做到这一点。

我的问题是:

  1. 有什么更好的 exif 库可以用来仅处理 exif 数据(到目前为止,我尝试了 py3exiv2、pexif 和 piexif)?
  2. 如果没有,有没有办法指示 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)

标签: python-3.ximagejpegexif

解决方案


在你的情况下,我认为没有必要使用 Pillow。

exif_bytes = piexif.dump(exif_dict)
piexif.insert(exif_bytes, obj.path)

推荐阅读