使用PIL在App Engine上绘制图像



我已经阅读了"应用程序引擎,PIL和覆盖文本"的主题。

下面的代码将显示一个破碎的图像,我应该如何纠正?

class TestImg(webapp2.RequestHandler):
    def get(self):
        text_img = Image.new('RGBA', (800,600), (0, 0, 0, 0))
        draw = ImageDraw.Draw(text_img)
        draw.text((0, 0), 'HELLO TEXT', font=ImageFont.load_default())
        self.response.headers['Content-Type'] = "image/png"
        self.response.write(draw)

根据Tim Hoffman所说的,你的类应该是这样的:

import StringIO
class TestImg(webapp2.RequestHandler):
    def get(self):
        text_img = Image.new('RGBA', (800,600), (0, 0, 0, 0))
        draw = ImageDraw.Draw(text_img)
        draw.text((0, 0), 'HELLO TEXT', font=ImageFont.load_default())
        output = StringIO.StringIO()
        text_img.save(output, format="png")
        text_layer = output.getvalue()
        output.close()
        self.response.headers['Content-Type'] = 'image/png'
        self.response.write(text_layer)

你的绘制对象不能被传递回浏览器,因为它不是png。

你需要调用draw.save()并传递给它一个StringIO对象来写入文件。(您还需要提供一个文件类型)。然后是self.response.write(the_stringio.getvalue())

最新更新