在内存映像到Zip文件

时间:2014-02-12 16:52:00

标签: python django python-3.x pillow bytesio

我写了这段代码:

with Image.open(objective.picture.read()) as image:
    image_file = BytesIO()
    exifdata = image.info['exif']
    image.save(image_file, 'JPEG', quality=50, exif=exifdata)
    zf.writestr(zipped_filename, image_file)

应该打开存储在我模型中的图像(这是在Django应用程序中)。我想在将图像文件添加到zipfile(zf)之前降低图像文件的质量。因此我决定使用BytesIO来防止在磁盘上写入无用的文件。虽然我在这里收到错误。它说:
 embedded NUL character
有人可以帮我解决这个问题吗?我不明白发生了什么。

1 个答案:

答案 0 :(得分:1)

嗯,我有点愚蠢。 objective.picture.read()返回一个字节字符串(实际上是长字节字符串...)所以我不应该使用Image而是ImageFile.Parser()并将该字节字符串提供给解析器,以便它可以返回我可以使用的图像。这是代码:

from PIL import ImageFile
from io import BytesIO

p = ImageFile.Parser()
p.feed(objective.picture.read())
image = p.close()
image_file = BytesIO()
exifdata = image.info['exif']
image.save(image_file, 'JPEG', quality=50, exif=exifdata)
# Here zf is a zipfile writer
zf.writestr(zipped_filename, image_file.getvalue())

close()实际上返回从bytestring解析的图像 以下是文档:The ImageFile Documentation