3

の数字をメモリストリームに保存しようとしています。

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#で使用できるある種のバイト配列に書き込みたいと思います。

4

1 に答える 1

1

バイナリモードでファイルを開いてみてください。

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

ドキュメントから:

Windows上のPythonは、テキストファイルとバイナリファイルを区別します。テキストファイルの行末文字は、データの読み取りまたは書き込み時に自動的にわずかに変更されます。このファイルデータの舞台裏での変更は、ASCIIテキストファイルには問題ありませんが、JPEGまたはEXEファイルのようなバイナリデータが破損します。このようなファイルを読み書きするときは、バイナリモードの使用に十分注意してください。

于 2013-04-04T16:11:23.267 に答える