如何使用PIL使所有白色像素透明?


问题内容

我正在尝试使用Python图像库使所有白色像素透明。(我是一位尝试学习python的C黑客,所以要谦虚)我已经完成了转换工作(至少像素值看起来正确),但是我不知道如何将列表转换为缓冲区以重新创建图片。这是代码

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")