明度与感知亮度的差别 · 色导网课堂
把五个色相都设成 HSL 的 S 85%、L 50%,它们在屏幕上的亮度相差接近六倍。这一条解释了大量「数值一样但看起来完全不对」。
三个容易混的词
| 说法 | 指什么 | 怎么算 |
|---|---|---|
| HSL 明度 L | 最亮通道与最暗通道的平均 | 纯算术,与色相无关 |
| 相对亮度 Y | 这块颜色发出多少光(归一化后) | 通道线性化后按 0.2126、0.7152、0.0722 加权 |
| 感知亮度 L* | 人觉得它有多亮 | 对相对亮度再做一次非线性压缩,目标是感知均匀 |
实测
| 色相 | 色值 | 相对亮度 | 压白底对比度 |
|---|---|---|---|
| 55° | #ECDA13 | 0.680 | 1.44:1 |
| 120° | #13EC13 | 0.602 | 1.61:1 |
| 200° | #13A4EC | 0.327 | 2.78:1 |
| 275° | #9213EC | 0.126 | 5.95:1 |
| 0° | #EC1313 | 0.183 | 4.50:1 |
原因在加权系数:绿贡献约七成亮度,蓝只贡献约百分之七。所以饱和黄(红加绿)很亮,饱和蓝很暗——这是人眼对不同波长灵敏度不同的结果,不是屏幕的问题。
三个直接后果
- 用 HSL 的 L 排灰阶会忽明忽暗。固定 L 改色相得到的一组色,亮度其实参差不齐;要等亮度就在 OKLCH 里固定 L。
- 「把文字调成同样深的彩色」做不到。同一个 L 的蓝字能读,黄字读不了——必须逐对算对比度。
- 渐变在 sRGB 里直插会在中段变暗或发灰,因为亮度不是线性走的。这是 OKLCH 插值能改善的那一类问题。