更改exif数据而不重新压缩JPEG图像

时间:2018-06-02 07:28:57

标签: python-3.x image jpeg exif

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

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

我遇到的问题是我只想更改图片中的EXIF数据而不是重新压缩整个图像。似乎Pillow save不能那样做。

我的问题是:

  1. 我可以使用任何更好的exif库来玩exif数据(到目前为止我试过py3exiv2,pexif和piexif)?
  2. 如果没有,有没有办法向Pillow表明只有在保存时才更改图像的exif而不重新压缩?
  3. 谢谢!

    以下是我目前用于更改创建日期的代码:

    # 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)
    

1 个答案:

答案 0 :(得分:1)

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

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