HSVA 转 RGBA 转换器
将 hsva(h, s, v, a) 值转换为 rgba(r, g, b, a),无需手动逐步计算公式。当您的选择器或工具以 HSVA 形式显示颜色,而您的 CSS、画布代码或组件使用 RGBA 时,此转换器非常有用。
输入一个 HSVA 表示的颜色,您将立即看到匹配的 RGBA 表示。然后,您可以将 rgba() 函数复制到样式、动画或渲染代码中。
在此页面上,您还将找到 HSVA 和 RGBA 的简短解释、清晰的转换公式、逐步示例、参考表和涵盖使用这两种格式的常见问题的 FAQ。
什么是 HSVA
HSVA 是带有 alpha 通道的 HSV 颜色模型。概念上可以写成 hsva(h, s, v, a),其中色相选择基础颜色,饱和度设置颜色的强度,值设置相对于黑色的亮度,alpha 控制透明度。
色相以 0 到 360 度为单位测量。饱和度和值是从 0% 到 100% 的百分比。Alpha 是从 0(完全透明)到 1(完全不透明)的分数。
HSVA 广泛用于颜色选择器和绘图工具,用户可以通过简单的滑块调整色相、强度、亮度和不透明度,而不必考虑三个独立的 RGB 通道。
什么是 RGBA
RGBA 是 RGB 模型加上一个 alpha 通道。它写作 rgba(r, g, b, a),其中颜色通道是从 0 到 255 的整数,alpha 是从 0 到 1 的分数。
三个通道控制红色、绿色和蓝色光的强度,alpha 值定义最终颜色的透明度。此格式在 CSS、HTML 画布、WebGL 和许多其他渲染 API 中被广泛使用。
由于 RGBA 使用普通数字,因此在 JavaScript 或其他运行时环境中进行动画、插值或调整非常容易。
HSVA 转 RGBA 转换公式
hsva(h, s, v, a) -> rgba(r, g, b, a)
Given:
h in [0, 360)
s in [0, 100]
v in [0, 100]
a in [0, 1]
1) Clamp inputs:
h_c = h
s_c = clamp(s, 0, 100)
v_c = clamp(v, 0, 100)
a_c = clamp(a, 0, 1)
2) Normalize saturation and value:
s' = s_c / 100
v' = v_c / 100
3) Compute chroma:
c = v' * s'
4) Helper value:
x = c * (1 - |((h_c / 60) mod 2) - 1|)
5) Temporary rgb triple in [0, c]:
if 0 <= h_c < 60 then (r1, g1, b1) = (c, x, 0)
else if 60 <= h_c < 120 then (r1, g1, b1) = (x, c, 0)
else if 120 <= h_c < 180 then (r1, g1, b1) = (0, c, x)
else if 180 <= h_c < 240 then (r1, g1, b1) = (0, x, c)
else if 240 <= h_c < 300 then (r1, g1, b1) = (x, 0, c)
else (r1, g1, b1) = (c, 0, x)
6) Add the value based offset:
m = v' - c
r' = r1 + m
g' = g1 + m
b' = b1 + m
7) Scale to integer RGB:
r = round(r' * 255)
g = round(g' * 255)
b = round(b' * 255)
8) Compose RGBA:
rgba(r, g, b, a_c)
Helper:
clamp(x, min, max) = min if x < min, max if x > max, else xalpha 组件保持不变,因为 HSVA 和 RGBA 都使用相同的 0 到 1 范围来表示不透明度。所有的工作都发生在 HSV 到 RGB 的转换中,该转换根据色相、饱和度和值重建三个颜色通道。
hsva(196, 59%, 76%, 0.8) 的示例
1) 限制和归一化:
s' = 59 / 100, v' = 76 / 100
2) 基于 h = 196 计算 c、x 和 m
3) 为色相区段选择正确的临时三元组
4) 将 m 添加到每个通道并缩放到 0-255
5) 四舍五入的 RGB:
rgb(79, 163, 194)
6) 最终 RGBA:
rgba(79, 163, 194, 0.8)HSVA 转 RGBA 转换的逐步工作原理
从高层次来看,HSVA 转 RGBA 转换始终遵循相同的模式:测量颜色的强度和亮度,选择色相区段,然后计算三个颜色通道并保持 alpha 不变。
hsva(210, 57%, 24%, 0.5)
-> hsv(210, 57%, 24%)
-> rgb(r, g, b)
-> rgba(r, g, b, 0.5)以下是 hsva(210, 57%, 24%, 0.5) 的简化示例。
- 步骤 1 - 归一化饱和度和值
将百分比输入转换为分数并计算色度,色度定义颜色在相同值下远离纯灰色的程度。
s' = 57 / 100 v' = 24 / 100 c = v' * s' - 步骤 2 - 选择色相区段和临时三元组
将色相除以 60 以找到颜色轮上的区域,然后选择一个临时三元组,例如
(c, x, 0)或(0, x, c)。这设置了红色、绿色和蓝色的相对比例,然后进行最终偏移。h = 210 h / 60 is between 3 and 4 temporary triple uses (0, x, c) - 步骤 3 - 添加偏移并附加 alpha
添加偏移
m,使最亮的通道与请求的值匹配,将通道缩放到 0 到 255,并在 RGBA 函数中保留原始 alpha 值。rgba(26, 43, 60, 0.5)
相同的步骤适用于任何有效的 HSVA 颜色,这就是为什么在实际项目中使用转换器或小助手通常是个好主意,而不是手动重复数学计算。
选择 HSVA 和 RGBA
HSVA 和 RGBA 都描述颜色和透明度,但一个侧重于滑块,另一个侧重于数值通道。每种模型在您堆栈的不同层次中可能更方便。
HSVA 何时方便
- 交互式颜色选择器: 色相、饱和度、值和 alpha 滑块直观地用于可视化探索和调整颜色。
- 程序化调色板生成: 您可以改变值和饱和度,从单一色相生成更亮、更暗或更生动的变体。
- 面向设计的工具: HSVA 与设计师讨论颜色强度和亮度的方式非常匹配。
RGBA 何时更合适
- 渲染和低级代码: 许多 API 和图像格式直接期望 RGBA 通道。
- CSS 或 JS 中的动态效果: 通道值和 alpha 分数易于数值调整和限制。
- 与其他模型的互操作性: 转换为 HEXA、HSLA 和其他表示通常通过 RGBA 进行。
总结
在选择器和工具中使用 HSVA,让用户以交互方式调整颜色。当您将这些值输入到处理数值通道的 CSS、画布或渲染代码中时,转换为 RGBA。
同时使用 HSVA 和 RGBA 的最佳实践
实际项目通常从基于滑块和基于通道的颜色模型中受益。一些简单的约定可以使 HSVA 和 RGBA 顺利协同工作。
分开编辑和存储角色
- 在编辑工具中使用 HSVA:内部 UI 和选择器可以让用户直接调整色相、饱和度、值和 alpha。
- 在代码中使用 RGBA:在渲染、动画或采样像素数据的地方存储和处理颜色为 RGBA。
与其他颜色格式结合
- 通过 RGB 转换:使用大多数库已经提供的标准转换在 HSVA、RGBA、HEXA 和 HSLA 之间移动。
- 限制通道值:在生成或动画颜色时,始终保持色相、饱和度、值和 alpha 在其有效范围内。
保持系统可维护
- 记录模型职责:明确 HSVA 存在的位置(工具)和 RGBA 存在的位置(渲染)。
- 使用转换器,而不是复制粘贴:自动化助手减少不匹配,并保持跨格式调色板同步。
有了这些指导方针,您可以自信地在同一项目中使用 HSVA 进行人性化控制,并使用 RGBA 进行精确渲染。
HSVA 转 RGBA 转换表
下表列出了几种熟悉的带透明度的颜色,以 HSVA 和 RGBA 形式书写。为了清晰起见,值已四舍五入,因此请使用页面顶部的转换器获取确切数字。
| 描述 | HSVA | RGBA |
|---|---|---|
| 白色 50% | hsva(0, 0%, 100%, 0.5) | rgba(255, 255, 255, 0.5) |
| 黑色 50% | hsva(0, 0%, 0%, 0.5) | rgba(0, 0, 0, 0.5) |
| 红色 80% | hsva(0, 100%, 100%, 0.8) | rgba(255, 0, 0, 0.8) |
| 绿色 40% | hsva(120, 100%, 100%, 0.4) | rgba(0, 255, 0, 0.4) |
| 蓝色 30% | hsva(240, 100%, 100%, 0.3) | rgba(0, 0, 255, 0.3) |
| 黄色 60% | hsva(60, 100%, 100%, 0.6) | rgba(255, 255, 0, 0.6) |
| 青色 70% | hsva(180, 100%, 100%, 0.7) | rgba(0, 255, 255, 0.7) |
| 品红色 90% | hsva(300, 100%, 100%, 0.9) | rgba(255, 0, 255, 0.9) |
| 覆盖灰色 | hsva(0, 0%, 7%, 0.5) | rgba(17, 17, 17, 0.5) |
| 柔和灰色 | hsva(0, 0%, 20%, 0.5) | rgba(51, 51, 51, 0.5) |
| 面板边框 | hsva(0, 0%, 33%, 0.5) | rgba(85, 85, 85, 0.5) |
| 强调橙色 70% | hsva(39, 100%, 100%, 0.7) | rgba(255, 165, 0, 0.7) |
| 紫色覆盖 | hsva(300, 100%, 50%, 0.5) | rgba(128, 0, 128, 0.5) |
| 青色覆盖 | hsva(180, 100%, 50%, 0.5) | rgba(0, 128, 128, 0.5) |
对于任何其他 HSVA 组合,您可以使用上面的转换器计算确切的 RGBA 值,使用相同的算法。
常见问题:HSVA 转 RGBA
- 为什么要将 HSVA 转换为 RGBA
HSVA 适合使用滑块编辑颜色,但大多数渲染代码和许多 CSS 功能期望数值 RGBA 通道。转换使您可以在工作流程的每个部分使用更方便的模型。
- HSVA 和 RGBA 描述不同的颜色吗
不。它们是描述同一 RGB 基色空间的两种方式。正确转换的 RGBA 值表示与原始 HSVA 值相同的颜色和 alpha。
- 转换过程中 alpha 值会改变吗
通常,alpha 值直接复制,因为 HSVA 和 RGBA 都使用相同的 0 到 1 范围表示透明度。只有颜色通道被重新计算。
- 我可以将 RGBA 转换回 HSVA 吗
可以。您可以将 RGBA 视为 RGB 加上 alpha,将 RGB 转换为 HSV,然后重新使用 alpha 值再次获得 HSVA。
- 我应该在我的工具中使用 HSVA 还是 HSLA
这取决于您想如何考虑亮度。HSVA 使用相对于黑色的值,而 HSLA 使用相对于黑白的亮度。许多项目支持两者,HSVA 用于选择器,HSLA 用于主题设计。