📜  javascript 将 rgb 转换为 hsl - Javascript (1)

📅  最后修改于: 2023-12-03 14:42:33.215000             🧑  作者: Mango

Javascript:将 RGB 转换为 HSL

RGB 是一种常用的颜色表达方式,其中 R 代表红色,G 代表绿色,B 代表蓝色。而 HSL 则是一种基于色相、饱和度和亮度的颜色表达方式。在 web 开发中,HSL 更加方便调节颜色的各项属性。本篇文章将会介绍如何通过 Javascript 将 RGB 颜色转换为 HSL 颜色。

RGB 转 HSL

RGB 和 HSL 之间的转换需要一些数学计算。假设我们有一个 RGB 颜色值为:rgb(100, 200, 50)。那么如何将其转换为 HSL 呢?

步骤如下:

  1. 首先,将 R、G、B 的值除以 255,得到它们的百分比值。因此,在本例中,我们得到下面的值:

    R = 100 / 255 = 0.392
    G = 200 / 255 = 0.784
    B = 50 / 255 = 0.196
    
  2. 然后,找出最大值和最小值。对于上述颜色,最大值为 G,最小值为 B。因此,在本例中,我们得到下面的值:

    MaxValue = G = 0.784
    MinValue = B = 0.196
    
  3. 接下来,计算色调(H):

    如果 MaxValue 和 MinValue 相等,则色调为 0。

    否则,色调的计算如下:

    If MaxValue is R, then H = (G - B) / (MaxValue - MinValue) * 60
    If MaxValue is G, then H = (2 + (B - R) / (MaxValue - MinValue)) * 60
    If MaxValue is B, then H = (4 + (R - G) / (MaxValue - MinValue)) * 60
    

    在本例中,我们得到:

    H = (2 + (0.196 - 0.392) / (0.784 - 0.196)) * 60 = 98.4°
    
  4. 接下来,计算饱和度(S):

    If MaxValue and MinValue are both 0, then S = 0.
    If MaxValue and MinValue are both 1, then S = 0.
    Otherwise, S = (MaxValue - MinValue) / (1 - |MaxValue + MinValue - 1|)
    

    在本例中,我们得到:

    S = (0.784 - 0.196) / (1 - |0.784 + 0.196 - 1|) = 0.636
    
  5. 最后,计算亮度(L):

    L = (MaxValue + MinValue) / 2
    

    在本例中,我们得到:

    L = (0.784 + 0.196) / 2 = 0.49
    

因此,RGB 颜色值 rgb(100, 200, 50) 可以转换为 HSL 颜色值 hsl(98.4, 63.6%, 49%)

Javascript 代码实现

下面是通过 Javascript 将 RGB 转换为 HSL 的代码实现。本代码会将 RGB 颜色值转换为 HSL 颜色值,并返回一个包含色调、饱和度和亮度值的对象。

function rgb2hsl(r, g, b) {
  // 将 RGB 值转换为百分比值
  r /= 255;
  g /= 255;
  b /= 255;

  // 找出最大值和最小值
  const max = Math.max(r, g, b);
  const min = Math.min(r, g, b);

  // 色调计算
  let h;
  if (max === min) {
    h = 0; // 灰色
  } else if (max === r) {
    h = ((g - b) / (max - min) + 6) % 6 * 60;
  } else if (max === g) {
    h = ((b - r) / (max - min) + 2) * 60;
  } else if (max === b) {
    h = ((r - g) / (max - min) + 4) * 60;
  }

  // 饱和度计算
  const s = max === min ? 0 : (max - min) / (1 - Math.abs(max + min - 1));

  // 亮度计算
  const l = (max + min) / 2;

  return { h, s, l };
}

// 示例
const { h, s, l } = rgb2hsl(100, 200, 50);
console.log(`hsl(${h}, ${s}%, ${l}%)`); // hsl(98.4, 63.6%, 49%)
总结

通过本文,我们介绍了将 RGB 颜色转换为 HSL 颜色的步骤,并提供了 Javascript 代码实现。接下来,你可以在自己的项目中使用 HSL 颜色来更方便地控制各项颜色属性。