当我尝试使用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())
调整后的图片没有exif数据
注意:我自己还没有这样做过,但据我所知,PIL只允许读取exif标记,但不能写入它们。您可能需要geexiv2或pyexiv2来将标记写入缩略图。
更新:我很好奇,自己尝试了一下:D如果我说对了,你只是想复制元数据而不做进一步的修改。
这仍然是粗糙的,但似乎工作:
import os
import Image
import pyexiv2
fp = '/home/klaus/workspace'
fn = 'img_2380.jpg'
full_path = os.path.join(fp, fn)
print full_path
im = Image.open(full_path)
size = 512, 512
im.thumbnail(size, Image.ANTIALIAS)
im.save('bla.jpg', 'JPEG')
oldmeta = pyexiv2.ImageMetadata(full_path)
oldmeta.read()
# read metadata of the original file
newmeta = pyexiv2.ImageMetadata('bla.jpg')
newmeta.read()
# read metadata of the new file
# yes, there aren't any, but this is crucial!
# you need this class as the target for copying!
oldmeta.copy(newmeta)
newmeta.write()
# don't forget to write the data to the new file
顺便说一句:谢谢你有趣的问题!