UNPKG

colorjs.io

Version:

Color space agnostic color manipulation library

63 lines (56 loc) 1.25 kB
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};