Как преобразовать несколько изображений в base64 и вернуть в формате json и отобразить в html? - PullRequest
0 голосов
/ 12 февраля 2020

Я хочу конвертировать несколько изображений в base64 и вернуть в формате json. В то же время я хочу отображать в моих html шаблонах. Когда я запускаю свой код, он работает отлично, но результат отображает только определенный результат. Ниже я прилагаю свой результат. Я также не могу отобразить мои json данные в html шаблонах. Здесь я прилагаю свой код.

enter image description here

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)

Изображения. 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>

Ответы [ 2 ]

1 голос
/ 12 февраля 2020

, но результат отображает только определенный результат

Помещение return внутрь для l oop приведет к выходу для l oop сразу после первой итерации. Вам нужно составить список, а затем добавлять новые данные на каждую итерацию.

1 голос
/ 12 февраля 2020

В вашем коде несколько проблем. Сначала вы должны собрать все файлы, а затем вернуть шаблон, но теперь ваш код возвращается после прочтения первого изображения:

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)

Когда вы Встраивая base64image в источник тега image в шаблоне html, вы должны отметить, что это base64image. Например, для изображений в формате JPEG вы можете использовать:

Изображения. 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...