使用 Python 调整图像大小并保留 EXIF 和 XMP 元数据

问题描述

很多次被问到如何调整图像大小并保留现有的 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 数据,我希望将其保留在调整大小的版本中。

解决方法

甚至不是 successor Pillow can read XMP (and IPTC)。此外,您并没有真正保留任何内容 - 您创建了一个全新的文件并添加了其他 EXIF 数据的副本(包括现在可能无效的信息,例如宽度/高度)。

JFIF 文件不是魔法——它们的 file format 可以很容易地解析; XMP is most likely found in an APP1 segment(就像 EXIF)。在极少数情况下,它跨越多个段。您可以先使用 PIL/Pillow 创建您的文件,然后对其进行修改 - 插入额外的段是微不足道的,不需要额外的工作。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...