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