我正在使用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
答案
PIL像素是元组,元素是不变的。您需要构建一个新的元组。因此,代替循环,请做:
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")
打开图像后。这转变方法将确保像素始终是(r,g,b)元组。