chroma-js
Version:
JavaScript library for color conversions
48 lines (43 loc) • 1.13 kB
JavaScript
import { unpack } from '../../utils/index.js';
const { floor } = Math;
const hsv2rgb = (...args) => {
args = unpack(args, 'hsv');
let [h, s, v] = args;
let r, g, b;
v *= 255;
if (s === 0) {
r = g = b = v;
} else {
if (h === 360) h = 0;
if (h > 360) h -= 360;
if (h < 0) h += 360;
h /= 60;
const i = floor(h);
const f = h - i;
const p = v * (1 - s);
const q = v * (1 - s * f);
const t = v * (1 - s * (1 - f));
switch (i) {
case 0:
[ ] = [v, t, p];
break;
case 1:
[ ] = [q, v, p];
break;
case 2:
[ ] = [p, v, t];
break;
case 3:
[ ] = [p, q, v];
break;
case 4:
[ ] = [t, p, v];
break;
case 5:
[ ] = [v, p, q];
break;
}
}
return [r, g, b, args.length > 3 ? args[3] : 1];
};
export default hsv2rgb;