python - 在 Flask 中显示来自 Base64 编码的 MongoDB 字段的图像

标签 python mongodb flask base64 jinja2

我按照以下方式在 MongoDB 中存储图像并尝试显示该图像,但是我在执行此操作时遇到问题。我确信这取决于编码。

我使用jinja2在页面上的显示

<a src="image/png:base64, {{record.my_image | b64d}}">

b64d 是一个用于解码字符串字段的自定义过滤器。

from base64 import b64decode as b64decode
app.jinja_env.filters['b64d'] = lambda u: b64decode(u)

Mongo 中的字段如下所示:

"my_image": "/9j/4AAQSkZJRgABAQEASABIAAD/2wBDAAYEBQYFBAYGBQYHBwYIChAKCgkJChQODwwQFxQYGBcUFhYaHSUfGhsjHBYWICwgIyYnKSopGR8tMC0oMCUoKSj/2wB..."

我按照以下方式转换图像,其中 url 是图像的 url。

def ImgURL(url):
    img = urllib.urlopen(url).read()
    encoded_string = base64.b64encode(img)
    return encoded_string

但是,当我尝试在 Flask 中运行该页面时,我收到以下错误消息:

UnicodeDecodeError: 'ascii' codec can't decode byte 0x89 in position 0: ordinal not in range(128)

最佳答案

过滤器:

    from base64 import b64encode

app.jinja_env.filters['b64d'] = lambda u: b64encode(u).decode()

模板:

<img src="data:;base64,{{ record.my_image.thumbnail.read()|b64d }}">

假设,我的图像使用mongoengine的ImageField

其他需要使用 my_image.read()//而不是缩略图

关于python - 在 Flask 中显示来自 Base64 编码的 MongoDB 字段的图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35415483/

相关文章:

python - 如何使用 pandas 查找文本数据中单词的出现频率并将其写入 csv 文件

mongodb - ReactiveMongo:使用游标[BSONObjectID]查找查询

mongodb - 当你 'index' 一个 MongoDB 数据库时到底发生了什么?

python - 如何将用户属性传递给 python 函数/路由 -- Flask

Flask、MongoEngine、WTForms - 表单渲染错误

python - 浮点取模问题

python - 如何阻止pyplot弹出数字

python - 查找值的百分位数

python - 正在使用 Python 为 Cassandra Dumb 进行 MapReduce?

python - flask /夏娃 : Internal GET request with parameters