chroma-js
Version:
JavaScript library for color conversions
121 lines (107 loc) • 2.87 kB
JavaScript
const labConstants = {
// Corresponds roughly to RGB brighter/darker
Kn: 18,
// D65 standard referent
labWhitePoint: 'd65',
Xn: 0.95047,
Yn: 1,
Zn: 1.08883,
t0: 0.137931034, // 4 / 29
t1: 0.206896552, // 6 / 29
t2: 0.12841855, // 3 * t1 * t1
t3: 0.008856452, // t1 * t1 * t1,
kE: 216.0 / 24389.0,
kKE: 8.0,
kK: 24389.0 / 27.0,
RefWhiteRGB: {
// sRGB
X: 0.95047,
Y: 1,
Z: 1.08883
},
MtxRGB2XYZ: {
m00: 0.4124564390896922,
m01: 0.21267285140562253,
m02: 0.0193338955823293,
m10: 0.357576077643909,
m11: 0.715152155287818,
m12: 0.11919202588130297,
m20: 0.18043748326639894,
m21: 0.07217499330655958,
m22: 0.9503040785363679
},
MtxXYZ2RGB: {
m00: 3.2404541621141045,
m01: -0.9692660305051868,
m02: 0.055643430959114726,
m10: -1.5371385127977166,
m11: 1.8760108454466942,
m12: -0.2040259135167538,
m20: -0.498531409556016,
m21: 0.041556017530349834,
m22: 1.0572251882231791
},
// used in rgb2xyz
As: 0.9414285350000001,
Bs: 1.040417467,
Cs: 1.089532651,
MtxAdaptMa: {
m00: 0.8951,
m01: -0.7502,
m02: 0.0389,
m10: 0.2664,
m11: 1.7135,
m12: -0.0685,
m20: -0.1614,
m21: 0.0367,
m22: 1.0296
},
MtxAdaptMaI: {
m00: 0.9869929054667123,
m01: 0.43230526972339456,
m02: -0.008528664575177328,
m10: -0.14705425642099013,
m11: 0.5183602715367776,
m12: 0.04004282165408487,
m20: 0.15996265166373125,
m21: 0.0492912282128556,
m22: 0.9684866957875502
}
};
export default labConstants;
// taken from https://de.mathworks.com/help/images/ref/whitepoint.html
const ILLUMINANTS = new Map([
// ASTM E308-01
['a', [1.0985, 0.35585]],
// Wyszecki & Stiles, p. 769
['b', [1.0985, 0.35585]],
// C ASTM E308-01
['c', [0.98074, 1.18232]],
// D50 (ASTM E308-01)
['d50', [0.96422, 0.82521]],
// D55 (ASTM E308-01)
['d55', [0.95682, 0.92149]],
// D65 (ASTM E308-01)
['d65', [0.95047, 1.08883]],
// E (ASTM E308-01)
['e', [1, 1, 1]],
// F2 (ASTM E308-01)
['f2', [0.99186, 0.67393]],
// F7 (ASTM E308-01)
['f7', [0.95041, 1.08747]],
// F11 (ASTM E308-01)
['f11', [1.00962, 0.6435]],
['icc', [0.96422, 0.82521]]
]);
export function setLabWhitePoint(name) {
const ill = ILLUMINANTS.get(String(name).toLowerCase());
if (!ill) {
throw new Error('unknown Lab illuminant ' + name);
}
labConstants.labWhitePoint = name;
labConstants.Xn = ill[0];
labConstants.Zn = ill[1];
}
export function getLabWhitePoint() {
return labConstants.labWhitePoint;
}