快速解决
首先,您需要将像素元组放在一个非嵌套列表中:
pixels_out = []
for row in pixels:
for tup in row:
pixels_out.append(tup)
接下来,使用输入图像的属性创建一个新的图像对象,并将数据放入其中:
image_out = Image.new(image.mode,image.size)
image_out.putdata(pixels_out)
最后,保存它:
image_out.save('test_out.png')
基本问题
列表推导生成列表列表,后者由切片生成(i * width:(i 1)* width).您的理解可以更容易:像素= [像素的像素,以像素为单位].显然,这会输出相同的列表,像素,但您可以使用这个想法对像素执行操作,例如pixels = [像素的操作(像素)].
真的,你打败了它.您无需管理图像尺寸.获取列表中的像素,然后将它们放入具有putdata的相同大小的图像中,因为它们通过PIL以相同的方式线性化.
简而言之,这就是您的原始代码段应该是:
from PIL import Image
image = Image.open("test.png")
image_out = Image.new(image.mode,image.size)
pixels = list(image.getdata())
image_out.putdata(pixels)
image_out.save('test_out.png')