You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Pillow根据灰度值设置图片透明度 像素越亮透明度越高的实现

基于Pillow 6.2.2实现灰度值映射透明度的方案

1. 基于你原有代码的修改版本(新手易理解)

你的原有代码是通过计算像素和白色的差值生成alpha,只需要改成先计算像素灰度值,再用灰度值映射alpha即可适配全灰度区间,修改后代码如下:

from PIL import Image
img = Image.open('Image.jpg')
img_out = img.convert("RGBA")
datas = img.getdata()

newData = list()
for item in datas:
    # 标准公式计算当前像素的灰度值,范围0-255,0为纯黑、255为纯白
    gray = int(0.299 * item[0] + 0.587 * item[1] + 0.114 * item[2])
    # 灰度越高,alpha值越低(透明度越高),纯黑时alpha=255(完全不透明,无透明度)
    alpha = 255 - gray
    newData.append((item[0], item[1], item[2], alpha))

img_out.putdata(newData)
img_out.save('ConvertedImage.png', 'PNG')

这个版本逻辑直观,和你原有代码结构一致,方便你理解修改点,缺点是逐像素遍历,大尺寸图片处理速度较慢。

2. 更高效率的内置API实现(性能提升10倍以上)

Pillow底层内置的通道操作是C语言实现的,不需要写Python层的循环,处理速度快很多,适配Pillow 6.2.2版本的代码如下:

from PIL import Image
# 读取图片并转为RGBA模式
img = Image.open('Image.jpg').convert('RGBA')
# 提取原图的灰度通道
gray_channel = img.convert('L')
# 反转灰度值生成alpha通道:灰度越高alpha越低,对应越亮越透明
alpha_channel = Image.eval(gray_channel, lambda x: 255 - x)
# 为原图绑定alpha通道
img.putalpha(alpha_channel)
# 保存结果
img.save('ConvertedImage.png', 'PNG')

可选调整项

如果需要让接近黑色的像素完全不透明,可以在生成alpha通道时增加阈值判断,比如设置灰度低于30的像素都无透明度,只需要修改alpha_channel生成逻辑即可:

# 灰度值低于30的像素alpha固定为255(完全不透明),其余按规则映射
alpha_channel = Image.eval(gray_channel, lambda x: 255 if x < 30 else 255 - x)

内容的提问来源于stack exchange,提问作者Zax

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 09:18:04