当我尝试使用 PIL 调整图像大小(缩略图)时,它会破坏与图像关联的 exif 数据,我该如何保存它。
我调整图像大小并将其作为图像缓冲区上传到云端。
file_path = '...'
file_name = '...'
im = Image.open( file_path )
size =(512,521)
im.thumbnail( size, Image.ANTIALIAS)
thumbnail_buf_string = StringIO.StringIO()
file_save_extension = 'JPEG'
im.save(thumbnail_buf_string, format=file_save_extension)
upload_to_cloud('512_' + file_name , thumbnail_buf_string.getvalue())
Run Code Online (Sandbox Code Playgroud)
调整大小后的图像没有 exif 数据。
我需要向 JPEG 图像添加任意数据。具体来说,我需要存储两个整数。通过阅读有关 EXIF 数据的内容,我的印象是不可能创建自己的自定义字段,而是必须使用 EXIF 标准字段。
然而,这篇文章“自定义 Exif 标签”UserComment
提到了一个我收集的可以写入字符串的字段。如果这是唯一的选择,那很好,因为我可以在逗号分隔的字符串中存储两个整数,例如 '2,5' 来存储整数 2 和 5,所以如果我只有一个存储字符串可以使用,它仍然足够。
我从 Google 图片搜索中随机下载了一些图片,发现它们似乎没有 EXIF 数据,也许是 Google 故意删除的?我还用手机拍了几张照片,发现正如预期的那样,它们有大量的 EXIF 数据(图像大小、GPS 位置等)。
经过一番 Google 搜索后,我发现了这个关于如何读取/转储 EXIF 数据的示例:
from PIL import Image
image = Image.open('image.jpg')
exifData = image._getexif()
print('exifData = ' + str(exifData))
Run Code Online (Sandbox Code Playgroud)
这非常有效,如果我在没有 EXIF 数据的图像上运行它,我会得到:
exifData = None
Run Code Online (Sandbox Code Playgroud)
如果我在带有 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 = …
Run Code Online (Sandbox Code Playgroud)