之前有些文章(0,1)里提到或者用到过透明图片,主要是我这博客的背景色比较特殊,有时候需要配图,可惜大多数找来的图不是这种背景色,对比显得太突兀影响美观。比如右边这张图片,由于是白色的背景,和黑色的背景配起来觉得不够合一。所以就想能不能制定某个颜色,比如这里的白色,让它变成透明的。
当然用Python来做,在网上搜了一下,发现一个解决方案,贴代码如下:
from PIL import Image def transPNG(srcImageName,dstImageName): img = Image.open(srcImageName) img = img.convert("RGBA") datas = img.getdata() newData = list() for item in datas: if item[0] >220 and item[1] > 220 and item[2] > 220: newData.append(( 255, 255, 255, 0)) else: newData.append(item) img.putdata(newData) img.save(dstImageName,"PNG") if __name__ == '__main__': transPNG("apple.png","apple2.png")
代码意思就是将RGBA格式的PNG图片中比较白的像素点的alpha通道值改为0,这样得到的结果如下:
这样的结果……呃,看起来怪怪的,虽然背景大致透明了,但是还有一些比较令人烦躁的白色噪声点,PIL中有一个ImageFilter模块,可以通过里面的一些滤波操作来去掉这些白噪声,不过这个模块里面很多滤波器对图像进行操作的时候会更改alpha通道的值,所以背景又会变得不透明,这个比较麻烦,但有些模块就不更改,估计是设计模块的时候没有统一意见。