3

我已阅读主题“ 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)
4

2 回答 2

6

基于蒂姆霍夫曼所说的,你的课程看起来像这样:

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)
于 2013-03-15T15:34:08.650 回答
2

您拥有的绘图对象不能传递回浏览器,因为它不是 png 本身。

您需要调用 draw.save() 并将 StringIO 对象传递给它以将文件写入。(您还需要提供文件类型)。那时你会self.response.write(the_stringio.getvalue())

于 2013-03-15T15:19:36.317 回答