【问题标题】:How to display PIL Image dynamically如何动态显示 PIL 图像
【发布时间】:2020-05-31 17:32:54
【问题描述】:

我想使用 PIL 库裁剪我的图像文件并使用 Flask 和 Jinja 显示它。

我试过这段代码:

@bp.route('/media/<fname>')
def fetch_media(fname):
...
    image = Image.open(path)
    cropped_image = image.crop(box)
    return cropped_image

这给出了一个类型错误:

视图函数未返回有效响应。返回类型 必须是字符串、字典、元组、响应实例或可调用的 WSGI, 但它是一个图像。

如何将图像返回到 html 页面?

【问题讨论】:

  • 不在计算机上,但您需要将PNG 类型的cropped_image.save() 放入BytesIO 对象,然后返回bytesio.getvalue()Response,MIME 类型为image/png
  • 您可以在此处查看将图像保存到内存的 BytesIO 方面...stackoverflow.com/a/52281257/2836621

标签: jinja2 python-imaging-library


【解决方案1】:

未经测试,但肯定非常接近:

import io
from PIL import Image
from flask import Response

....
....
buffer = io.BytesIO()
cropped_image.save(buffer, format="PNG")
return Response(buffer.getvalue(), mimetype='image/png')

【讨论】:

  • 是的,这很漂亮并且有效,谢谢!只有您的示例中缺少 from flask import Response 子句
  • 我现在已经添加了它 - 我假设你已经熟悉所有 flask 的东西,因为你已经在使用它了 :-) 祝你的项目好运。
猜你喜欢
  • 1970-01-01
  • 2022-01-23
  • 1970-01-01
  • 2012-09-16
  • 1970-01-01
  • 2020-03-04
  • 2014-12-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多