Matplotlib将savefig保存至BytesIO有一点问题?

3

我正在尝试像SO上的另一个示例一样将图保存到内存流中:

import matplotlib.pyplot as plt
import io


plt.figure()
plt.plot([1, 2])
plt.title("test")
buf = io.BytesIO()
plt.savefig(buf, format = 'png')
plt.savefig("real.png", format = 'png')
buf.seek(0)
data = buf.read()
buf.close()
f = open('copy.png', 'w')
f.write(data)
f.close()

我发现copy.png的大小稍微大了一些,应用程序无法打开它。这是某种编码问题吗?
背景:我正在尝试使用python.net来渲染带有matplotlib的图形,并将它们传递给C#进行绘制。我想避免将图像写入磁盘。理想情况下,我希望写入某种字节数组,以便在C#中使用。

1
你的版本是多少?对我来说没问题(1.2.0)。 - pelson
谢谢查看。我正在运行1.1.0版本,这是我在Windows上找到的最新预构建版本。我会尝试获取1.2.0版本并进行测试。 - Bicubic
1个回答

2
尝试以二进制模式打开文件。 f = open('copy.png', 'wb') 根据文档:
Python在Windows上区分文本文件和二进制文件;读取或写入数据时,文本文件中的行尾字符会自动略微改变。这种对文件数据的幕后修改对于ASCII文本文件来说很好,但会破坏像JPEG或EXE文件中那样的二进制数据。在读取和写入此类文件时一定要非常小心,务必使用二进制模式。

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