如何 return 来自 cherrypy 的二维码(枕头图像)作为 PNG 而不将其保存为静态文件?

How to return a qrcode (pillow image) from cherrypy as PNG without saving it as a static file?

我正在尝试使用 this 二维码库生成 png 包含二维码。我想使用 cherrypy 来提供这张图片 动态地。

qrcode借鉴了PIL/Pillow库,所以我强烈怀疑 下面代码中的 img 与枕头图像的工作方式相同: 当我通过手动打印来测试它时,我得到了这个。

>>> print(img)
<qrcode.image.pil.PilImage object at 0xcb2c90>

这是我在 cherrypy 中动态创建二维码的代码。 此代码无效。

@cp.expose
def qrcode(self, ticketnumber = 'unknown'):

    img = qrcode.make(ticketnumber)

    # this works:
    # img.save('local.png')

    cp.response.headers['Content-Type'] = "image/png"

    buffer = StringIO.StringIO()
    # this is a guess and not working
    img.save(buffer, format='PNG')
    buffer.seek(0)

    return file_generator(buffer)

知道如何 return PIL/pillow 图像而不将其保存为静态文件吗?

经过更多谷歌搜索后,我得到了正确的语法。 下面的例子有效

@cp.expose
def qrcode(self, ticketnumber = 'unknown'):
    img = qrcode.make(ticketnumber)
    cp.response.headers['Content-Type'] = "image/png"
    buffer = StringIO.StringIO()
    img.save(buffer, 'PNG')
    return buffer.getvalue()

对于python3:注意没有StringIO了,参考this post

将上面的 buffer = StringIO.StringIO() 替换为 buffer = io.BytesIO() 适合我。