枕头:为什么模式“ 1”会给出奇怪的图像?

时间:2019-06-25 15:05:08

标签: python python-imaging-library

受此post的启发(从带有枕头的阵列中绘制图像。)

我尝试过

diamond = np.array([[  0,   0,   0,   0, 255,   0,   0,   0,   0],
       [  0,   0,   0, 255,   0, 255,   0,   0,   0],
       [  0,   0, 255,   0,   0,   0, 255,   0,   0],
       [  0, 255,   0,   0,   0,   0,   0, 255,   0],
       [255,   0,   0,   0,   0,   0,   0,   0, 255],
       [  0, 255,   0,   0,   0,   0,   0, 255,   0],
       [  0,   0, 255,   0,   0,   0, 255,   0,   0],
       [  0,   0,   0, 255,   0, 255,   0,   0,   0],
       [  0,   0,   0,   0, 255,   0,   0,   0,   0]], dtype=uint8)

size = 36
my_dpi = mpl.rcParams['figure.dpi']
plt.subplots(figsize=(size/my_dpi, size/my_dpi))
plt.axis('off')
img = Image.fromarray(diamond, 'L')
img.resize((size,size)).save('diamond.ppm')
plt.imshow(img)

到目前为止,一切正常。

每个doc“ 1”代表(1位像素,黑白,每字节存储一个像素)

使用模式“ 1”替换“ L”会输出此图像

enter image description here

预期输出应为

enter image description here

那是为什么?

1 个答案:

答案 0 :(得分:1)

转换为模式1是一种解决方法

size = 36
my_dpi = mpl.rcParams['figure.dpi']
plt.subplots(figsize=(size/my_dpi, size/my_dpi))
plt.axis('off')
img = Image.fromarray(diamond, 'L').convert('1')
img.resize((size,size)).save('diamond.ppm')
plt.imshow(img)