1. ホーム
  2. python

[解決済み] 'tuple' オブジェクトはアイテムの割り当てをサポートしていません。

2022-02-06 06:03:53

質問

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の画素はタプルであり、タプルは不変である。新しいタプルを構築する必要があります。そこで、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") 画像を開いた後 その 変換 メソッドは、ピクセルが常に (r, g, b) タプルであることを保証します。