c0lor
Version:
Color space conversions
74 lines (60 loc) • 1.28 kB
JavaScript
var Lab, N, O, e, e3, f, fDeriv, fInv, foo, labCsPrototype, pow, xyz;
O = require("ut1l/create/object");
xyz = require("../XYZ");
Lab = require("../Lab");
pow = Math.pow;
N = 4 / 29;
e3 = 216 / 24389;
foo = 841 / 108;
e = 6 / 29;
f = function(w) {
if (w > e3) {
return pow(w, 1 / 3);
} else {
return foo * w + N;
}
};
fInv = function(w) {
if (w > e) {
return pow(w, 3);
} else {
return (w - N) / foo;
}
};
fDeriv = function(w) {
if (w > e3) {
return 1 / (3 * (pow(w, 2 / 3)));
} else {
return foo;
}
};
labCsPrototype = {
Lab: function(XYZ, T) {
var l;
if (T == null) {
T = Lab();
}
l = f(XYZ.Y / this.white.Y);
T.L = 116 * l - 16;
T.a = 500 * ((f(XYZ.X / this.white.X)) - l);
T.b = 200 * (l - (f(XYZ.Z / this.white.Z)));
return T;
},
XYZ: function(Lab, T) {
var fy;
if (T == null) {
T = xyz();
}
fy = (Lab.L + 16) / 116;
T.X = (fInv(fy + Lab.a / 500)) * this.white.X;
T.Y = (fInv(fy)) * this.white.Y;
T.Z = (fInv(fy - Lab.b / 200)) * this.white.Z;
return T;
},
LabderivL: function(Y) {
return 116 * (fDeriv(Y / this.white.Y)) / this.white.Y;
}
};
module.exports = O((function(white) {
this.white = white;
}), labCsPrototype);