45 lines
781 B
TypeScript
45 lines
781 B
TypeScript
export function hsl2Rgb(
|
|
color: [number, number, number]
|
|
): [number, number, number] {
|
|
let l = color[2]
|
|
|
|
if (color[1] == 0) {
|
|
l = Math.round(l * 255)
|
|
|
|
return [l, l, l]
|
|
} else {
|
|
function hue2rgb(p: number, q: number, t: number) {
|
|
if (t < 0) {
|
|
t += 1
|
|
}
|
|
|
|
if (t > 1) {
|
|
t -= 1
|
|
}
|
|
|
|
if (t < 1 / 6) {
|
|
return p + (q - p) * 6 * t
|
|
}
|
|
|
|
if (t < 1 / 2) {
|
|
return q
|
|
}
|
|
|
|
if (t < 2 / 3) {
|
|
return p + (q - p) * (2 / 3 - t) * 6
|
|
}
|
|
|
|
return p
|
|
}
|
|
|
|
const s = color[1]
|
|
const q = l < 0.5 ? l * (1 + s) : l + s - l * s
|
|
const p = 2 * l - q
|
|
const r = hue2rgb(p, q, color[0] + 1 / 3)
|
|
const g = hue2rgb(p, q, color[0])
|
|
const b = hue2rgb(p, q, color[0] - 1 / 3)
|
|
|
|
return [Math.round(r * 255), Math.round(g * 255), Math.round(b * 255)]
|
|
}
|
|
}
|