chroma-js
Version:
JavaScript library for color conversions
46 lines (37 loc) • 1.04 kB
JavaScript
import { unpack, min, max } from '../../utils/index.js';
/*
* supported arguments:
* - rgb2hsl(r,g,b)
* - rgb2hsl(r,g,b,a)
* - rgb2hsl([r,g,b])
* - rgb2hsl([r,g,b,a])
* - rgb2hsl({r,g,b,a})
*/
const rgb2hsl = (...args) => {
args = unpack(args, 'rgba');
let [r, g, b] = args;
r /= 255;
g /= 255;
b /= 255;
const minRgb = min(r, g, b);
const maxRgb = max(r, g, b);
const l = (maxRgb + minRgb) / 2;
let s, h;
if (maxRgb === minRgb) {
s = 0;
h = Number.NaN;
} else {
s =
l < 0.5
? (maxRgb - minRgb) / (maxRgb + minRgb)
: (maxRgb - minRgb) / (2 - maxRgb - minRgb);
}
if (r == maxRgb) h = (g - b) / (maxRgb - minRgb);
else if (g == maxRgb) h = 2 + (b - r) / (maxRgb - minRgb);
else if (b == maxRgb) h = 4 + (r - g) / (maxRgb - minRgb);
h *= 60;
if (h < 0) h += 360;
if (args.length > 3 && args[3] !== undefined) return [h, s, l, args[3]];
return [h, s, l];
};
export default rgb2hsl;