'tuple'对象不支持项目分配

dga*_*ma3 46 python python-imaging-library

我正在使用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')
Run Code Online (Sandbox Code Playgroud)

但是我收到此错误: TypeError: 'tuple' object does not support item assignment

Pet*_*rin 46

PIL像素是元组,元组是不可变的.你需要构造一个新的元组.所以,而不是for循环,做:

pixels = [(pixel[0] + 20, pixel[1], pixel[2]) for pixel in pixels]
image.putdata(pixels)
Run Code Online (Sandbox Code Playgroud)

此外,如果像素已经太红,则添加20将溢出该值.你可能想要min(pixel[0] + 20, 255)或者int(255 * (pixel[0] / 255.) ** 0.9)代替pixel[0] + 20.

并且,为了能够处理许多不同格式image = image.convert("RGB")的图像,请在打开图像后进行处理.的转换方法将确保像素是始终(R,G,B)的元组.

  • 你可能是指 min(pixel[0] + 20, 255) (2认同)

Fre*_*Foo 7

第二行应该是pixels[0],有一个S.你可能有一个名为元组pixel,元组是不可变的.改为构造新像素:

image = Image.open('balloon.jpg')

pixels = [(pix[0] + 20,) + pix[1:] for pix in image.getdata()]

image.putdate(pixels)
Run Code Online (Sandbox Code Playgroud)


Lew*_*ton 5

python中的元组不能改变它们的值.如果您想更改包含的值,我建议使用列表:

[1,2,3](1,2,3)