1. ホーム
  2. python

[解決済み] PILで白い画素をすべて透明にするには?

2023-05-14 04:23:09

質問

Python Image Libraryを使って、白いピクセルを全て透明にしようとしています。 (私はCハッカーで、Pythonを学ぼうとしているので、優しくしてください)。 私は変換が動作している(少なくともピクセル値が正しく見える)ことを得ましたが、私は画像を再作成するためにリストをバッファに変換する方法を見つけ出すことができません。 以下はそのコードです。

img = Image.open('img.png')
imga = img.convert("RGBA")
datas = imga.getdata()

newData = list()
for item in datas:
    if item[0] == 255 and item[1] == 255 and item[2] == 255:
        newData.append([255, 255, 255, 0])
    else:
        newData.append(item)

imgb = Image.frombuffer("RGBA", imga.size, newData, "raw", "RGBA", 0, 1)
imgb.save("img2.png", "PNG")

どのように解決するのですか?

以下のように変更する必要があります。

  • タプルを追加する (255, 255, 255, 0) を追加し、リストではなく [255, 255, 255, 0]
  • 使用する img.putdata(newData)

これは動作中のコードです。

from PIL import Image

img = Image.open('img.png')
img = img.convert("RGBA")
datas = img.getdata()

newData = []
for item in datas:
    if item[0] == 255 and item[1] == 255 and item[2] == 255:
        newData.append((255, 255, 255, 0))
    else:
        newData.append(item)

img.putdata(newData)
img.save("img2.png", "PNG")