你的np数组应该具有uint8数据类型:
arr = np.zeros((len(x), len(z), 3),dtype='uint8')
实际上,PIL会在arr的每个步幅上调用tobytes函数,如果它们是int类型,将生成额外的字节。
以下是针对不同数据类型执行以下代码的结果。
import numpy as np
from PIL import Image
size=241
arr = np.zeros((size,size,3))
arr[:,:,0] = [[255]*size]*size
arr[:,:,1] = [[255]*size]*size
arr[:,:,2] = [[0]*size]*size
img = Image.fromarray(arr.astype(int), 'RGB')
![enter image description here](https://istack.dev59.com/xxAiW.webp)
import numpy as np
from PIL import Image
size=241
arr = np.zeros((size,size,3))
arr[:,:,0] = [[255]*size]*size
arr[:,:,1] = [[255]*size]*size
arr[:,:,2] = [[0]*size]*size
img = Image.fromarray(arr.astype('uint8'), 'RGB')
![图片描述在此](https://istack.dev59.com/VKfWo.webp)
正如其他人所建议的,如果您的原始输入不在范围(0,255)内,您也需要重新调整它们。
red_arr
等是什么样子的? - Willem Van Onsem