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

sRGB转0-255线性标准RGB的Python实现问题

sRGB转线性RGB的正确Python实现

你的问题核心在于对颜色值范围的处理,以及可能混淆了转换方向。先明确标准转换逻辑:

标准sRGB转线性RGB(0-255范围)

如果你的输入是0-255的sRGB值,需要先归一化到0-1区间,转换后再转回0-255:

def srgb_to_linear_rgb(srgb_value):
    s = srgb_value / 255.0
    if s <= 0.0404482362771082:
        lin = s / 12.92
    else:
        lin = pow(((s + 0.055) / 1.055), 2.4)
    return round(lin * 255)

如果输入是0-1的sRGB值,直接转换到0-255线性RGB:

def srgb01_to_linear255(s):
    if s <= 0.0404482362771082:
        lin = s / 12.92
    else:
        lin = pow(((s + 0.055) / 1.055), 2.4)
    return round(lin * 255)

测试输入0.4(0-1 sRGB),得到结果33,这是完全符合sRGB标准转换的正确值。

为什么你需要59?可能的混淆点

如果你的目标是线性RGB转sRGB(而非sRGB转线性),对应的实现是:

def linear_rgb_to_srgb(linear_value):
    lin = linear_value / 255.0
    if lin <= 0.0031308:
        srgb = lin * 12.92
    else:
        srgb = 1.055 * pow(lin, 1/2.4) - 0.055
    return round(srgb * 255)

另一种可能是你误将非标准伽马校正(如伽马1.5/1.8)的结果作为参考,但这不符合sRGB的官方转换规范。标准sRGB转换的伽马曲线是分段的,并非单一伽马值。

结论

标准sRGB转线性RGB的结果就是33(对应0.4的0-1 sRGB),如果你的需求是标准转换,只需在原函数基础上添加范围转换步骤。若坚持需要59,则需要确认转换方向或是否使用了非标准的颜色空间参数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 05:54:55