Приложение Flask - как отобразить изображение, созданное из приложения?

поэтому у меня есть код Python, который генерирует изображение внутри моего приложения Flask (может сделать это в JPG, PNG и т. д.), и я хочу отобразить это изображение в своем приложении Flask. проблема в том, что он должен жить в «статической» папке и «только для чтения», поэтому я не могу создать образ внутри него. могу ли я заставить url_for просматривать другие каталоги? или каким-то образом записать файл моего изображения в «статическую» папку во время выполнения?


person amirzau    schedule 12.10.2020    source источник


Ответы (1)


У меня была похожая проблема в одном из моих любимых проектов. Я не уверен, есть ли лучший способ сделать это, но мне удалось обойти это, закодировав изображение в base64 и передав тег изображения в html-файл напрямую через render_template(). По сути:

import io

def serve_pil_image(pil_img):

    img_io = io.BytesIO()
    pil_img.save(img_io, 'jpeg', quality=100)
    img_io.seek(0)
    img = base64.b64encode(img_io.getvalue()).decode('ascii')
    img_tag = f'<img src="data:image/jpg;base64,{img}" class="img-fluid"/>'
    return img_tag

И в вашем фляжном приложении:

from PIL import Image

@app.route('/')
def index():
    my_image = Image.open(image_file)
    img_tag=serve_pil_image(my_image)
    return render_template('index.html', image=img_tag)

И в вашем html:

{{image|safe}}
person fuzzy_logic    schedule 12.10.2020