如何将base64和return中的多张图片转换成json格式显示在html中?
How to convert multiple image in base64 and return in json format and display in html?
我想将多张图片转换为 base64 和 return json 格式。同时,我想在我的 html 模板中显示。当我 运行 我的代码运行完美时,但结果只显示某些结果。下面附上我的结果。我也无法在 html 模板中显示我的 json 数据。在这里附上我的代码。
app.py
@app.route("/api/images")
def get_images():
directory = os.listdir('C:/Users/HP/Miniconda3/envs/count_vechicle/coding/images')
os.chdir('C:/Users/HP/Miniconda3/envs/count_vechicle/coding/images')
data={}
for file in directory:
base = os.path.basename(file)
data["label"] = base
open_file = open(file,'rb')
image_read = open_file.read()
image_64_encode = base64.encodebytes(image_read)
data["data"] = image_64_encode.decode('ascii')
final_data = json.dumps(data,sort_keys = True, indent = 4, separators = (',', ': '))
print(final_data)
#return final_data
return render_template("images.html", final_data=final_data)
Images.html
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<h1 class="logo">Results</h1>
<ul>
{% for data in final_data %}
<li>{{final_data}}</li>
<img src={{data.da}}>
{% endfor %}
</ul>
</body>
</html>
您的代码中存在多个问题。首先,您应该收集所有文件,然后 return 模板,但现在您的代码 returns 在阅读第一张图片后:
app.py
@app.route("/api/images")
def get_images():
directory = os.listdir('C:/Users/HP/Miniconda3/envs/count_vechicle/coding/images')
os.chdir('C:/Users/HP/Miniconda3/envs/count_vechicle/coding/images')
flist = list()
for file in directory:
data = dict()
base = os.path.basename(file)
data["label"] = base
open_file = open(file,'rb')
image_read = open_file.read()
image_64_encode = base64.encodebytes(image_read)
data["data"] = image_64_encode.decode('ascii')
flist.append(data)
final_data = json.dumps({'files':flist}, sort_keys=True, indent=4, separators=(',', ': '))
return render_template("images.html", final_data=final_data)
当您在 html 模板的图像标记源中嵌入 base64 图像时,您需要说明它是 base64 图像。因此,对于 Jpeg 图片,您可以使用:
Images.html
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<h1 class="logo">Results</h1>
<ul>
{% for data in final_data.files %}
<li>{{data.label}}</li>
<li><img alt="embedded" src="data:image/jpg;base64,{{data.data}}"/></li>
{% endfor %}
</ul>
</body>
</html>
but the result only display certain result only
将return
放入for循环中,会在第一次迭代后立即退出for循环。您需要制作一个列表,然后在每次迭代时附加新数据。
我想将多张图片转换为 base64 和 return json 格式。同时,我想在我的 html 模板中显示。当我 运行 我的代码运行完美时,但结果只显示某些结果。下面附上我的结果。我也无法在 html 模板中显示我的 json 数据。在这里附上我的代码。
app.py
@app.route("/api/images")
def get_images():
directory = os.listdir('C:/Users/HP/Miniconda3/envs/count_vechicle/coding/images')
os.chdir('C:/Users/HP/Miniconda3/envs/count_vechicle/coding/images')
data={}
for file in directory:
base = os.path.basename(file)
data["label"] = base
open_file = open(file,'rb')
image_read = open_file.read()
image_64_encode = base64.encodebytes(image_read)
data["data"] = image_64_encode.decode('ascii')
final_data = json.dumps(data,sort_keys = True, indent = 4, separators = (',', ': '))
print(final_data)
#return final_data
return render_template("images.html", final_data=final_data)
Images.html
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<h1 class="logo">Results</h1>
<ul>
{% for data in final_data %}
<li>{{final_data}}</li>
<img src={{data.da}}>
{% endfor %}
</ul>
</body>
</html>
您的代码中存在多个问题。首先,您应该收集所有文件,然后 return 模板,但现在您的代码 returns 在阅读第一张图片后:
app.py
@app.route("/api/images")
def get_images():
directory = os.listdir('C:/Users/HP/Miniconda3/envs/count_vechicle/coding/images')
os.chdir('C:/Users/HP/Miniconda3/envs/count_vechicle/coding/images')
flist = list()
for file in directory:
data = dict()
base = os.path.basename(file)
data["label"] = base
open_file = open(file,'rb')
image_read = open_file.read()
image_64_encode = base64.encodebytes(image_read)
data["data"] = image_64_encode.decode('ascii')
flist.append(data)
final_data = json.dumps({'files':flist}, sort_keys=True, indent=4, separators=(',', ': '))
return render_template("images.html", final_data=final_data)
当您在 html 模板的图像标记源中嵌入 base64 图像时,您需要说明它是 base64 图像。因此,对于 Jpeg 图片,您可以使用:
Images.html
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<h1 class="logo">Results</h1>
<ul>
{% for data in final_data.files %}
<li>{{data.label}}</li>
<li><img alt="embedded" src="data:image/jpg;base64,{{data.data}}"/></li>
{% endfor %}
</ul>
</body>
</html>
but the result only display certain result only
将return
放入for循环中,会在第一次迭代后立即退出for循环。您需要制作一个列表,然后在每次迭代时附加新数据。