我只是创建一个Flask端点,该端点从文件系统返回一个图像。我已经和邮递员做了一些测试,效果很好。 这是执行此操作的指令:
return send_file(image_path, mimetype='image/png')
现在,我尝试同时发送几张图像,例如,在我的情况下,我尝试分别发回给定图像中出现的每个面孔。 任何人都可以知道如何执行此操作吗?
答案 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的解决方案都能提供帮助。