色导网的色彩空间换算器与各空间口径说明
换算本身不难,难的是知道哪个数字可以信。下面每一行都标了它的假设:哪些是代数等价的无损换算,哪些只是粗略估计。
输入
规范写法:#C8553D
换算结果
- RGB
- rgb(200, 85, 61)
- HSL
- hsl(10 56% 51%)
- HSV
- hsv(10, 70%, 78%)
- CMYK
- cmyk(0%, 58%, 70%, 22%)
- XYZ
- X 27.91 Y 19.12 Z 6.63
- CIELAB
- L* 50.82 a* 44.31 b* 36.51
- OKLCH
- oklch(59.29% 0.1522 33.43)
每一行的口径
| 空间 | 口径 | 能信到什么程度 |
|---|---|---|
| RGB | 十六进制的十进制写法 | 完全无损,就是同一个数 |
| HSL / HSV | 对 RGB 的代数重排,圆柱坐标 | 无损可逆,但 L 和 V 都不是感知亮度 |
| CMYK | 朴素换算:K = 1 - max(R,G,B),再按 K 归一 | 只能当粗估,见下面的警告 |
| XYZ | sRGB 原色矩阵,D65 白点,先做线性化 | 在 sRGB 假设下精确 |
| CIELAB | CIE 1976 定义,参考白 D65 | 在 sRGB 假设下精确;ΔE*ab 在蓝区会高估差异 |
| OKLCH | Oklab 的极坐标形式,L 为感知亮度,C 为彩度,H 为色相角 | 适合做插值与明度排序 |
为什么还要 Lab 和 OKLCH
HSL 的 L 是把最亮和最暗通道取平均得来的,和眼睛感受到的亮度关系很松:纯黄和纯蓝在 HSL 里可以都是 L 50%,实测相对亮度却差了接近六倍。所以用 HSL 排灰阶、做渐变,经常得到忽明忽暗的结果。
Lab 与 Oklab 都把亮度做成接近感知均匀的一维量,于是「把这组色按亮度排序」「在两色之间取中点」这类操作才有意义。Oklab 比 1976 年的 Lab 在蓝紫区表现更好,也是 CSS 的 oklch() 背后的空间。
误差从哪来
- 十六进制只有每通道 256 级,所以 HEX → Lab → HEX 的来回换算可能差 1,极端的高饱和色更容易出现。
- OKLCH 转回 sRGB 时如果彩度超出 sRGB 能表示的范围,会被截断到边界,这时反向再转回去数值就对不上了。
- 所有计算都假设输入是 sRGB。如果你的素材其实在 Display P3 或 Adobe RGB 里,同样的数值代表的是别的颜色,这里的结果就不适用。