gpt4 book ai didi

python - 为什么 python/pil 不将填充 FF 的二维数组保存为全白 bmp 图像?

转载 作者:太空宇宙 更新时间:2023-11-03 15:32:08 31 4
gpt4 key购买 nike

下面的 python/pillow 代码创建一个 150x150 数组并用 255/FF 填充它,然后将其保存为 bmp。但保存的图像并不是预期的白色 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")

创建图像(黑色上有白点,而不是全白)-

enter image description here

及其十六进制版本显示,不知何故,并非所有 FF 都进入了 bmp - enter image description here

为什么会有这种奇怪的行为?

最佳答案

由于您的输入类型是 intc_array 会将您的数据存储为 int32(或 int64,请参阅 numpy 的 default behavior for int )。

>>> c = [[(255, 255, 255)]*150 for i in range(150)]
>>> c_array = np.asarray(c)
>>> c_array.dtype
dtype('int32')


Image.fromarray 中导入时,c_array 被视为 int8 的字节串,因为您指定了 mode="RGB" (3x8-bit pixels) 。由于每个元素都是 int32,因此每个值的字节串为 \xff\x00\x00\x00,从而创建您看到的图像。


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

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

关于python - 为什么 python/pil 不将填充 FF 的二维数组保存为全白 bmp 图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42823553/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com