调整大小时保留PIL的exif数据(创建缩略图)

时间:2013-06-11 11:06:22

标签: python python-imaging-library exif

当我尝试使用PIL调整图像大小(缩略图)时,exif数据会丢失。

我需要做什么才能保留缩略图中的exif数据?当我搜索相同的内容时,得到了一些链接,但似乎都没有。

from PIL import  Image
import StringIO

file_path = '/home/me/img/a.JPG'
im = Image.open( file_path)
THUMB_SIZES = [(512, 512)]
for thumbnail_size in THUMB_SIZES:
    im.thumbnail( thumbnail_size, Image.ANTIALIAS)
    thumbnail_buf_string = StringIO.StringIO()
    im.save('512_' + "a", "JPEG")

原始图像有exif数据,但图像im(512_a.JPEG)没有。

2 个答案:

答案 0 :(得分:7)

我阅读了一些源代码,并找到了一种确保exif数据与缩略图一起保存的方法。

当您在PIL中打开jpg文件时,Image对象具有info属性,这是一个字典。其中一个键称为exif,它的值为字节字符串 - 来自图像的原始exif数据。您可以将此字节字符串传递给save方法,它应该将exif数据写入新的jpg文件:

from PIL import Image

size = (512, 512)

im = Image.open('P4072956.jpg')
im.thumbnail(size, Image.ANTIALIAS)
exif = im.info['exif']
im.save('P4072956_thumb.jpg', exif=exif)

要获得exif数据的人类可读版本,您可以执行以下操作:

from PIL import Image
from PIL.ExifTags import TAGS

im = Image.open('P4072956.jpg')
for k, v in im._getexif().items():
    print TAGS.get(k, k), v

答案 1 :(得分:2)

import pyexiv2
from PIL import  Image

file_path = '/home/../img/a.JPG'
metadata = pyexiv2.ImageMetadata(file_path)
metadata.read()
thumb = metadata.exif_thumbnail
thumb.set_from_file(file_path)
thumb.write_to_file('512_' + "a")
thumb.erase()
metadata.write()

现在我使用Phatch Image Inspector打开图像,我可以看到exif数据

相关问题