我已经构建了一个使用JSON响应的Python Flask App API。我希望现在的响应包括JSON和图像。
如何创建一个传递JSON数据和图像的HTTP响应?
对于JSON,我使用return jsonify({some dict})
。
对于图像,我已阅读以使图像成为StringIO对象,然后在其上使用.get_value()
并将StringIO.get_value()
作为参数传递给response()
并返回那。图像由matplotlib生成(参见https://gist.github.com/wilsaj/862153)
虽然http响应无法发送多种内容类型,但传递图像的方式似乎意味着它只是文本。真的吗?如果是这样,图像是否也可以简单地包装在JSON中,作为与传递的其他JSON数据分开的一个键?
这些帖子似乎表明是,图像可以通过带有字节数组的JSON传输。
How can I add an image file into json object?
Binary Data in JSON String. Something better than Base64
我已经读过,通常最好将URL传递给JSON中的图像,然后在客户端下载图像。但是我的图像是动态生成的,不需要持久存在,而且我不必将图像保存为文件并尽可能地提供它们,那么Byte数组似乎是正确的方向吗?
答案 0 :(得分:2)
您可以将图像数据编码为base64。
根据您链接的代码,这可能如下所示:
import base64
import StringIO
# ...
png_output = StringIO.StringIO()
canvas.print_png(png_output)
# ...
some_dict["imagedata"] = base64.b64encode(png_output.getvalue())
要在网络浏览器(Javascript应用程序)中使用,您可以以
格式直接生成Data URIsdata:image/png;base64,<BASE64 ENCODED IMAGE DATA>
可以直接送入图片代码的src
属性。