不重新压缩JPEG图像,修改exif数据

3
我写了一个Python 3的CLI工具来修复图库中照片的创建日期(请参见这里)。我使用Pillow加载和保存图片,使用piexif处理EXIF数据的检索/修改。
我的问题是,我只想更改图片中的EXIF数据,而不重新压缩整个图片。看起来Pillow的保存功能不能实现此操作。
我的问题如下:
  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)

为什么不直接使用exiftool呢? - Mark Setchell
听起来是个不错的选择。实际上,有人已经在这里做过了:https://dev59.com/h2kw5IYBdhLWcg3wMHkY - Kodsama
1个回答

2

在您的情况下,我认为不需要使用Pillow。

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

是的,但Pillow会重新压缩图像以写入exif数据吗? 我现在正在使用save,insert只是触及exif数据吗? - Kodsama

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接