【问题标题】:From flask, how to send the matplotlib plot image into JSON object?从烧瓶中,如何将 matplotlib 绘图图像发送到 JSON 对象?
【发布时间】:2019-04-22 14:50:15
【问题描述】:

我们正在尝试创建一个与前端的 React 和后端的 Flask 一起工作的 API。作为其中的一部分,需要显示的输出包括四个实体:

2 张图片(使用 matplotlib 生成) 2个字符串。 我已将两个字符串都嵌入到 JSON 对象中,但事实证明图像很困难。

有没有办法不存储这些图像而直接将生成的matplotlib图像嵌入到JSON对象中?大多数方法都要求我们指定图像文件名,但有没有办法跳过保存文件? sendfile() 不起作用,因为我们有多个输出,我们的最终目标是 JSON 响应。

尝试创建一个临时文件并读取它,这会生成一个缓冲流?我认为 Base64 不适用于此?

提前感谢您的帮助。

【问题讨论】:

    标签: python json image matplotlib flask


    【解决方案1】:

    假设你的情节看起来像你想要的那样,你可以总是 base64 对其存储的文件进行编码并在另一台机器上重现它。看看:

    # assume your plot is saved to tfile
    with open(tfile) as fin:
        read_in = fin.read()
        b64_data = base64.urlsafe_b64encode(read_in.decode('utf-8'))
    # now send over the network
    

    【讨论】:

    • 如果我们不存储生成的图像,那么我们会将什么作为参数传递给 open(),我们可以只使用变量对象吗?它不应该总是一个文件名(在我们的例子中,我们这里没有)。
    • 你必须将它保存到一个文件中,但它可能是一个临时文件,它在运行后被删除。
    • 临时文件有点像给出一个缓冲流,它不能直接用 f.read() 方法读取,我们尝试使用 io.BufferedReader 但它显示一个空流。
    • 是的,临时文件有一个 .name 参数返回其名称。
    【解决方案2】:

    https://github.com/mpld3/mpld3 mpld3 提供了一个基于 D3 构建的自定义独立 javascript 库,它解析绘图的 JSON 表示。 mpld3 python 模块提供了一组例程来解析 matplotlib 图(使用 mplexporter 框架)并输出 mpld3.js 可读的 JSON 描述。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-10-20
      • 2023-04-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-14
      • 2021-07-24
      • 2018-04-05
      相关资源
      最近更新 更多