一、讲解部分
1、PNG 有 PNG-8,PNG-24 和 PNG-32 三种格式
PNG-8
- PNG-8将图片中用到的每种颜色都存储在一个长度为255的数组中,称之为条色盘,然后每个像素上存储对应颜色在条色盘上的位置。
- 因为颜色上限是255种,所以每个像素只需要8bits就可以表示对应的颜色信息。这种表示颜色的方式也被称之为索引色。
- 相比之下确实使用了更少的空间来存储颜色,但是他能表达的颜色种类也是有上限的,所以在将PNG-32转换成PNG-8时会在一些颜色过渡的地方看到明显的不平滑的渐变
PNG-24
- 同理,PNG-24的像素深度为24bits,其中RGB三个通道各占8bits。PNG-24因为没有Alpha通道(透明通道),所以不支持透明图片
PNG-32
- PNG-32每个像素的深度为32bits,其中RGBA四个通道各占8bits。所谓的RGBA四个通道,就是 红,绿,蓝,透明 这四种色值各自的大小,都用8bits来表示(0~255)
2、要确定当前需要处理的png图片的位深是多少
- 在图片上右键,选择“属性”
- 在属性页面,选择“详细信息”
二、代码部分
代码语言:javascript复制导入库
import PIL.Image as Image
代码语言:javascript复制代码部分
# 如果当前位深是32的话,可以不用写转RGBA模式的这一句,但是写上也没啥问题
# 从RGB(24位)模式转成RGBA(32位)模式
img = Image.open('xxx/xxx/xxx.png').convert('RGBA')
W, L = img.size
white_pixel = (255, 255, 255, 255) # 白色
for h in range(W):
for i in range(L):
if img.getpixel((h, i)) == white_pixel:
img.putpixel((h, i), (0, 0, 0, 0)) # 设置透明
img.save('xxxx/xxxx/xxx.png') # 自己设置保存地址