tuple'对象不支持项赋值
我正在使用PIL库。
我想让一张图片看起来更红,这就是我现在的代码。
from PIL import Image
image = Image.open('balloon.jpg')
pixels = list(image.getdata())
for pixel in pixels:
pixel[0] = pixel[0] + 20
image.putdata(pixels)
image.save('new.bmp')
但是我遇到了这个错误:TypeError: 'tuple' object does not support item assignment
6 个回答
6
在Python中,元组(tuples)里的值是不能被改变的。如果你想要改变里面的值,建议使用列表(list):
[1,2,3]
而不是 (1,2,3)
9
第二行应该是 pixels[0]
,注意这里有个S。你可能有一个叫 pixel
的元组,而元组是不可改变的。你需要创建新的像素来代替:
image = Image.open('balloon.jpg')
pixels = [(pix[0] + 20,) + pix[1:] for pix in image.getdata()]
image.putdate(pixels)
64
PIL中的像素是元组,而元组是不可改变的。这意味着你需要创建一个新的元组。所以,不要用for循环,直接这样做:
pixels = [(pixel[0] + 20, pixel[1], pixel[2]) for pixel in pixels]
image.putdata(pixels)
另外,如果像素的红色值已经很高了,直接加20可能会超过最大值。你可能想用类似 min(pixel[0] + 20, 255)
或者 int(255 * (pixel[0] / 255.) ** 0.9)
的方式,而不是简单地 pixel[0] + 20
。
为了能够处理多种不同格式的图片,在打开图片后,记得执行 image = image.convert("RGB")
。这个 convert 方法会确保像素始终是(r, g, b)的元组。