UNPKG

chroma-js

Version:

JavaScript library for color conversions

39 lines (30 loc) 1.01 kB
const LAB_CONSTANTS = require('./lab-constants'); const {unpack} = require('../../utils'); const {pow} = Math; /* * L* [0..100] * a [-100..100] * b [-100..100] */ const lab2rgb = (...args) => { args = unpack(args, 'lab'); const [l,a,b] = args; let x,y,z, r,g,b_; y = (l + 16) / 116; x = isNaN(a) ? y : y + a / 500; z = isNaN(b) ? y : y - b / 200; y = LAB_CONSTANTS.Yn * lab_xyz(y); x = LAB_CONSTANTS.Xn * lab_xyz(x); z = LAB_CONSTANTS.Zn * lab_xyz(z); r = xyz_rgb(3.2404542 * x - 1.5371385 * y - 0.4985314 * z); // D65 -> sRGB g = xyz_rgb(-0.9692660 * x + 1.8760108 * y + 0.0415560 * z); b_ = xyz_rgb(0.0556434 * x - 0.2040259 * y + 1.0572252 * z); return [r,g,b_,args.length > 3 ? args[3] : 1]; }; const xyz_rgb = (r) => { return 255 * (r <= 0.00304 ? 12.92 * r : 1.055 * pow(r, 1 / 2.4) - 0.055) } const lab_xyz = (t) => { return t > LAB_CONSTANTS.t1 ? t * t * t : LAB_CONSTANTS.t2 * (t - LAB_CONSTANTS.t0) } module.exports = lab2rgb;