我正在尝试使用枕头和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读取为文件(名称) - 至少这是我得到的错误信息:"期望字符串得到字节&#34 ;。显然,上面的内容在Python2中运行,但我现在没有选择(其他依赖只适用于Python3)。
我试图通过使用:
来避免这种情况image.save(temp.getvalue(),'png')
然后它告诉我文件""不存在(这是有道理的,我猜)。