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 文件完全一样。
我使用 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 文件完全一样。