情人节给你点颜色看看

示例代码

CMYK用于打印, RGB用于显示屏, 然而二者都不能直观的展示颜色, 于是有了 HSL 和 HSV 坐标系.

简介

今天看看HSL和HSV转化RGB, 维基地址.

HSL与HSV

HSV转换RGB

HSL转换RGB有点烦(我认为是这样的), 维基里面有详细的解释, HSV到比较简单

/**
 * hsv2rgb
 * @param {number} h hue 色相 [0, 360]
 * @param {number} s saturation 饱和度 [0, 1]
 * @param {number} v value 明度 [0, 1]
 * @returns [r, g, b] 分别取值 [0, 255]
 */
function hsv2rgb(
    h: number,
    s: number,
    v: number,
) {
    // 色相
    while(h < 0) {
        h += 360;
    }
    h = h % 360;
    // 饱和度
    s = s < 0? 0: s > 1? 1: s;
    // 明度
    v = (v < 0? 0: v > 1? 1: v)*255;

    let hi = (h/60|0)%6;
    let f = h/60 - hi;
    let p = v*(1-s) | 0;
    let q = v*(1-f*s) | 0;
    let t = v*(1-(1-f)*s) | 0;
    v |= 0;
    switch (hi) {
        case 0: return [v, t, p];
        case 1: return [q, v, p];
        case 2: return [p, v, t];
        case 3: return [p, q, v];
        case 4: return [t, p, v];
        case 5: return [v, p, q];
    }
}