我需要在JPEG图像中添加任意数据。具体而言,我需要存储两个整数。从阅读有关EXIF数据的内容中,我认为不可能创建自定义字段,而必须使用EXIF标准字段。
然而,这篇文章Custom Exif Tags提到了一个
我从Google图像搜索中下载了一些随机图像,发现它们似乎没有EXIF数据,也许这是谷歌故意剥离的?我还用手机拍摄了一些图像,并发现它们有大量的EXIF数据(图像大小、GPS位置等)。
经过一些谷歌搜索,我找到了如何读取/转储EXIF数据的示例:
如果我在没有EXIF数据的图像上运行此代码,则会出现以下情况:
如果我对带有EXIF数据的图像运行此代码,我会得到一个字典,其中包含预期的EXIF字段。
现在我的问题是,如何添加EXIF数据?使用上面链接的文章中提到的UserComment 37510字段,以及此处https://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif/usercomment.html,并使用
如果我在
很明显,37510消息没有正确编写。我无论使用具有EXIF数据或一开始没有EXIF数据的图像,都会得到相同的空字典结果。在有人标记此为重复之前,我还尝试了这篇文章如何在存储在内存缓冲区中的JPEG中插入EXIF /其他元数据?中最高评分答案中提到的内容,并在尝试读取EXIF数据(空字典)时得到了相同的结果。我做错了什么?我该如何正确地使用37510或任何其他方法向图像添加自定义EXIF数据?
然而,这篇文章Custom Exif Tags提到了一个
UserComment
字段,我认为可以将字符串写入其中。如果这是唯一的选项,那没问题,因为我可以将两个整数存储在逗号分隔的字符串中,例如“2,5”来存储整数2和5,因此如果我只有一个字符串的存储空间,仍然足够。我从Google图像搜索中下载了一些随机图像,发现它们似乎没有EXIF数据,也许这是谷歌故意剥离的?我还用手机拍摄了一些图像,并发现它们有大量的EXIF数据(图像大小、GPS位置等)。
经过一些谷歌搜索,我找到了如何读取/转储EXIF数据的示例:
from PIL import Image
image = Image.open('image.jpg')
exifData = image._getexif()
print('exifData = ' + str(exifData))
如果我在没有EXIF数据的图像上运行此代码,则会出现以下情况:
exifData = None
如果我对带有EXIF数据的图像运行此代码,我会得到一个字典,其中包含预期的EXIF字段。
现在我的问题是,如何添加EXIF数据?使用上面链接的文章中提到的UserComment 37510字段,以及此处https://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif/usercomment.html,并使用
piexif
,这是目前为止我最好的尝试:from PIL import Image
import piexif
image = Image.open('image.jpg')
exifData = image._getexif()
if exifData is None:
exifData = {}
# end if
exifData[37510] = 'my message'
exifDataBytes = piexif.dump(exifData)
image.save('image_mod.jpg', format='jpeg', exif=exifDataBytes)
如果我在
image_mod.jpg
上运行上面的第一个代码,我会得到:exifData = {}
很明显,37510消息没有正确编写。我无论使用具有EXIF数据或一开始没有EXIF数据的图像,都会得到相同的空字典结果。在有人标记此为重复之前,我还尝试了这篇文章如何在存储在内存缓冲区中的JPEG中插入EXIF /其他元数据?中最高评分答案中提到的内容,并在尝试读取EXIF数据(空字典)时得到了相同的结果。我做错了什么?我该如何正确地使用37510或任何其他方法向图像添加自定义EXIF数据?