Jis*_*son 16 python exif python-imaging-library
当我尝试使用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")
Run Code Online (Sandbox Code Playgroud)
原始图像具有exif数据,但图像im(512_a.JPEG)不具有exif数据.
Ngu*_*Son 10
在我的项目中,我遇到了同样的问题.搜索谷歌后,我找到了piexif图书馆.它有助于Pilow将exif数据保存到缩略图.
您可以使用以下源代码:
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)
Run Code Online (Sandbox Code Playgroud)
注意:我使用的是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)
Run Code Online (Sandbox Code Playgroud)
要获得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
Run Code Online (Sandbox Code Playgroud)
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()
Run Code Online (Sandbox Code Playgroud)
现在我使用(Patch Image Inspector)打开图像,我可以看到exif数据