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

CSS中invert()函数的颜色转换公式是什么?为何50%时呈全灰?

Understanding CSS invert() Function's Color Calculation & the 50% Gray Behavior

我完全懂你对invert(50%)让图像变成纯灰色的困惑——一开始我也觉得这个结果有点反直觉,直到深挖了CSS滤镜的官方计算逻辑才搞明白。

首先,先给你invert()函数官方的颜色通道计算公式:
对于每个RGB颜色通道(注意这里的通道值是归一化到0-1范围的,不是我们常用的0-255),输出值是通过线性插值计算的:

output_channel = input_channel + (1 - 2 * input_channel) * amount

或者换一种更直观的写法,本质是把原始颜色和完全反转后的颜色按比例混合:

output_channel = (1 - input_channel) * amount + input_channel * (1 - amount)

这里的amount就是你传入的参数值(比如50%对应0.5,100%对应1)。

为什么invert(50%)会变成纯灰色?

当amount=0.5时,代入第一个公式计算:

output_channel = input_channel + (1 - 2*input_channel)*0.5
= input_channel + 0.5 - input_channel
= 0.5

不管原始通道的数值是多少(0到1之间的任何值),计算结果都会固定为0.5。对应到8位颜色值就是128,三个RGB通道都是128的话,就是标准的中灰色(#808080),所以整个图像就变成了纯灰色。

你之前的假设错在哪?

你一开始以为是类似abs(255 - 像素值)的反转逻辑,其实这只是amount=1(也就是100%)时的特殊情况:当amount=1,公式简化为output_channel = 1 - input_channel,对应到0-255的范围就是255 - 像素值,这时候才是完全的颜色反转。

简单总结一下:invert()本质是原始颜色与完全反转颜色的线性混合,比例由你传入的参数决定。0%是原始颜色,50%是两者各占一半的混合(刚好到中间灰色),100%是完全反转颜色。

内容的提问来源于stack exchange,提问作者Vasu Deo.S

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 05:34:15