37 lines
750 B
JavaScript
37 lines
750 B
JavaScript
/*
|
|
Convert CIE XYZ D65 values to A98 RGB
|
|
|
|
References:
|
|
* https://drafts.csswg.org/css-color/#color-conversion-code
|
|
* http://www.brucelindbloom.com/index.html?Eqn_RGB_XYZ_Matrix.html
|
|
*/
|
|
|
|
const gamma = v => Math.pow(Math.abs(v), 256 / 563) * Math.sign(v);
|
|
|
|
const convertXyz65ToA98 = ({ x, y, z, alpha }) => {
|
|
let res = {
|
|
mode: 'a98',
|
|
r: gamma(
|
|
x * 2.0415879038107465 -
|
|
y * 0.5650069742788597 -
|
|
0.3447313507783297 * z
|
|
),
|
|
g: gamma(
|
|
x * -0.9692436362808798 +
|
|
y * 1.8759675015077206 +
|
|
0.0415550574071756 * z
|
|
),
|
|
b: gamma(
|
|
x * 0.0134442806320312 -
|
|
y * 0.1183623922310184 +
|
|
1.0151749943912058 * z
|
|
)
|
|
};
|
|
if (alpha !== undefined) {
|
|
res.alpha = alpha;
|
|
}
|
|
return res;
|
|
};
|
|
|
|
export default convertXyz65ToA98;
|