前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python把png的白色背景变透明

python把png的白色背景变透明

原创
作者头像
Elsa_111
修改2021-07-15 18:04:08
5.4K0
修改2021-07-15 18:04:08
举报
文章被收录于专栏:Elsa的学习笔记Elsa的学习笔记

一、讲解部分

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图片的位深是多少

  1. 在图片上右键,选择“属性”
  2. 在属性页面,选择“详细信息”

红色框框就是位深
红色框框就是位深

二、代码部分

导入库

代码语言: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')  # 自己设置保存地址

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、讲解部分
    • 1、PNG 有 PNG-8,PNG-24 和 PNG-32 三种格式
      • 2、要确定当前需要处理的png图片的位深是多少
      • 二、代码部分
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档