画像データを保存する(8bits)

numpy の ndarray で作成したデータを画像ファイルとして保存するコードを下記に示します。

ndarray から Pillow の Image.fromarray() を使ってデータ転送して、それを Pillow の機能で保存します。

import numpy as np
from PIL import Image
import matplotlib.pyplot as plt

w = 640
h = 480
numpix = w * h

# ubyte な1次元配列を確保する.
data = np.zeros( numpix, dtype=np.uint8)

#---------------------------------------------
# ななめウロコデータを格納する.
for j in range( h ):
    adrs = w * j
    for i in range( w ):
        level = i + j
        data[ adrs ] = level
        adrs += 1
#---------------------------------------------
        
# 2次元配列に変換する、w と h の順に注目せよ.
data_2d = data.reshape( h, w )

# 2次元配列を画像データとして解釈する.
im = Image.fromarray( data_2d )

im.save( "c:/tmp/xxx_bpp08.bmp" )

# Matplotlib で画像を表示する.
plt.imshow( data_2d, cmap='gray')
plt.show()

print( "finish." )

下記のようなビットマップ画像データが c:/tmp/xxx_bpp08.bmp というファイルパスに配置されているはずです。