用Python 将图片中的白色背景改为透明
今天520,做了个短视频蹭热度。视频剪辑过程中,需要将一个爱心圈型的图片显示在视频上。但是由于图片本身是白色背景的,直接放在视频上像贴了一片膏药,明显不是想要的效果。解决办法就是先将图片中的白色背景改成透明的,然后再放到视频中。原始白色背景图片是这样的

希望处理后,爱心外面和里面的白色背景都变成透明的,像这样

这点小事,用PS 似乎有点太牛刀了,况且电脑上也没装PS。于是祭出万能的 Python 手起刀落,白色背景就变透明了。
原理
png格式支持透明度,bmp和jpg是不包含透明度信息的,因此处理后生成的图片是png格式的。png格式的图片,存储了图片的RGBA 信息,每个点除了RGB 三色外,还有第四个参数A表明像素点的透明度,例如(0,0,0,0)表示透明的黑色,(255,255,255,0)则表示透明的白色,所以进行图片转换时将,只需要找到需要转换的像素点,然后将其A 参数改为0即可。对纯白色背景图片,可以简单地找到所有(255,255,255,255)的像素点,再转换为(255,255,255,0)就可以了。
安装Pillow
python的代码实现时,要使用pillow包,可通过 pip 安装
pip install pillow
代码实现
import PIL.Image as Image
img_file = 'C:\\Pictures\\爱心.png'
output_file = 'C:\\Pictures\\爱心透明背景.png'
img = Image.open(img_file)
img = img.convert('RGBA')
W, H = img.size
white_pixel = (255, 255, 255, 255)
for h in range(H):
for w in range(W):
if img.getpixel((w,h)) == white_pixel:
img.putpixel((w,h),(255,255,255,0))
img.save(output_file)
这样就可以实现上面展示的效果了。代码还是比较简陋的,如果追求细节,还可以在 if 语句的条件中进行更细致的判断。
冀公网安备 13010402001886号