在flask中显示base64编码的MongoDB字段中的图像

时间:2016-02-15 17:29:31

标签: 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是图像的网址。

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)

1 个答案:

答案 0 :(得分:2)

过滤:

    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()//而不是缩略图