将 RGB 转换为具有正确大小的图像的问题

Issues converting RGB to image with correct size

我有一个大小为 1280x720 的图像的 RGB 值数据,列表如下所示:

[[102, 107, 111],
 [101, 106, 110],
 [100, 105, 109],
 [100, 105, 109],
 [101, 106, 109],
 [103, 108, 111],
 [105, 110, 113],
             ...]

我从 Image.getdata() 获得了这些数据,并出于不同的原因将其转换为二维列表(此列表称为 all_data)。但是,当我尝试使用下面的代码将大小设置为我想要的大小时,我得到了 TypeError: too many data entries.

from PIL import Image
import numpy as np

image_out = Image.new(mode = "RGB", size = (1280, 720))
image_out.putdata(all_data)
image_out.show()

这可能不是正确的做法,所以如果有人知道我应该把它放在哪里,请告诉我。正如预期的那样,我有 1280*720 像素的数据,应该按照 Image.getdata() 放入它们的顺序(根据我的假设,它是标准的从左到右和从上到下的渲染)。

因此,图像库要求 rgb 数据是元组,而不是列表。我无法在文档中找到明确提到的这一点,但通过我自己的测试对其进行了验证。所有文档示例还使用整数或元组 (https://hhsprings.bitbucket.io/docs/programming/examples/python/PIL/Image__class_Image.html#id1)

从列表列表到元组列表的转换可以通过这行来完成:

tuples = [tuple(x) for x in all_data]

在上下文中:

from PIL import Image
import numpy as np

image_out = Image.new(mode = "RGB", size = (1280, 720))
tuples = [tuple(x) for x in all_data]
image_out.putdata(tuples)
image_out.show()