看起来你正在使用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")
这应该会生成类似这样的内容:
![输入图像描述](https://istack.dev59.com/em51p.webp)
![输入图像描述](https://istack.dev59.com/m4836.webp)
当然,那可能不完全是你想要的。你可以在颜色接近白色而不是完全白色时将像素设置为透明。你可以定义一个类似于下面的函数:
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):
为了获得类似这样的效果:
![enter image description here](https://istack.dev59.com/FtH6T.webp)
![enter image description here](https://istack.dev59.com/gYWgU.webp)
仍然存在一些光晕/边框伪影,但已经更好了。
在您的情况下,对于一个简单的黑白图像,您可能只想基于像素有多白来设置alpha通道(我经常在Photoshop中这样做)。你可以使用三个颜色通道中的一个或者平均值。像这样:
for i,pixel in enumerate(pixeldata):
avg = int(sum(pixel[:3])/3.0)
pixeldata[i] = (pixel[0],pixel[1],pixel[2],255-avg)
这样会给你一个类似这样的结果:
![输入图像描述](https://istack.dev59.com/yHslZ.webp)
![输入图像描述](https://istack.dev59.com/9OBTS.webp)
虽然还有一点光晕,因为我们仍然只是改变 alpha 值,但已经好多了。为了修复甚至可能做一些像将所有像素都设为黑色而不仅仅是修改 alpha 的事情。
无论如何,这是对一个简单问题的长回答,希望能有所帮助。
im.show()
的工作方式。将其设置为pixels[x, y] = (255, 255, 255, 0)
使其变为白色,我可以肯定它不是透明的。 - mishaturnbullim
的方法可以设置图片的透明度? - mishaturnbull