多次被问到如何调整图像大小并保留现有的 exif 数据。我可以使用 PIL 轻松做到这一点:
from PIL import Image
im = Image.open("image.jpeg")
exif = im.info['exif']
# process the image, for example resize:
im_resized = im.resize((1920, 1080), resample=PIL.Image.LANCZOS)
im_resized.save("resized.jpeg", quality=70, exif=exif)
我想知道是否有一种方法可以保留原始图像中的 XMP 元数据? XMP 中有很多 GPS 数据,我希望将其保留在调整大小的版本中。
在 枕头11.0 现在可以像复制 Exif 一样复制 XMP:
new_img.save(
filename,
exif=old_img.info.get('exif'),
xmp=old_img.info.get('xmp'),
)
即使是后继 Pillow 也无法读取 XMP(和 IPTC)。此外,您并没有真正保留任何内容 - 您创建一个全新的文件并添加其他 EXIF 数据的副本(包括现在可能无效的信息,如宽度/高度)。
JFIF 文件不是黑魔法 - 它们的文件格式可以很容易地解析; XMP 最有可能在 APP1 段中找到(就像 EXIF 一样)。在极少数情况下,它跨越多个段。您可以首先使用 PIL/Pillow 创建文件,然后修改它 - 插入额外的段很简单,不需要额外的工作。