从Matplotlib画布获取二进制图像数据?

7
我正在尝试从Matplotlib画布中获取二进制数据,以便将其附加到电子邮件上,但我发现唯一的方法是使用以下代码:
filename = 'image.png'
canvas.print_figure(filename)
with open(filename, 'rb') as image:
    return image.read()

我希望尽量避免磁盘IO,因为我之后不需要保留文件。

1个回答

6

使用一个StringIO对象作为文件对象,可以将其提供给print_png画布函数。

from cStringIO import StringIO
sio = StringIO()
canvas.print_png(sio)
return sio.getvalue()
(如果您正在使用Python 3,请改用io.BytesIO而不是cStringIO

很高兴能帮忙 :)我可以问一下,您为什么需要访问画布的原始PNG数据呢? - Lior
它被附加到电子邮件中,我认为之后没有必要保留这些文件。 - Subbarker
哦,这很有趣。我会修改原始问题并添加这个解释,这样其他人就可以搜索“电子邮件 matplotlib 图表”并找到这个问题/答案。 - Lior
使用io.BytesIO的完整示例:https://dev59.com/8GMl5IYBdhLWcg3wAC6h#21862555 - Jorge González Lorenzo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,