我试图动态生成Mapnik渲染在一个酒瓶应用程序,并返回图像。我让它像这样工作:
from io import BytesIO
from flask import Flask, send_file
import mapnik
app = Flask(__name__)
@app.route("/")
def serve_image():
image = mapnik.Image(600, 300)
mp = mapnik.Map(600, 300)
mp.background = mapnik.Color('steelblue')
mapnik.render(mp, image)
# I would like to avoid the next two lines
image.save('test.png', 'png')
with open('test.png') as new_image:
ret = BytesIO(new_image.read())
return send_file(ret, mimetype='image/png')注意:我将文件保存到磁盘(在Mapnik的内部C++工作中完成)和(Python)从磁盘读取文件。我不知道如何以更直接的方式将Mapnik图像放入Python文件缓冲区。
提示:我主要尝试使用Mapnik.Image.tostring方法,但没有成功。我使用较早的Python2.7绑定,因为在Python 3中安装它们很痛苦。
发布于 2019-04-17 20:29:49
我找到了这个解决方案
from flask import Flask, Response
import mapnik
app = Flask(__name__)
@app.route("/")
def serve_image():
image = mapnik.Image(600, 300)
mp = mapnik.Map(600, 300)
mp.background = mapnik.Color('steelblue')
mapnik.render(mp, image)
return Response(image.tostring('png'), mimetype='img/png')但是,在我的应用程序中,它似乎要慢一些。
https://stackoverflow.com/questions/55698033
复制相似问题