如何使用Python PIL将图像位深度转换为24位
不同位深度图像转24位真彩色实现方案
你原有代码的问题在于使用convert("P")是将图像转为8位索引调色板模式,且设置colors=8仅保留8种颜色,和24位真彩色的目标完全不匹配。
24位图像在PIL中对应RGB模式:每个像素包含红、绿、蓝三个独立色彩通道,单通道位深为8位,合计24位,不包含透明Alpha通道。
通用基础转换代码
适用于所有32位(RGBA)、16位、48位等位深的源图像,转换后自动丢弃透明通道,输出标准24位图像:
from PIL import Image img = Image.open("image.png") # 直接转换为RGB模式即得到24位真彩色图像 img_24 = img.convert("RGB") img_24.save("image_24bit.png")
带透明通道的32位图像自定义处理
如果源图是带Alpha透明层的32位RGBA图像,直接转RGB会默认把透明区域填充为黑色,需要自定义透明区域填充色时使用以下代码:
from PIL import Image img = Image.open("image.png") # 校验源图是否包含透明通道 if img.mode in ("RGBA", "LA") or (img.mode == "P" and "transparency" in img.info): img = img.convert("RGBA") # 自定义背景填充色,(255,255,255)为白色,可按需修改RGB值 background = Image.new("RGB", img.size, (255, 255, 255)) # 按Alpha通道将原图合成到背景上 background.paste(img, mask=img.split()[3]) img_24 = background else: img_24 = img.convert("RGB") img_24.save("image_24bit.png")
位深校验方法
保存前可以通过以下代码确认输出图像符合24位要求:
# 模式为RGB即代表三通道,单通道默认8位,合计24位 print(f"图像模式:{img_24.mode},单通道位深:{img_24.bits}")
输出结果显示图像模式:RGB,单通道位深:8即为符合要求的24位图像。
内容的提问来源于stack exchange,提问作者Domagoj 954
相关产品推荐
相关产品推荐

