色彩空间

本文从前端工程师的角度深入探讨色彩空间,涵盖named-color、CMYK、RGB、HSL、HSB/HSV以及CIE Lab/CIE Lch模型。通过实例分析,解释了各种色彩模型的特性和转换,帮助读者更好地理解和应用色彩理论。
摘要由CSDN通过智能技术生成

写在前面

  • 提到色彩,即使是刚有辨知能力的小朋友,也能说上几句~

  • 那我们前端工程师,无论工作还是生活,每天都在与各种色彩打交道,那便更有必要系统地了解关于色彩方面的知识

  • 本文将从前端角度,聊聊色彩空间

  • 根据 CSS Color Module Level 4 标准

    <color> = <hex-color> | <named-color> | currentcolor | transparent
              <rgb()> | <rgba()> | <hsl()> | <hsla()> | <hwb()> |
              <lab()> | <lch()> | <gray()> |
              <color()> | <device-cmyk()> |
              <system-color>
    

named-color

transparent

currentcolor

system-color

减色法混色模型 CMYK 与 加色法混色模型 RGB

减色法混色模型 CMYK

  • C - Cyan - 青色
  • M - Magenta - 红色
  • Y - Yellow - 黄色
  • K - blacK - 黑色(防止与 RGB 的 B 冲突)
  • 上过美术课,应该听过“红黄蓝”三原色的说法,但这和 CMYK 不太一样,实际上,颜料显示颜色的原理是它吸收了所有别的颜色的光,只反射一种颜色,所以颜料三原色其实是红、绿、蓝的补色,也就是:品红、黄、青。因为它们跟红、黄、蓝相近,所以有了这样的说法。
  • 为什么会比三原色多了一色呢?
    • 三种颜色调成黑色,
    • 不是纯粹的黑,三色等量相加之后只能形成一种深灰或深褐(我要五彩斑斓的黑

加色法混色模型 RGB

  • 我们在 CSS 样式中看到的形式如 #RRGGBB 的颜色代码,就是 RGB 颜色的十六进制表示法,其中 RR、GG、BB 分别是两位十六进制数字,表示红、绿、蓝三色通道的色阶。色阶可以表示某个通道的强弱。
  • 但 RGB 并不能表示人眼所见的所有颜色,它只能表示下面的这个区域

人眼看到的颜色vsRGB能表示的颜色

  • RGB 对色彩的描述,对计算机友好,但不够人性化
  • RGB 我们只能大致判断出它偏向于红色、绿色还是蓝色,或者在颜色立方体的大致位置。
  • 以及对比两个 RGB 颜色的时候,我们只能通过对比它们在 RGB 立方体中的相对距离,来判断它们的颜色差异。

RGB 立方体几何表示

  • 但我们对色彩的认识往往先是:颜色是什么,鲜艳不鲜艳,亮还是暗
  • and It’s not easy to to alter an RGB color to produce a lighter variant of the same hue.
    • 这在我们开发中也十分常见,有些时候设计师定下视觉基调和主色,我们需要根据数据情况由前端动态生成颜色值

HSL HSB&HSV

  • CSS 和 Canvas2D 都可以直接支持 HSL 颜色,只有 WebGL 需要做 RGB2HSV 转换。

HSL

H - Hue - 色相 - 0-360°的圆心角
  • H(hue)分量,代表的是人眼所能感知的颜色范围,这些颜色分布在一个平面的色相环上,取值范围是0°到360°的圆心角,每个角度可以代表一种颜色。
  • 色相值的意义在于,我们可以在不改变光感的情况下,通过旋转色相环来改变颜色。
  • 在实际应用中,我们需要记住色相环上的六大主色,用作基本参照:360°/0°红、60°黄、120°绿、180°青、240°蓝、300°洋红,它们在色相环上按照60°圆心角的间隔排列。

HSL 色相环

S - Saturation - 饱和度 - 0~1 或者 0%~100% 间的值
  • 和黑白没有关系,饱和度不控制颜色中混入黑白的多寡
  • 数值越大,颜色中的灰色越少,颜色越鲜艳,呈现一种从灰度到纯色的变化。

HSL S

L - Lightness - 亮度 - 0~1 或者 0%~100% 间的值
  • 控制纯色中的混入的黑白两种颜色
  • 数值越小,色彩越暗,越接近于黑色;数值越大,色彩越亮,越接近于白色。

HSL L

HSB & HSV

  • HSB 又称 HSV
  • HSV 色轮- WebGL 实现
    • 像素坐标转换为极坐标,再除以 2π,就能得到 HSV 的 H 值
    • 鼠标位置的 x、y 坐标来决定 S 和 V 的值
S - Saturation - 饱和度 - 0~1 或者 0%~100%间的值
  • 控制纯色中混入白色的量,值越大,白色越少,颜色越纯;
B - Brightness - 亮度 - 0~1 或者 0%~100%间的值
  • 控制纯色中混入黑色的量,值越大,黑色越少,明度越高

RGB 立方体转换成 HSL / HSV 过程

RGB 立方体转换成 HSL / HSV 过程

  • 我们可以把这个过程简单理解成,将 RGB 颜色的立方体从直角坐标系投影到极坐标系的圆柱上

  • HSV(色相、饱和度、明度)在概念上可以被认为是颜色的倒圆锥体(黑点在下顶点,白色在上底面圆心)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值