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

Python 从MatPlotLib画布获取二进制图像数据?,python,email,python-3.x,matplotlib,Python,Email,Python 3.x,Matplotlib,我试图从matplotlib画布获取二进制数据,以便将其附加到电子邮件中,但我发现的唯一方法是说: filename = 'image.png' canvas.print_figure(filename) with open(filename, 'rb') as image: return image.read() 我真的很想避免磁盘IO,因为我以后不需要保存文件。使用StringIO对象作为文件对象,它可以提供给print\u pngcanvas函数 from cStringIO i

我试图从matplotlib画布获取二进制数据,以便将其附加到电子邮件中,但我发现的唯一方法是说:

filename = 'image.png'
canvas.print_figure(filename)
with open(filename, 'rb') as image:
    return image.read()

我真的很想避免磁盘IO,因为我以后不需要保存文件。

使用
StringIO
对象作为文件对象,它可以提供给
print\u png
canvas函数

from cStringIO import StringIO
sio = StringIO()
canvas.print_png(sio)
return sio.getvalue()

(如果您使用的是Python 3,请使用
io.BytesIO
而不是
cStringIO

很乐意帮助:)我可以问一下,您为什么需要访问画布上的原始png数据吗?它被附加到电子邮件中,我看不出以后需要保留这些文件。哦,这很有趣。我将更改原始问题并添加此解释,以便其他人可以搜索“email matplotlib plots”并找到此问题/答案。使用io完成示例。BytesIO: