Python 在flask中显示base64编码的MongoDB字段中的图像
我正在以以下方式在MongoDB中存储一个图像,并尝试显示该图像,但在执行此操作时遇到问题。我相信这是由于编码 使用Python 在flask中显示base64编码的MongoDB字段中的图像,python,mongodb,flask,base64,jinja2,Python,Mongodb,Flask,Base64,Jinja2,我正在以以下方式在MongoDB中存储一个图像,并尝试显示该图像,但在执行此操作时遇到问题。我相信这是由于编码 使用jinja2在页面上显示我的内容 <a src="image/png:base64, {{record.my_image | b64d}}"> Mongo中的字段如下所示: "my_image": "/9j/4AAQSkZJRgABAQEASABIAAD/2wBDAAYEBQYFBAYGBQYHBwYIChAKCgkJChQODwwQFxQYGBcUFhYaHSUfG
jinja2在页面上显示我的内容
<a src="image/png:base64, {{record.my_image | b64d}}">
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()//而不是缩略图浏览器是否有责任解码b64数据?这就是为什么要在src
标记中指定编码。@mgilson我在没有过滤器的情况下尝试过,但在屏幕上看不到任何呈现。
<img src="data:;base64,{{ record.my_image.thumbnail.read()|b64d }}">