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

使用PIL将图像转换为RGBA时出现画质损坏问题求助

16位灰度PNG转RGBA失真的解决办法

你的问题根源是:直接用convert("RGBA")处理16位灰度图时,PIL默认会把16位数据(0-65535)强行压缩成8位(0-255),导致灰度信息严重丢失,图像自然失真。

解决思路是明确保留16位的位深度,有两种简单的实现方式:

方法一:指定16位RGBA模式转换

直接在convert时指定"RGBA;16"模式,让PIL保留16位数据:

from PIL import Image

img = Image.open("input_image.png")
# 明确转换为16位RGBA格式
img_rgba = img.convert("RGBA;16")
img_rgba.save("output_image.png")

方法二:手动合并16位通道

如果某些PIL版本对"RGBA;16"支持不好,可以手动拆分并合并通道:

from PIL import Image

img = Image.open("input_image.png")
# 确认输入是16位灰度图(模式为"I;16")
if img.mode == "I;16":
    # R/G/B通道复用原灰度数据,Alpha通道设为全不透明的16位最大值65535
    r_channel = img.copy()
    g_channel = img.copy()
    b_channel = img.copy()
    a_channel = Image.new("I;16", img.size, 65535)
    # 合并为16位RGBA图像
    img_rgba = Image.merge("RGBA;16", (r_channel, g_channel, b_channel, a_channel))
    img_rgba.save("output_image.png")

两种方法都能让输出图像和输入保持一致,不会出现失真问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 02:27:06