我按照以下方式在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)
答案 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()//而不是缩略图