I am using the PIL library.
I am trying to make an image look red-er, this is what i've got.
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')
However I get this error: TypeError: 'tuple' object does not support item assignment
Best Answer
PIL pixels are tuples, and tuples are immutable. You need to construct a new tuple. So, instead of the for loop, do:
Also, if the pixel is already too red, adding 20 will overflow the value. You probably want something like
min(pixel[0] + 20, 255)
orint(255 * (pixel[0] / 255.) ** 0.9)
instead ofpixel[0] + 20
.And, to be able to handle images in lots of different formats, do
image = image.convert("RGB")
after opening the image. The convert method will ensure that the pixels are always (r, g, b) tuples.