UNPKG

niram

Version:

A javascript library to convert between various css colour formats.

39 lines (38 loc) 1.59 kB
import { numberTo2Hex } from './hex.js'; import { normaliseFraction, normaliseDegree } from './normalisers.js'; export function hslToRgb(type, hueDegree, satPercent, levelPercent, alphaFraction = 1) { const satFraction = normaliseFraction(Number(satPercent) / 100); const levelFraction = normaliseFraction(Number(levelPercent) / 100); const c = (1 - Math.abs(2 * levelFraction - 1)) * satFraction; const m = levelFraction - c / 2; const { red_, green_, blue_ } = getRgbFraction(normaliseDegree(hueDegree), c); return { type, redHex: numberTo2Hex(((red_ + m) * 255).toFixed()), greenHex: numberTo2Hex(((green_ + m) * 255).toFixed()), blueHex: numberTo2Hex(((blue_ + m) * 255).toFixed()), alphaFraction: normaliseFraction(alphaFraction), }; } function getRgbFraction(hueDegree, c) { const x = c * (1 - Math.abs(((hueDegree / 60) % 2) - 1)); if (0 <= hueDegree && hueDegree < 60) { return { red_: c, green_: x, blue_: 0 }; } else if (60 <= hueDegree && hueDegree < 120) { return { red_: x, green_: c, blue_: 0 }; } else if (120 <= hueDegree && hueDegree < 180) { return { red_: 0, green_: c, blue_: x }; } else if (180 <= hueDegree && hueDegree < 240) { return { red_: 0, green_: x, blue_: c }; } else if (240 <= hueDegree && hueDegree < 300) { return { red_: x, green_: 0, blue_: c }; } else if (300 <= hueDegree && hueDegree < 360) { return { red_: c, green_: 0, blue_: x }; } return { red_: 0, green_: 0, blue_: 0 }; }