繁体   English   中英

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

[英]Preserve exif data of image with PIL when resize(create thumbnail)

当我尝试使用 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) 没有。

在我的项目中,我和你遇到了同样的问题。 谷歌搜索后,我找到了piexif库。 它有助于Pilowexif数据保存到缩略图。

您可以使用以下源代码:

from PIL import  Image
import piexif
import StringIO


file_path = '/home/me/img/a.JPG'
im = Image.open( file_path)

# load exif data
exif_dict = piexif.load(im.info["exif"])
exif_bytes = piexif.dump(exif_dict)

THUMB_SIZES = [(512, 512)]
for thumbnail_size in THUMB_SIZES:
    im.thumbnail( thumbnail_size, Image.ANTIALIAS)
    thumbnail_buf_string = StringIO.StringIO()
    # save thumbnail with exif data
    im.save('512_' + "a", "JPEG", exif=exif_bytes)

注意:我使用的是 python 3.4 和 ubuntu 14.04

我通读了一些源代码,并找到了一种方法来确保 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
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()

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM