在不改变图片的情况下更改 JPEG 上的 EXIF 数据
Change EXIF data on JPEG without altering picture
我使用 piexif 更改 jpeg 上的 exif 以读取和写入 exif 数据,这似乎工作正常。问题是当我读写 jpeg 时,即使我不更改字节,它也会保存具有不同像素的图片和读取的图片。我需要它是完全相同的像素。我知道这是因为 jpeg 是一种有损格式,但我发现它的唯一方法是将它保存为 png,然后将其导出为带有 Mac 预览的 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?
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)
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})
我使用 piexif 更改 jpeg 上的 exif 以读取和写入 exif 数据,这似乎工作正常。问题是当我读写 jpeg 时,即使我不更改字节,它也会保存具有不同像素的图片和读取的图片。我需要它是完全相同的像素。我知道这是因为 jpeg 是一种有损格式,但我发现它的唯一方法是将它保存为 png,然后将其导出为带有 Mac 预览的 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?
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)
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})