【问题标题】:Matplotlib savefig to BytesIO is slightly wrong?Matplotlib savefig to BytesIO 是不是有点不对?
【发布时间】:2013-04-05 00:11:23
【问题描述】:

我正在尝试将 数字保存到内存流中,与 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.2.0)。你有什么版本的mpl?
  • 感谢您的检查。我正在运行 1.1.0,这是我为 Windows 找到的最新预建版本。我会看看我是否可以得到 1.2.0 并用它进行测试。

标签: matplotlib c# python matplotlib


【解决方案1】:

尝试以二进制模式打开文件。

f = open('copy.png', 'wb')

来自文档:

Windows 上的 Python 区分文本文件和二进制文件; 文本文件中的行尾字符会自动更改 读取或写入数据时稍微。这个幕后 修改文件数据对于 ASCII 文本文件很好,但它会 JPEG 或 EXE 文件中的损坏的二进制数据。要非常小心 读写此类文件时使用二进制模式。

【讨论】:

    猜你喜欢
    • 2012-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-30
    • 2011-12-15
    • 2018-08-08
    • 2018-04-06
    • 2012-10-07
    相关资源
    最近更新 更多