Python PIL:如何将PNG图像写入字符串

2024-03-29 01:28:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我已经用PIL生成了一个图像。如何将其保存到内存中的字符串中? Image.save()方法需要一个文件。

我想在字典里存几张这样的图片。


Tags: 文件方法内存字符串图像image字典pil
3条回答

某事物的解决办法对我不起作用 因为在。。。

Imaging/PIL/Image.pyc line 1423 -> raise KeyError(ext) # unknown extension

它试图从文件名中的扩展名检测格式,而在StringIO中不存在该扩展名

通过在参数中自己设置格式,可以绕过格式检测

import StringIO
output = StringIO.StringIO()
format = 'PNG' # or 'JPEG' or whatever you want
image.save(output, format)
contents = output.getvalue()
output.close()

对于Python3,需要使用BytesIO:

from io import BytesIO
from PIL import Image, ImageDraw

image = Image.new("RGB", (300, 50))
draw = ImageDraw.Draw(image)
draw.text((0, 0), "This text is drawn on image")

byte_io = BytesIO()

image.save(byte_io, 'PNG')

阅读更多:http://fadeit.dk/blog/post/python3-flask-pil-in-memory-image

您可以使用^{}类来获取字符串的包装器,这些字符串的行为类似于文件。BytesIO对象提供与文件相同的接口,但将内容保存在内存中:

import io

with io.BytesIO() as output:
    image.save(output, format="GIF")
    contents = output.getvalue()

必须使用format参数显式指定输出格式,否则PIL将在尝试自动检测时引发错误。

如果从文件加载图像,它有一个包含原始文件格式的^{}参数,因此在本例中可以使用format=image.format

在引入io模块之前的旧Python 2版本中,您应该使用^{}模块。

相关问题 更多 >