【问题标题】:Change EXIF data on JPEG without altering picture更改 JPEG 上的 EXIF 数据而不更改图片
【发布时间】:2022-04-04 14:33:50
【问题描述】:

我使用 piexif 更改 jpeg 上的 exif 来读取和写入 exif 数据,这似乎工作正常。问题是当我读写 jpeg 时,即使我不更改字节,它也会保存具有不同像素的图片和读取的图片。我需要它是完全相同的像素。我理解这是因为 jpeg 是一种有损格式,但我发现的唯一方法是将其保存为 png,然后使用 Mac Preview 将其导出为 jpeg,这并不好,因为我有数百张图片.

def adjust_img(path):
   img = PIL.Image.open(path)
   exif_dict = piexif.load(img.info['exif'])
   new_exif = adjust_exif(exif_dict)
   exif_bytes = piexif.dump(new_exif)
   pc = path.split('/')
   stem = '/'.join(pc[:-1])
   img.save('%s/_%s' % (stem,pc[-1]), "JPEG", exif=exif_bytes, quality=95, optimize=False)

我怎样才能保留图片并只更改 exif?

【问题讨论】:

  • 使用exiftool。通过 homebrew 使用 brew install exiftool 安装
  • 最终使用了这个。谢谢!

标签: python image python-imaging-library jpeg


【解决方案1】:

https://piexif.readthedocs.io/en/latest/functions.html

exif_dict = piexif.load(path)
new_exif = adjust_exif(exif_dict)
exif_bytes = piexif.dump(new_exif)
piexif.insert(exif_bytes, path)

【讨论】:

  • 如果你在这里搜索过,在使用这个库之前要小心。它多年来没有更新,并且有很多未解决的问题。如果没有大量测试,我不会相信它会修改用户文件。
【解决方案2】:

Exiftool 通常是要走的路。但也许你真的需要在自己的程序中编辑 EXIF。

https://pypi.org/project/pyexiv2/ 尝试 pyexiv2。 它最近得到维护并且运行良好。一个例子:

import sys
from pyexiv2 import Image as ImgMeta

DTO_KEY = 'Exif.Photo.DateTimeOriginal'
filename = sys.argv[1]


with ImgMeta(filename) as img_meta:

    exif = img_meta.read_exif()
    try:
        dto = exif[DTO_KEY]
    except KeyError:
        raise

    # Convert dto to DateTime, add TimeDelta, format as string
    # Here we skip all that to show we can simply modify it:
    new_dto_str = dto + 'Z'

    img_meta.modify_exif({DTO_KEY: new_dto_str})

【讨论】:

    猜你喜欢
    • 2023-02-21
    • 1970-01-01
    • 1970-01-01
    • 2020-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多