为什么';t python/pil是否将填充FF的2d数组保存为完全白色的bmp图像?

为什么';t python/pil是否将填充FF的2d数组保存为完全白色的bmp图像?,python,pillow,Python,Pillow,下面的python/pillow代码创建了一个150x150数组,并在将其保存为bmp之前将其填充为255/FF。但是保存的图像并不是预期的白色bmp。取而代之的是,它看起来像是一幅点缀着白色的黑色图像。为什么呢 c = [[(255, 255, 255)]*150 for i in range(150)] ci = 0 cj = 0 for ci in range(150): for cj in range(150): c[ci][cj] = (255, 255, 25

下面的python/pillow代码创建了一个150x150数组,并在将其保存为bmp之前将其填充为255/FF。但是保存的图像并不是预期的白色bmp。取而代之的是,它看起来像是一幅点缀着白色的黑色图像。为什么呢

c = [[(255, 255, 255)]*150 for i in range(150)]
ci = 0
cj = 0
for ci in range(150):
    for cj in range(150):
        c[ci][cj] = (255, 255, 255) #Also tried with 0/255 transparency and in hex etc.
c_array = np.asarray(c)
im2 = Image.fromarray(c_array, mode="RGB")
im2.save("test.bmp")
创建图像(黑色上的白点,而不是完全白色)-

它的十六进制版本显示,不知何故,并不是所有的自由流都能进入bmp-


为什么会出现这种奇怪的行为?

因为您的输入类型是
int
c\u数组将把您的数据存储为int32(或int64,请参阅numpy的)


Image.fromarray
中导入时,
c_array
被视为
int8
的ByTestString,因为您指定了
mode=“RGB”
。由于每个元素都是一个int32,因此每个值的bytestring都是
\xff\x00\x00\x00
,从而创建您看到的图像


更简单的修正是指定numpy数组的类型:

c_array = np.asarray(c, dtype=np.uint8)
c_array = np.asarray(c, dtype=np.uint8)