如何获取 #xxxxxx 颜色的色调?

在前端开发中,我们常常需要获取颜色的不同属性值,包括红、绿、蓝三原色以及色调、饱和度、亮度等。那么,如何获取一个 Hex 格式的颜色值(例如 #FFA500)的色调呢?本文将为你介绍其中的实现方法。

了解 HSL 和 HSV

在深入讨论如何获取色调之前,我们需要先了解两个与颜色相关的概念:HSL 和 HSV。它们都是一种将颜色表示成三个参数的方式,包括:

  • 色调(Hue):用角度值表示,在圆形色谱上表示颜色。
  • 饱和度(Saturation):表示颜色的强度或纯度,取值范围为 0%-100%。
  • 亮度(Lightness)或明度(Value):表示颜色的明暗程度,取值范围为 0%-100%。

HSL 表示法将颜色表示为三个参数:H, S, L。而 HSV 表示法将颜色表示为三个参数:H, S, V。HSL 更适合描述人眼所感知到的颜色,而 HSV 则更适合进行颜色选择、拾取等交互操作。

从 Hex 色值计算色调

Hex 色值是一种十六进制的颜色表示方法,它由三组两位数的数字表示红、绿、蓝三原色的取值。例如 #FFA500 表示红色的取值为 255,绿色的取值为 165,蓝色的取值为 0。

要获取 Hex 色值的色调,我们需要先将其转换为 HSL 或 HSV 表示法,然后从中获取色调的取值。这里我们以 HSL 为例来实现这个过程。

将 Hex 色值转换为 RGB,再转换为 HSL

首先,我们需要将 Hex 色值转换为 RGB 值。具体的转换方法如下:

-------- ------------- -
  ----- - - --------------------- --- ----
  ----- - - --------------------- --- ----
  ----- - - ---------------------- ----

  ------ - -- -- - --
-

接下来,我们将 RGB 值转换为 HSL 值。具体的转换方法可以参考 Wikipedia 上的公式,实现如下:

-------- ------------- -
  ----- - - ----- - ----
  ----- - - ----- - ----
  ----- - - ----- - ----
  ----- --- - ----------- -- ---
  ----- --- - ----------- -- ---
  --- -- -- --

  -- ---- --- ---- -
    - - --
  - ---- -- ---- --- - -- - -- -- -
    - - -- - --- - -- - ---- - ------
  - ---- -- ---- --- - -- - - -- -
    - - -- - --- - -- - ---- - ----- - ----
  - ---- -- ---- --- -- -
    - - -- - --- - -- - ---- - ----- - ----
  - ---- -- ---- --- -- -
    - - -- - --- - -- - ---- - ----- - ----
  -

  - - ---- - ---- - --

  -- ---- --- ---- -
    - - --
  - ---- -- -- -- ---- -
    - - ---- - ---- - ---- - -----
  - ---- -
    - - ---- - ---- - -- - --- - -----
  -

  ------ - -- --------------

- ----------------------------------------------------------- --------
---------------------------------------------------------------------------------------