Mapnik 到 Flask
Mapnik to Flask
我正在尝试在 Flask 应用程序和 return 图像中动态生成 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
方法但没有成功。我正在使用较旧的 Python 2.7 绑定,因为在 Python 3.
中安装它们很麻烦
我找到了这个解决方案
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')
但在我的应用程序上下文中它似乎更慢
我正在尝试在 Flask 应用程序和 return 图像中动态生成 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
方法但没有成功。我正在使用较旧的 Python 2.7 绑定,因为在 Python 3.
我找到了这个解决方案
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')
但在我的应用程序上下文中它似乎更慢