ブログ

割とコンピュータよりの情報をお届けします。

Pythonでmatplotlibとio.BytesIOの使用例の作成

io.BytesIOを使用すると普通はファイルに書き出す操作を省き仮想的にメモリ上に書き出すことができる。
matplotlibと合わせた使用法の例を作っていた。

まずio.BytesIOは何かというと,C#でいうMemoryStreamのような扱いができるもの。
扱う内容が文字列に限定される場合にはio.StringIOというものも用意されている。
例えば,item = io.BytesIO()で用意しておいて,plt.savefig(item, format='***')でバイト列に書き出す。
さらに,下の例ではImage.openでまるでファイルのようにitemを引数と渡せるようになる。

from matplotlib import pyplot as plt
import numpy as np
from PIL import Image, ImageDraw
import io

fig = plt.figure()

plt.plot(np.sin(np.linspace(0, 10, num=250)), 'r')
plt.xlim(0, 250)
plt.ylim(-1, 1) 
plt.title('Sinusoidal wave')
item = io.BytesIO()
plt.savefig(item, format='png') #ここで書き出し
item.seek(0)
im = Image.open(item)#さらにメモリ上のファイルのように扱う
im = im.resize((200, 200))
item.close()
im.show()

ファイルを開いてファイルに書き出すように設計されているプログラムで応用ができそう。上の例ではいったん書き出してリサイズしてから表示している。
ファイルへの書き出しは,item.read()をファイルに書き出せばよい。

from matplotlib import pyplot as plt
import numpy as np
from PIL import Image, ImageDraw
import io

fig = plt.figure()

plt.plot(np.sin(np.linspace(0, 10, num=250)), 'r')
plt.xlim(0, 250)
plt.ylim(-1, 1) 
plt.title('Sinusoidal wave')
item = io.BytesIO()
plt.savefig(item, format='svg') #ここで書き出し
item.seek(0)
with open('test.svg','wb') as out: # Open file as bytes
    out.write(item.read())  
2018/08/23 コンピュータ   TakeMe
< Previous Article     To List     Next Article >

コメント送信フォーム


※ Email will not be published
Loading...
 Please enter the letters of the image