听起来您正在使用 python 图像库 (PIL)。
如果是这样,您可以这样做:
from PIL import Image
image = Image.open("<path to image file>").convert('RGBA')
pixeldata = list(image.getdata())
for i,pixel in enumerate(pixeldata):
if pixel[:3] == (255,255,255):
pixeldata[i] = (255,255,255,0)
image.putdata(pixeldata)
image.save("output.png")
这应该会生成如下内容:
当然,这可能不是您想要的。您可以做的一件事是在颜色接近白色而不是完全白色时将像素设置为透明。您可以定义一个函数,如
def almostEquals(a,b,thres=5):
return all(abs(a[i]-b[i])<thres for i in range(len(a)))
并将颜色检查线替换为:
if almostEquals(pixel[:3], (255,255,255):
为了得到这样的东西
仍有一些光晕/边框伪影,但更好。
在您的情况下,使用简单的黑白图像,您可能只想根据像素的白度设置 Alpha(我经常在 Photoshop 中这样做)。您可以使用 3 个颜色通道之一,甚至可以使用平均值。比如:
for i,pixel in enumerate(pixeldata):
avg = int(sum(pixel[:3])/3.0)
pixeldata[i] = (pixel[0],pixel[1],pixel[2],255-avg)
会给你这样的结果:
仍然是一个小光环,因为我们仍然只是更改 alpha 值,但要好得多。要解决这个问题,您也可以将所有像素设置为黑色,而不仅仅是修改 alpha。
无论如何,一个简单问题的长答案,但希望这会有所帮助。