我按照以下方式在 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/