4

when I try to resize(thumbnail) an image using PIL , it destroys the exif data associated with the image, How can I save it.

I resize the image and upload it to the cloud as image buffer.

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())

The resized image has no exif data.

4

1 に答える 1

4

注:私はまだこれを自分で行っていませんが、私の知る限り、PILはexifタグの読み取りのみを許可し、書き込みはできません. タグをサムネイルに書き込むには、おそらく gexiv2 または 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

ところで: 興味深い質問をありがとう!

于 2013-06-12T08:55:48.283 に答える