graphicek/client/src/utils/hsl2Rgb.ts

45 lines
781 B
TypeScript
Raw Normal View History

2024-03-28 15:58:28 +01:00
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)]
}
}