Python - 瓶子和枕头 - Return 图片到浏览器

Python - Bottle & Pillow - Return image to browser

我使用 Bottle Framework 和 Pillow,我想动态生成图像并使用端点将其显示给浏览器。

我有:

try:
    img = Image.open("images/template.png")
    
    draw = ImageDraw.Draw(img)
    font = ImageFont.truetype("fonts/arial.ttf", 40)
    
    draw.text((23, 62), "Text", "#000", font=font)
    
    # image save works
    img.save("test_save.png")
    
    response.content_type = 'image/png'
    
    return io.BytesIO(img.tobytes())
except OSError as exception:
    print(exception)
    pass

保存的图像是完美的,但显示给浏览器的图像只是一个尺寸不佳的空方块。

我查看了 Whosebug 以查找我写的内容,但我想我错过了什么?

我不在电脑前测试我的代码,但你需要 return 一个 PNG 编码的图像,所以你需要告诉 PIL 来写进入 BytesIO 而不是磁盘。类似于:

from io import BytesIO

# Write PIL Image to in-memory PNG
membuf = BytesIO()
img.save(membuf, format="png") 

...您现在可以发送 membuf.getvalue(),如果您检查前几个字节,它们看起来与您从磁盘转储任何其他常规 PNG 文件完全一样。