UNPKG

chroma-js

Version:

JavaScript library for color conversions

46 lines (37 loc) 1.04 kB
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;