跳至内容

颜色选择器工具 - 转换RGB、十六进制、CMYK和HSV颜色代码

这款颜色转换工具可在RGB、十六进制(Hex)、CMYK和HSV四种常用颜色格式之间互相转换。用户可以直接在色谱图上点选颜色,也可手动输入精确数值,转换结果支持一键复制到剪贴板,方便应用于网页设计、平面印刷排版和界面开发等不同场景,确保配色在各种媒介上保持一致。

颜色选择器

RGB (0-255)

CMYK (0-100)

颜色选择器

0%
100%
加载计算器...
📚

文档

使用这个颜色选择器可以做什么

需要为你的项目找到完美的色调吗?这个颜色选择器让你可以即时选择、预览并在RGB、十六进制、CMYK和HSV格式之间转换颜色。无论你是在编写网站、设计标志还是准备打印文件,你都能找到所需的精确颜色值——不需要猜测,也不需要在多个工具之间切换。

点击颜色光谱的任何位置选择色调,通过滑块调整亮度,或直接输入精确的数值。每种格式都能实时更新,并且你可以通过一次点击复制任何颜色代码。

理解颜色模型

不同的项目需要不同的颜色格式。以下是每种颜色模型的作用和使用场景:

RGB(红、绿、蓝)

RGB 通过混合红、绿、蓝光来工作——就像你的屏幕现在显示颜色的方式。每个分量的范围从 0 到 255:

  • RGB(255, 0, 0) = 纯红色
  • RGB(0, 255, 0) = 纯绿色
  • RGB(0, 0, 255) = 纯蓝色
  • RGB(255, 255, 255) = 白色
  • RGB(0, 0, 0) = 黑色

何时使用 RGB: 任何数字作品——网站、移动应用、视频编辑或屏幕图形。它是显示设备的原生语言,这就是为什么像 CSS 这样的工具直接支持 rgb()rgba() 函数。根据 W3C CSS 颜色模块规范,RGB 是 Web 标准的基础颜色模型。

十六进制(Hex)

Hex 代码只是用 16 进制而不是 10 进制写的 RGB 值。Hex 颜色看起来像 #FF5733,其中:

  • # 符号标记它为 Hex 代码
  • 前两个字符 = 红色(00-FF)
  • 中间两个 = 绿色(00-FF)
  • 最后两个 = 蓝色(00-FF)
  • #FF0000 = 红色,#00FF00 = 绿色,#0000FF = 蓝色

有时你会看到 3 个字符的简写,如 #F00 代替 #FF0000——当每个颜色通道重复相同的数字时,这种写法是有效的。

何时使用 Hex: Web 开发是主要用例。CSS 一直支持 Hex 表示法,大多数开发者发现比 rgb() 输入更快。一个常见的陷阱:忘记 # 符号会悄悄地破坏你的样式,因为浏览器不会将其识别为有效颜色。

CMYK(青色、品红、黄色、键/黑色)

CMYK 是打印机使用的颜色模型。与 RGB(添加光)不同,CMYK 减去光——在白纸上混合油墨来创建颜色:

  • 每个分量范围从 0% 到 100%
  • CMYK(0, 100, 100, 0) = 红色
  • CMYK(100, 0, 100, 0) = 绿色
  • CMYK(0, 0, 0, 100) = 纯黑油墨
  • CMYK(0, 0, 0, 0) = 无油墨(白纸显示)

何时使用 CMYK: 为印刷设计——名片、宣传册、杂志、包装。现实情况是:许多鲜艳的 RGB 颜色在 CMYK 油墨中simply无法重现。你在屏幕上看到的明亮电蓝色?打印时会显得更暗淡。专业设计师在将文件发送到打印机之前总是预览 CMYK 转换,以避免意外。

HSV(色相、饱和度、明度)

HSV 将颜色分解为三个直观的分量:

  • 色相: 哪个颜色家族(0-360°)——0° 是红色,120° 是绿色,240° 是蓝色
  • 饱和度: 有多鲜艳或灰暗(0-100%)——0% 是灰度,100% 是完全饱和
  • 明度: 有多亮或暗(0-100%)——0% 是黑色,100% 是全亮度

为什么 HSV 很重要: 它符合人类自然思考颜色的方式。想要更深的蓝色?降低明度。想要不那么强烈的蓝色?降低饱和度。这使得 HSV 非常适合交互式颜色选择器,在那里你可以在光谱上选择色相,并用滑块调整亮度。

颜色转换公式

颜色选择器使用这些数学公式自动在不同的颜色模型之间进行转换:

RGB 到十六进制转换

要将 RGB 转换为十六进制:

  1. 将每个 RGB 分量(0-255)转换为两位十六进制数
  2. 将三个十六进制值与 # 前缀连接

十六进制=#+toHex(R)+toHex(G)+toHex(B)\text{十六进制} = \text{\#} + \text{toHex}(R) + \text{toHex}(G) + \text{toHex}(B)

其中 toHex() 将十进制数转换为其十六进制表示。

RGB 到 CMYK 转换

从 RGB 到 CMYK 的转换涉及以下步骤:

  1. 将 RGB 值归一化到 0-1 范围
  2. 计算黑色键(K)分量
  3. 根据 K 计算 C、M 和 Y

R=R/255,G=G/255,B=B/255R' = R/255, G' = G/255, B' = B/255 K=1max(R,G,B)K = 1 - \max(R', G', B') C=(1RK)(1K)×100%C = \frac{(1-R'-K)}{(1-K)} \times 100\% M=(1GK)(1K)×100%M = \frac{(1-G'-K)}{(1-K)} \times 100\% Y=(1BK)(1K)×100%Y = \frac{(1-B'-K)}{(1-K)} \times 100\%

RGB 到 HSV 转换

将 RGB 转换为 HSV:

R=R/255,G=G/255,B=B/255R' = R/255, G' = G/255, B' = B/255 Cmax=max(R,G,B)C_{max} = \max(R', G', B') Cmin=min(R,G,B)C_{min} = \min(R', G', B') Δ=CmaxCmin\Delta = C_{max} - C_{min}

对于色相(H):

0° & \text{如果 } \Delta = 0 \\ 60° \times (\frac{G' - B'}{\Delta} \mod 6) & \text{如果 } C_{max} = R' \\ 60° \times (\frac{B' - R'}{\Delta} + 2) & \text{如果 } C_{max} = G' \\ 60° \times (\frac{R' - G'}{\Delta} + 4) & \text{如果 } C_{max} = B' \end{cases}$$ 对于饱和度(S): $$S = \begin{cases} 0 & \text{如果 } C_{max} = 0 \\ \frac{\Delta}{C_{max}} \times 100\% & \text{否则} \end{cases}$$ 对于明度(V): $$V = C_{max} \times 100\%$$ ## 如何使用颜色选择器 有三种方式处理颜色:点击色谱、输入精确值或使用滑块调整。选择最适合你工作流程的方式。 ### 视觉选择颜色 点击**色谱**的任何位置来选择色调。水平位置选择色相(红色、绿色、蓝色等),垂直位置控制饱和度(鲜艳vs.褪色)。预览会立即更新,让你准确看到选择的颜色。 拖动色谱下方的**亮度滑块**来调整颜色的明暗。在HSV术语中,这调整"值"分量——向左变暗,向右变亮。 ### 输入精确颜色值 已经知道需要的颜色?直接输入: **十六进制格式:** 输入如 `#FF5733` 的代码。可以包含或省略 `#`——工具都能处理。也支持3位数简写(`#F37`)。 **RGB格式:** 为红、绿、蓝输入0-255的值。如果不小心输入300,它会自动限制在255。 **CMYK格式:** 输入每个墨水分量的百分比(0-100)。在匹配印刷设计师的颜色规格时很有用。 每种格式都能实时更新其他格式。更改十六进制代码,RGB/CMYK会自动调整。 ### 复制颜色代码 点击任何颜色格式旁边的复制按钮(剪贴板图标)。你会看到快速的"已复制!"确认,然后可以将值粘贴到任何需要的地方——CSS文件、设计软件、文档等。 **专业提示:** 在处理多个文件或应用程序时,在浏览器标签中保持此工具打开。你可以快速引用和复制颜色值,无需切换上下文。 ## 实际应用场景 ### Web 开发 您正在构建一个深色模式切换开关,需要颜色变体。从您品牌的主色开始(假设为 `#3B82F6`),然后使用亮度滑块为背景生成更深的版本(`#1E3A8A`)和为悬停状态生成更浅的版本(`#60A5FA`)。直接将每个十六进制颜色代码复制到您的 CSS 自定义属性中。 处理透明度时,获取 RGB 值并在 `rgba()` 函数中使用。例如,`rgb(59, 130, 246)` 变为 `rgba(59, 130, 246, 0.8)` 以创建 80% 不透明度的叠加层。 常见场景:客户提供了一个在 Figma 中指定 RGB 颜色的设计,但您更喜欢在 CSS 中使用十六进制代码。在此处转换,而不是手动计算。 ### 印刷平面设计 这里 CMYK 变得至关重要。您在屏幕上使用 RGB 颜色设计了一个充满活力的海报,但在发送到打印机之前,请检查 CMYK 值。那个电光蓝色(RGB 0, 255, 255)转换为 CMYK(100, 0, 0, 0)——看起来还不错。但那个明亮的屏幕绿色(RGB 0, 255, 0)在打印时可能会明显变化。 专业工作流程:在此输入您的屏幕颜色,记录 CMYK 转换,然后在设计软件的 CMYK 预览模式下进行视觉比较。如果颜色变化太大,请在最终确定设计之前调整您的选择。这可以避免与印刷店的"屏幕上看起来不一样"的对话。 ### UI/UX 设计系统 构建设计系统需要一致的颜色比例。从主色开始,然后为不同的 UI 状态创建 5-10 个亮度变体。亮度滑块使这个过程变得快速——无需心算。 为了可访问性,您需要文本和背景之间有足够的对比度。虽然此工具不计算对比度比率(您需要专门的 [WCAG 对比度检查器](https://www.w3.org/WAI/WCAG21/Understanding/contrast-minimum.html)),但它可以帮助您快速测试不同的色调,直到找到可行的组合。 实际场景:您的主按钮使用 `#2563EB`,但该背景上的文本未通过对比度要求。可以调亮背景或调暗文本——使用预览可以立即测试选项。 ### 数字艺术和插画 正在进行数字绘画,需要一致的色彩和谐?在光谱上选择一个基础色调,然后通过仅调整饱和度和亮度来创建变体。这保持了调色板的凝聚力,避免随机的颜色跳跃。 许多数字艺术家在绘画时保持颜色选择器打开,以快速获取和转换参考颜色。在参考照片中看到完美的阴影色调?在此处点击(如果您已在其他地方提取了值),获取 RGB,并将其粘贴到 Photoshop、Procreate 或 Krita 中。 ### 色彩教育和实验 想了解颜色模型如何关联?选择任何颜色,观察其在 RGB、十六进制、CMYK 和 HSV 中的值变化。注意纯红色(RGB 255, 0, 0)等于 `#FF0000`,但其 CMYK 等效值为 0, 100, 100, 0——完全不同的数字代表相同的感知颜色。 这种视觉反馈帮助学生理解为什么 RGB 使用加色混合(组合光),而 CMYK 使用减色混合(组合墨水)。交互性使抽象概念变得具体。 ## 您可能需要的其他颜色工具 这个工具专注于选择和转换单个颜色。根据您的项目需求,您可能还需要: **调色板生成器**(Adobe Color、Coolors),当您需要基于色彩理论的多个和谐颜色时,如互补色、三色调或类似色系。 **浏览器扩展**(ColorZilla、Eye Dropper)可以直接从任何网页或屏幕元素提取颜色。非常适合匹配现有设计。 **对比度检查器**用于可访问性工作。[WebAIM对比度检查器](https://webaim.org/resources/contrastchecker/)可以测试您的文本/背景组合是否符合WCAG标准。 **潘通/RAL系统**用于在不同印刷店和材料间精确匹配印刷颜色。这些实物色卡提供了数字工具无法精确复制的标准化参考。 ## 使颜色无障碍 大约8%的男性和0.5%的女性存在某种色觉缺陷。以下是如何进行包容性设计: **绝不仅仅使用颜色** 来传达意义。如果您的表单以红色显示错误,还要添加图标或文本标签。图表中有不同颜色的线条?添加图案、标签或两者都添加。 **使用工具检查对比度比率**,如[WebAIM对比度检查器](https://webaim.org/resources/contrastchecker/)。普通文本需要与背景的最小4.5:1比率,大文本需要3:1。根据[WCAG 2.1指南](https://www.w3.org/WAI/WCAG21/Understanding/contrast-minimum.html),这确保了视力轻度低下的用户的可读性。 **避免有问题的组合:** 红绿色是最常见的问题(红色和绿色感知受到色盲和绿色色盲的影响)。蓝黄色对于患有蓝黄色盲的人会造成问题。使用像[Coblis](https://www.color-blindness.com/coblis-color-blindness-simulator/)这样的模拟器测试您的设计,以了解它们对于不同类型色觉缺陷的用户看起来如何。 **尽可能使用色盲友好的调色板**。蓝色、橙色和黄色通常可以很好地搭配,因为它们在大多数类型的色盲中都是可区分的。 ## 常见问题 ### RGB和CMYK有什么区别? RGB用于屏幕,CMYK用于印刷。屏幕通过发射红、绿、蓝光来创建颜色(加色混合),而打印机通过在纸上叠加青色、品红色、黄色和黑色墨水来创建颜色(减色混合)。由于光的色域比墨水更广,RGB可以产生比CMYK更明亮、更鲜艳的颜色。这就是为什么屏幕上的颜色打印出来时常常看起来更暗淡。 ### 为什么打印时颜色看起来不同? 屏幕发光,纸张反射光——这是根本不同的过程。此外,RGB可以处理数百万种颜色,而CMYK墨水根本无法再现。屏幕校准、纸张质量和墨水变化会增加更多变数。打印前务必检查CMYK值,并为关键色彩匹配工作索取实物样稿。 ### 如何获取在线颜色的十六进制代码? 使用浏览器的开发者工具。在Chrome或Firefox中,右键单击任何元素,选择"检查",然后点击样式面板中的小颜色方块。这将打开一个颜色选择器,显示十六进制代码。像ColorZilla这样的浏览器扩展可以让这个过程更快——它们允许你在页面上的任何位置点击以获取其颜色值。 ### 十六进制代码中的#符号是什么意思? 这只是一个前缀,告诉浏览器"这是一个十六进制颜色代码"。这个标准来自早期的HTML和CSS规范。`#`后面的六个字符表示RGB值的十六进制(基数-16):两位数表示红色,两位数表示绿色,两位数表示蓝色。没有`#`,浏览器就无法识别它是一种颜色。 ### 为什么3位数的十六进制代码可以使用? 这是一种简写,用于每个颜色通道重复的情况。`#F00`扩展为`#FF0000`(红色),`#C9C`变成`#CC99CC`(浅紫色)。这种简写是在1990年代带宽昂贵时创建的,用于减少文件大小。对于简单颜色来说,今天仍然很方便。 ### 颜色转换是否准确? RGB到十六进制的转换在数学上是精确的——它们只是不同数字进制的相同值。RGB到CMYK的转换是近似值,因为你在根本不同的色彩空间(光与墨水)之间进行转换。该工具使用[ICC颜色配置文件标准](http://www.color.org/specification/ICC1v42_2006-05.pdf)进行这些转换,这与专业设计软件使用的方法相同。 ### 如何创建无障碍的颜色组合? 在这里选择颜色后,使用像[WebAIM的工具](https://webaim.org/resources/contrastchecker/)这样的对比度检查器。普通文本需要4.5:1的比率,大文本需要3:1。避免红绿组合(对色盲用户最困难)。如有疑问,深色文字配浅色背景,反之亦然——重要的是要有足够的亮度差异。 ### 我可以从图像中选择颜色吗? 在此工具中不能直接选择。使用像ColorZilla这样的浏览器扩展,或对图像进行截图,并使用操作系统的颜色选择器(macOS上的数字颜色仪,Windows上的PowerToys颜色选择器)。获得颜色值后,在此处输入以在不同格式之间转换。 ### 为什么某些RGB颜色无法很好地转换为CMYK? CMYK的"色域"(可再现颜色的范围)比RGB更窄。明亮的蓝色、鲜艳的绿色和电光橙色通常超出CMYK墨水可以物理创建的范围。发生这种情况时,打印机会替换最接近的可能匹配,这通常看起来不那么饱和。专业印刷设计师通常从CMYK安全颜色开始,以避免这个问题。 ## 颜色转换的代码示例 以下是一些展示如何在不同颜色格式之间转换的代码示例:
1// RGB 转 Hex 转换
2function rgbToHex(r, g, b) {
3  const toHex = (c) => {
4    const hex = Math.round(c).toString(16);
5    return hex.length === 1 ? '0' + hex : hex;
6  };
7  
8  return `#${toHex(r)}${toHex(g)}${toHex(b)}`;
9}
10
11// Hex 转 RGB 转换
12function hexToRgb(hex) {
13  // 如果存在 # 则移除
14  const cleanHex = hex.startsWith('#') ? hex.slice(1) : hex;
15  
16  // 处理 3 位和 6 位十六进制
17  const expandedHex = cleanHex.length === 3 
18    ? cleanHex.split('').map(char => char + char).join('')
19    : cleanHex;
20    
21  const r = parseInt(expandedHex.substring(0, 2), 16);
22  const g = parseInt(expandedHex.substring(2, 4), 16);
23  const b = parseInt(expandedHex.substring(4, 6), 16);
24  
25  return { r, g, b };
26}
27
28// RGB 转 CMYK 转换
29function rgbToCmyk(r, g, b) {
30  // 标准化 RGB 值
31  const normalizedR = r / 255;
32  const normalizedG = g / 255;
33  const normalizedB = b / 255;
34  
35  // 计算 K(黑色)
36  const k = 1 - Math.max(normalizedR, normalizedG, normalizedB);
37  
38  // 处理纯黑色
39  if (k === 1) {
40    return { c: 0, m: 0, y: 0, k: 100 };
41  }
42  
43  // 计算 C、M、Y
44  const c = ((1 - normalizedR - k) / (1 - k)) * 100;
45  const m = ((1 - normalizedG - k) / (1 - k)) * 100;
46  const y = ((1 - normalizedB - k) / (1 - k)) * 100;
47  
48  return {
49    c: Math.round(c),
50    m: Math.round(m),
51    y: Math.round(y),
52    k: Math.round(k * 100)
53  };
54}
55
56// 示例用法
57const rgb = { r: 255, g: 0, b: 0 }; // 纯红色
58console.log(`Hex: ${rgbToHex(rgb.r, rgb.g, rgb.b)}`);
59console.log(`CMYK:`, rgbToCmyk(rgb.r, rgb.g, rgb.b));
60

参考资料和延伸阅读