python3:PIL/pillow和Django:将文本转换为图像并显示在页面上

python3:PIL/pillow和Django:将文本转换为图像并显示在页面上,python,django,python-3.x,django-templates,python-imaging-library,Python,Django,Python 3.x,Django Templates,Python Imaging Library,我正在尝试使用pillow和Django将文本字段转换为图像 文本是动态创建的(因此我无法事先创建所有文本,将其转换为图像并上载它们)。每个图像必须“动态”创建,然后显示在正确的页面上 我理解(也许?)正确的方法是使用IO包将图片加载到内存中,然后将其传递到django html以显示在那里。但我在执行上遇到了麻烦 我对Django/Python编程非常陌生,所以我找了个人来帮助我,他告诉我要做这样的事情: def render(txt, fontsize=20, encoding=None):

我正在尝试使用pillow和Django将文本字段转换为图像

文本是动态创建的(因此我无法事先创建所有文本,将其转换为图像并上载它们)。每个图像必须“动态”创建,然后显示在正确的页面上

我理解(也许?)正确的方法是使用IO包将图片加载到内存中,然后将其传递到django html以显示在那里。但我在执行上遇到了麻烦

我对Django/Python编程非常陌生,所以我找了个人来帮助我,他告诉我要做这样的事情:

def render(txt, fontsize=20, encoding=None):
   txt = txt.strip()
   lines = len(txt.splitlines()) or 1

   font = ImageFont.truetype(ARIAL_TTF, fontsize)
   width, height = font.getsize(txt)

   image = Image.new("RGBA", (width, height*lines), (232,232,232))
   draw = ImageDraw.Draw(image)

   draw.text((0, 0), txt, (0, 0, 0), font=font)

   temp = six.StringIO()
   image.save(temp, 'png')
   if encoding:
        return temp.encode(encoding)
   return temp.getvalue()
问题是StringIO()生成的StringIO对象不能被image.save作为文件(名称)读取——至少这是我收到的错误消息:“expected String Get Bytes”。显然,上面的代码是在Python2中运行的,但我现在没有选择(其他依赖项只适用于Python3)

我尝试使用以下方法规避此问题:

image.save(temp.getvalue(),'png')

但是它告诉我文件“”不存在(我想这是有道理的)。

而不是使用
StringIO
use。像这样导入:
来自io导入BytesIO
我刚才在这里写了一个类似问题的答案:。忽略HTML部分。“视图”代码可能会有帮助。您的回答让我找到了解决方案!谢谢!(你唯一的一个小错误是我必须在Python3中使用BytesIO和“倒带”而不是StringIO)