我正在为我的应用程序使用烧瓶。我想将图像(由PIL动态生成)发送给客户端,而不保存在磁盘上。
任何想法如何做到这一点?
首先,你可以将映像保存到临时文件并删除本地文件(如果有):
from tempfile import NamedTemporaryFile from shutil import copyfileobj from os import remove tempFileObj = NamedTemporaryFile(mode='w+b',suffix='jpg') pilImage = open('/tmp/myfile.jpg','rb') copyfileobj(pilImage,tempFileObj) pilImage.close() remove('/tmp/myfile.jpg') tempFileObj.seek(0,0)
其次,将临时文件设置为响应(根据此stackoverflow问题):
from flask import send_file @app.route('/path') def view_method(): response = send_file(tempFileObj, as_attachment=True, attachment_filename='myfile.jpg') return response
是一个没有任何临时文件之类的版本:
def serve_pil_image(pil_img): img_io = StringIO() pil_img.save(img_io, 'JPEG', quality=70) img_io.seek(0) return send_file(img_io, mimetype='image/jpeg')
只需在代码中使用
@app.route('some/route/') def serve_img(): img = Image.new('RGB', ...) return serve_pil_image(img)