color-converter design-tools css frontend-development

专业颜色转换器:轻松掌握各类色彩空间

在 HEX, RGB, HSL, HSV 和 CMYK 之间进行精确转换。设计师与前端开发的必备神器。

什么是色彩模型?

色彩模型是用数学元组描述颜色的体系。与其说"那种暖橙红色",设计师可以用 #FF4500rgb(255, 69, 0)hsl(16, 100%, 50%) 来精准表达——无歧义、可复现、跨工具传递。

对颜色的系统化描述需求由来已久。1666 年,艾萨克·牛顿用三棱镜将白色阳光分解成彩虹光谱,证明"白光"包含所有可见色。但光谱本身并不能告诉我们如何混合规范化一种颜色。

1905 年,艾伯特·孟塞尔提出了第一套实用色彩秩序体系,他将颜色排列在三个轴上——色相(Hue)、明度(Value)和饱和度(Chroma)——构成一棵感知树。这个体系是 HSL 和 HSV 的直接前身。

现代科学基础于 1931 年奠定。国际照明委员会(CIE)发布了 CIE 1931 XYZ 色彩空间——第一个基于人类观察者配色实验、严格数学化、设备无关的颜色描述标准。计算机中使用的所有色彩模型最终都可追溯到这一标准。

数字时代带来了硬件驱动的模型。CRT 显示器通过混合红、绿、蓝荧光点发光(RGB);喷墨打印机喷涂青、品红、黄、黑墨水(CMYK)。每种介质都需要自己的模型,而在它们之间转换的需求,催生了你现在正在使用的这类工具。


RGB —— 屏幕的语言

RGB(红、绿、蓝)是一种加色模型。叠加光线会增加亮度;三个通道全部最大值(255, 255, 255)得到白色;全为零得到黑色。这与显示器、电视和手机屏幕的工作原理完全一致——数百万个像素,每个都是一组红、绿、蓝子像素,以不同强度发光。

每个通道取值范围为 0 到 255(8 位,256 个等级),共有 256³ = 16,777,216 种不同颜色,即常说的"24 位真彩色"。对于 HDR 显示器,每通道 10 位(1024 个等级)正逐渐成为标准。

RGB 是 CSS、Canvas API、WebGL 着色器和图像处理库的原生语言。它的弱点在于感知直觉性差——若想让一种蓝色稍微亮一点,你不知道该调哪个数字。


HEX —— 网页的紧凑色彩记法

HEX 只是用十六进制编码的 RGB。每个通道(十进制 0–255)转换为两位十六进制字符串(00–FF),整个颜色以 # 为前缀。

255 十进制 = FF 十六进制
128 十进制 = 80 十六进制
  0 十进制 = 00 十六进制

因此 rgb(255, 128, 0) 变为 #FF8000。这种格式简洁、可直接复制粘贴,广泛应用于 HTML、CSS 和设计工具的色板中。

当每个通道两位数字相同时,可用简写形式#FF8800#F80。CSS 还支持 8 位形式 #RRGGBBAA,用于带透明度的颜色(如 #FF800080 = 50% 透明橙色)。

HEX 对开发者很方便,但在语义清晰度上并不优于 RGB——在没有拾色器的情况下调整颜色仍是反复试错。


HSL —— 为人类设计的模型

HSL(色相、饱和度、亮度)以贴合人类直觉的方式重新组织了色彩空间:

  • 色相 H:色轮角度,0°–360°。红色 = 0°,黄色 = 60°,绿色 = 120°,青色 = 180°,蓝色 = 240°,洋红色 = 300°,再回到红色 = 360°。
  • 饱和度 S:0%–100%。为 0% 时所有颜色变为灰色;100% 时颜色最为鲜艳。
  • 亮度 L:0%–100%。0% 恒为黑色;100% 恒为白色;50% 为"纯"色相。

这让设计操作变得自然:"让这个颜色亮 20%" 只需将 L: 50% 调为 70%"降低一半饱和度" 就是 S: 80% → 40%。CSS hsl() 在设计系统中被广泛使用,因为它允许通过简单的算术运算来调整颜色。

HSL 是 RGB 立方体的圆柱重映射,计算效率高,但有感知上的缺陷:hsl(60, 100%, 50%)(黄色)看起来比 hsl(240, 100%, 50%)(蓝色)亮得多,尽管两者的 L 值同为 50%。若需感知均匀性,请使用 Lab 或 oklch。


HSV / HSB —— Photoshop 的模型

HSV(色相、饱和度、明度)又称 HSB(色相、饱和度、亮度),结构上与 HSL 相似,但用**明度(Value)**替换了亮度(Lightness):

  • 明度 V:0%–100%。V=0% 时颜色恒为黑色,无论 H 和 S 是什么。V=100% 时颜色达到最高亮度(但不一定是白色)。

核心区别:在 HSL 中,纯色位于 L=50%;在 HSV 中,纯色位于 V=100%、S=100%。在 HSL 中将 L 提高到 50% 以上会加白(调淡),而 HSV 中没有原生的调淡操作——降低 S 才能加白。

Adobe Photoshop、Illustrator 等大多数专业拾色器使用 HSV/HSB,因为其"全亮度"模型在挑选鲜艳颜色时感觉更自然。设计师通常偏好用 HSV 创建调色板,开发者则偏好用 HSL 编写 CSS。


CMYK —— 印刷模型

CMYK(青、品红、黄、黑)是一种减色模型。与加色的 RGB(叠加光线得到白色)不同,减色模型处理的是纸上的油墨——每种油墨吸收(减去)特定波长,我们看到的是反射光。

  • 青色吸收红光;反射蓝+绿
  • 品红色吸收绿光;反射红+蓝
  • 黄色吸收蓝光;反射红+绿
  • 黑色改善阴影深度并节省油墨成本(CMY 混合很难产生真正的黑色)

每个通道用百分比 0–100% 表示。CMYK 是胶版印刷、包装、杂志等一切需要将油墨印到纸张的介质的标准。

重要警示:RGB 与 CMYK 并不能完全互换。 许多鲜艳的 RGB 颜色(荧光绿、电蓝色)超出了 CMYK 色域,印刷时会变得暗淡。在将文件发送到印刷厂之前,务必在 CMYK 模式下打样验证。


CIE L*a*b* —— 感知均匀性

Lab(或 CIELAB)是一种设备无关的色彩空间,设计目标是让相等的数值距离对应相等的感知色差。它由 CIE 于 1976 年创建,用以解决早期模型感知不均匀的问题。

  • L* :亮度,0(黑)到 100(白)
  • a* :绿色(负值)到红色(正值),大约 −128 到 +127
  • b* :蓝色(负值)到黄色(正值),大约 −128 到 +127

Lab 是色彩科学的黄金标准,用于图像编辑(Photoshop 的 Lab 模式)和色差计算(ΔE)。ΔE < 1 人眼无法察觉;ΔE < 3 对大多数印刷工作可以接受。

Lab 是现代 CSS oklch() 的基础,它将 Lab 重新打包为极坐标系(亮度、色度、色相),更易于使用。


RGBA 与 HSLA —— 透明度

RGB 和 HSL 都支持Alpha 通道——第四个值,从 0(完全透明)到 1(完全不透明)——分别形成 RGBA 和 HSLA。

rgba(255, 99, 71, 0.5)   /* 番茄色,50% 不透明 */
hsla(9, 100%, 64%, 0.7)  /* 相同颜色,70% 不透明 */

现代 CSS 还支持斜杠语法:rgb(255 99 71 / 50%)。Alpha 合成遵循 Porter-Duff"over"操作:最终显示颜色是图层颜色与背后内容按 Alpha 值混合的结果。


数学转换公式

RGB ↔ HEX

// RGB 转 HEX
function rgbToHex(r, g, b) {
  return '#' + [r, g, b]
    .map(v => Math.round(v).toString(16).padStart(2, '0'))
    .join('');
}

// HEX 转 RGB
function hexToRgb(hex) {
  const result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex);
  return result ? {
    r: parseInt(result[1], 16),
    g: parseInt(result[2], 16),
    b: parseInt(result[3], 16)
  } : null;
}

RGB ↔ HSL

function rgbToHsl(r, g, b) {
  r /= 255; g /= 255; b /= 255;
  const max = Math.max(r, g, b), min = Math.min(r, g, b);
  let h, s, l = (max + min) / 2;

  if (max === min) {
    h = s = 0;
  } else {
    const d = max - min;
    s = l > 0.5 ? d / (2 - max - min) : d / (max + min);
    switch (max) {
      case r: h = ((g - b) / d + (g < b ? 6 : 0)) / 6; break;
      case g: h = ((b - r) / d + 2) / 6; break;
      case b: h = ((r - g) / d + 4) / 6; break;
    }
  }
  return { h: Math.round(h * 360), s: Math.round(s * 100), l: Math.round(l * 100) };
}

色彩空间与配置文件

色彩空间定义了设备或文件能表示的可见颜色子集:

色彩空间 覆盖范围 典型用途
sRGB ~35% 可见光 网页、标准显示器、JPEG
Adobe RGB ~50% 可见光 专业摄影、印刷
Display P3 ~45% 可见光 iPhone、Mac、现代显示器
ProPhoto RGB ~90% 可见光 RAW 照片编辑
Rec. 2020 ~75% 可见光 HDR 视频、4K 广播

网页设计师绝大多数在 sRGB 下工作,这是 CSS、PNG 和 JPEG 默认的色彩空间。然而,Safari 和 Chrome 现在支持 CSS color() 函数配合 display-p3,以及可引用 sRGB 之外颜色的 oklch() 函数。

ICC 配置文件是告知软件如何将颜色数值映射到真实光线的数据文件。导出图像时"嵌入配置文件",可确保颜色在不同设备上保持一致。


CSS 颜色用法

CSS 已经从基本的十六进制值发展成丰富的颜色生态系统:

:root {
  --primary: #3B82F6;
  --primary-hsl: hsl(217, 91%, 60%);
  /* oklch 用于 P3 宽色域 */
  --accent: oklch(70% 0.2 250);
}

.text-accessible {
  color: #1a1a1a;       /* 白底对比度 16.1:1 — AAA 级 */
  background: #ffffff;
}

命名颜色:CSS 定义了 140 个命名颜色,从 aliceblueyellowgreen,可读性强但灵活性差。

现代颜色函数

  • rgb(255 99 71) — 现代空格分隔语法
  • hsl(9deg 100% 64%) — 可读、易调整
  • oklch(70% 0.2 250) — 感知均匀,支持宽色域
  • color(display-p3 1 0.389 0.279) — 显式宽色域

CSS 自定义属性(变量)是现代主题化的基石。基于 HSL 的变量可以通过算术运算轻松生成完整的色阶,也让暗色模式切换变得优雅。


无障碍访问与对比度

WCAG(网页内容无障碍指南)规定了文字可读性的对比度要求:

  • AA 级:普通文字 4.5:1,大字体 3:1(18pt 或 14pt 加粗)
  • AAA 级:普通文字 7:1,大字体 4.5:1

对比度由相对亮度计算得出:

对比度 = (L1 + 0.05) / (L2 + 0.05)

其中 L1 为较亮颜色的亮度,L2 为较暗颜色的亮度。

常见安全组合:黑色(#000000)配白色(#ffffff)= 21:1(完美 AAA);#767676 灰色配白色 = 恰好 4.5:1(AA 通过)。


设计工具中的颜色处理

Figma:内部以 RGB 存储颜色。拾色器提供 HEX、RGB、HSL、HSB 和 CSS 表示。设计令牌(变量)可通过 Figma Variables API 发布到代码,导出为 CSS 自定义属性或 JSON。

Sketch:使用 RGB 命名色板和共享颜色库,支持印刷交付物的 CMYK 导出提示。Stark 等插件可添加 WCAG 对比度检查。

Adobe Photoshop / Illustrator:原生支持 CMYK、Lab 和色彩配置文件工作流程。Photoshop 拾色器默认使用 HSB(HSV)。Illustrator 的"重新着色图稿"功能使用 HSB 进行调色板和谐操作。


应用场景:品牌规范、设计令牌与跨媒介一致性

品牌规范为组织定义了权威颜色集。一个完整的品牌颜色规范可能是:

Pantone 286 C
CMYK: 100 / 72 / 0 / 18
RGB: 0 / 84 / 166
HEX: #0054A6

这种多格式规范确保这种蓝色无论是丝网印在 T 恤上、印刷在宣传册里,还是显示在网站上,看起来都保持一致。

设计令牌是将语义角色映射到颜色值的具名变量。Style Dictionary 等工具可将令牌转换为平台特定文件:Web 的 CSS 变量、iOS 的 Swift 常量、Android 的 XML 资源。


对比:HSL vs HSV,sRGB vs 宽色域

HSL vs HSV:两者都源自 RGB,感知均匀性都不足。HSL 的纯色在 L=50%,HSV 的纯色在 V=100%、S=100%。HSV 更适合拾色器 UI,HSL 更适合 CSS 操作。要获得真正的感知均匀性,应使用 oklch/Lab。

sRGB vs 宽色域:sRGB 约覆盖 CIE 1931 马蹄形 35%,对大多数网页工作足够。Display P3 覆盖约 45%,在现代 Apple/Samsung 屏幕上能显示更鲜艳的绿色和红色。CSS @media (color-gamut: p3) 允许渐进增强。


色彩管理最佳实践

  1. 尽早确定色彩空间——以 sRGB 为默认,渐进增强至 P3。
  2. CSS 变量使用 HSL——便于数学生成色阶和主题切换。
  3. 品牌颜色提供多种格式——Pantone、CMYK、RGB、HEX 一个不少。
  4. 每个文字-背景组合都检查 WCAG 对比度
  5. 导出图像时嵌入 ICC 配置文件
  6. 设计系统中使用语义令牌而非原始十六进制值。
  7. 暗色模式下测试颜色:基于 HSL 的变量让暗色模式主题化更优雅。
  8. 不要假设 RGB 等于 CMYK:关键色彩资产务必与印刷供应商确认打样。
  9. 现代 CSS 考虑使用 oklch——兼顾感知均匀性和宽色域支持。
  10. 记录颜色决策:记录颜色选择的原因——无障碍依据、品牌历史、情感意图。

常见问题解答

Q1:HEX 和 RGB 有什么区别? 它们以不同方式表示相同信息。#FF8000rgb(255, 128, 0) 是完全相同的颜色——HEX 只是使用了十六进制记法。HEX 更紧凑;RGB 对大数字更直观。

Q2:为什么我的 RGB 颜色印出来不一样? 屏幕是加色的(发光),印刷是减色的(油墨)。许多鲜艳的屏幕颜色——尤其是电蓝色和荧光绿——无法用油墨重现,会被"色域映射"到最近的可印色,看起来更暗淡。

Q3:什么时候用 HSL,什么时候用 HSV? 编写 CSS 或构建设计令牌时用 HSL;在 Photoshop/Illustrator 拾色器中工作或构建自定义拾色器组件时用 HSV。

Q4:oklch 是什么?为什么比 HSL 更好? oklch 是使用 Oklab 感知色彩空间的 CSS 颜色函数。与 HSL 不同,它在不同色相间保持一致的感知亮度,并支持宽色域 Display P3 颜色。

Q5:如何检查两种颜色的对比度是否足够? 分别计算两种颜色的相对亮度,然后用公式:(较亮 + 0.05) / (较暗 + 0.05)。结果需 ≥ 4.5 才能通过 WCAG AA。本工具内置了对比度检查器。

Q6:本工具的 RGB→CMYK 转换准确吗? 数学转换是设备无关的近似值。专业印刷工作需要针对特定打印机和纸张的 ICC 颜色配置文件——转换结果因印刷机类型差异显著。本工具适合估算参考;正式印刷前务必向印刷商确认打样。