如何用烧瓶返回多个图像

时间:2020-09-25 13:58:18

标签: python api flask python-requests endpoint

我只是创建一个Flask端点,该端点从文件系统返回一个图像。我已经和邮递员做了一些测试,效果很好。 这是执行此操作的指令:

return send_file(image_path, mimetype='image/png')

现在,我尝试同时发送几张图像,例如,在我的情况下,我尝试分别发回给定图像中出现的每个面孔。 任何人都可以知道如何执行此操作吗?

2 个答案:

答案 0 :(得分:1)

取自this answer,您可以压缩图像并将其发送:

这是您使用Zip files所需的所有代码。它会 返回包含所有文件的zip文件。

在我的程序中,我要压缩的所有内容都位于output文件夹中,因此我 只需使用os.walk并将其放入write的zip文件中即可。之前 返回file,如果您没有关闭,则需要关闭 它将返回一个空文件。

import zipfile
import os
from flask import send_file

@app.route('/download_all')
def download_all():
    zipf = zipfile.ZipFile('Name.zip','w', zipfile.ZIP_DEFLATED)
    for root,dirs, files in os.walk('output/'):
        for file in files:
            zipf.write('output/'+file)
    zipf.close()
    return send_file('Name.zip',
            mimetype = 'zip',
            attachment_filename= 'Name.zip',
            as_attachment = True)

html中,我简单地称为路由:

<a href="{{url_for( 'download_all')}}"> DOWNLOAD ALL </a>

我希望这对某人有所帮助。 :)

答案 1 :(得分:1)

解决方案是将每张图片编码为字节,将其附加到列表中,然后返回结果(来源:How to return image stream and text as JSON response from Python Flask API)。这是代码:

import io
from base64 import encodebytes
from PIL import Image
from flask import jsonify
from Face_extraction import face_extraction_v2

def get_response_image(image_path):
    pil_img = Image.open(image_path, mode='r') # reads the PIL image
    byte_arr = io.BytesIO()
    pil_img.save(byte_arr, format='PNG') # convert the PIL image to byte array
    encoded_img = encodebytes(byte_arr.getvalue()).decode('ascii') # encode as base64
    return encoded_img



@app.route('/get_images',methods=['GET'])
def get_images():

    ##reuslt  contains list of path images
    result = get_images_from_local_storage()
    encoded_imges = []
    for image_path in result:
        encoded_imges.append(get_response_image(image_path))
    return jsonify({'result': encoded_imges})

我希望我的解决方案以及@Mooncrater的解决方案都能提供帮助。