colorjs.io
Version:
Color space agnostic color manipulation library
63 lines (56 loc) • 1.25 kB
JavaScript
import Color from "./../color.js";
import "./jzazbz.js";
import * as angles from "../angles.js";
Color.defineSpace({
id: "jzczhz",
name: "JzCzHz",
coords: {
Jz: [0, 1],
chroma: [0, 1],
hue: angles.range,
},
inGamut: coords => true,
white: Color.D65,
from: {
jzazbz (jzazbz) {
// Convert to polar form
let [Jz, az, bz] = jzazbz;
let hue;
const ε = 0.000005; // chromatic components much smaller than a,b
if (Math.abs(az) < ε && Math.abs(bz) < ε) {
hue = NaN;
}
else {
hue = Math.atan2(bz, az) * 180 / Math.PI;
}
return [
Jz, // Jz is still Jz
Math.sqrt(az ** 2 + bz ** 2), // Chroma
angles.constrain(hue) // Hue, in degrees [0 to 360)
];
}
},
to: {
jzazbz (jzczhz) {
// Convert from polar form
// debugger;
return [
jzczhz[0], // Jz is still Jz
jzczhz[1] * Math.cos(jzczhz[2] * Math.PI / 180), // az
jzczhz[1] * Math.sin(jzczhz[2] * Math.PI / 180) // bz
];
}
},
parse (str, parsed = Color.parseFunction(str)) {
if (parsed && parsed.name === "jzczhz") {
let Jz = parsed.args[0];
return {
spaceId: "jzczhz",
coords: parsed.args.slice(0, 3),
alpha: parsed.args.slice(3)[0]
};
}
},
});
export default Color;
export {angles};