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')

但在我的应用程序上下文中它似乎更慢