如何使用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")