niram
Version:
A javascript library to convert between various css colour formats.
34 lines (33 loc) • 1.11 kB
JavaScript
import { normaliseDegree } from './normalisers.js';
export function rgbToHsl(red, green, blue, alphaFraction = 1) {
const red_ = red / 255;
const green_ = green / 255;
const blue_ = blue / 255;
const C_max = Math.max(red_, green_, blue_);
const C_min = Math.min(red_, green_, blue_);
const C_diff = C_max - C_min;
const levelFraction = (C_max + C_min) / 2;
const satFraction = C_diff / (1 - Math.abs(2 * levelFraction - 1));
const hueDegree = normaliseDegree(getHueDegreeFromRgbFraction(red_, green_, blue_, C_max, C_diff));
return {
hueDegree,
satPercent: satFraction * 100,
levelPercent: levelFraction * 100,
alphaFraction,
};
}
function getHueDegreeFromRgbFraction(red_, green_, blue_, C_max, C_diff) {
if (C_diff == 0) {
return 0;
}
else if (C_max == red_) {
return 60 * (((green_ - blue_) / C_diff) % 6);
}
else if (C_max == green_) {
return 60 * ((blue_ - red_) / C_diff + 2);
}
else if (C_max == blue_) {
return 60 * ((red_ - green_) / C_diff + 4);
}
return 0;
}