cie-colorconverter
Version:
Convert between CIE color spaces
1 lines • 41.5 kB
Source Map (JSON)
{"version":3,"sources":["../src/consts.ts","../src/Matrix.ts","../src/getRefWhiteMtx.ts","../src/getMtxAdaptation.ts","../src/getRefWhiteRgbMtx.ts","../src/getRgbToXyzMtx.ts","../src/getGammaValue.ts","../src/compand.ts","../src/Luv.ts","../src/XYZ.ts","../src/Lab.ts","../src/LCHab.ts","../src/LCHuv.ts","../src/inverseCompand.ts","../src/RGB.ts","../src/xyY.ts"],"sourcesContent":["import {\n AdaptationType,\n GammaModelType,\n RefWhiteType,\n RGBModelType,\n} from \"./types\";\n\nexport const DEFAULT_OPTIONS = {\n REF_WHITE: \"D50\" as RefWhiteType,\n RGB_MODEL: \"sRGB\" as RGBModelType,\n GAMMA_MODEL: \"sRGB\" as GammaModelType,\n ADAPTION: \"Bradford\" as AdaptationType,\n} as const;\n\nexport const kE = 216 / 24389;\nexport const kK = 24389 / 27;\n","export class Matrix {\n /**\n * n x m matrix transposes to an m x n\n */\n static transpose = (A: Matrix_3x3): Matrix_3x3 => {\n const n = A.length || 0;\n const m = A[0]?.length;\n const A_t = Identity_3x3();\n\n for (let i = 0; i < n; i++) {\n for (let j = 0; j < m; j++) {\n A_t[j][i] = A[i][j];\n }\n }\n\n return A_t;\n };\n\n /**\n * Return inverse of a matrix (if invertible)\n * Throws if matrix not invertible.\n */\n static inv = (A: Matrix_3x3): Matrix_3x3 => {\n const res = Identity_3x3();\n const [[a, b, c], [d, e, f], [h, i, j]] = A;\n\n const det =\n a * e * j - a * f * i - b * d * j + b * f * h + c * d * i - c * e * h;\n\n if (det === 0) {\n throw new Error(\"Matrix not invertible\");\n }\n\n const detInv = 1 / det;\n\n res[0][0] = detInv * (e * j - f * i);\n res[0][1] = detInv * (c * i - b * j);\n res[0][2] = detInv * (b * f - c * e);\n\n res[1][0] = detInv * (f * h - d * j);\n res[1][1] = detInv * (a * j - c * h);\n res[1][2] = detInv * (c * d - a * f);\n\n res[2][0] = detInv * (d * i - e * h);\n res[2][1] = detInv * (b * h - a * i);\n res[2][2] = detInv * (a * e - b * d);\n\n return res;\n };\n\n static multiply_3x3_times_triple = (\n A: Matrix_3x3,\n x: NumericTriple,\n ): NumericTriple => {\n const [[a, b, c], [d, e, f], [g, h, i]] = A;\n const [t, u, v] = x;\n\n return [\n a * t + b * u + c * v,\n d * t + e * u + f * v,\n g * t + h * u + i * v,\n ];\n };\n\n static multiply_triple_times_3x3 = (\n x: NumericTriple,\n A: Matrix_3x3,\n ): NumericTriple => {\n const [t, u, v] = x;\n const [[a, b, c], [d, e, f], [g, h, i]] = A;\n\n return [\n a * t + d * u + g * v,\n b * t + e * u + h * v,\n c * t + f * u + i * v,\n ];\n };\n\n static multiply_3x3_times_3x3 = (\n A: Matrix_3x3,\n B: Matrix_3x3,\n ): Matrix_3x3 => {\n const [[a, b, c], [d, e, f], [g, h, i]] = A;\n const [[j, k, l], [m, n, o], [p, q, r]] = B;\n\n return [\n [a * j + b * m + c * p, a * k + b * n + c * q, a * l + b * o + c * r],\n [d * j + e * m + f * p, d * k + e * n + f * q, d * l + e * o + f * r],\n [g * j + h * m + i * p, g * k + h * n + i * q, g * l + h * o + i * r],\n ];\n };\n}\n\nconst Identity_3x3 = (): Matrix_3x3 => [\n [1, 0, 0],\n [0, 1, 0],\n [0, 0, 1],\n];\n\nexport type Matrix_3x3 = [\n [number, number, number],\n [number, number, number],\n [number, number, number],\n];\n\nexport type NumericTriple = readonly [number, number, number];\nexport type FatNumericTriple = readonly [[number], [number], [number]];\n","import { RefWhiteType } from \"./types\";\nimport { NumericTriple } from \"./Matrix\";\n\n// RefWhite Matrix\nexport const getRefWhiteMtx = (refWhite: RefWhiteType): NumericTriple =>\n Map[refWhite] || [1, 1, 1];\n\nconst Map: Record<RefWhiteType, NumericTriple> = {\n A: [1.0985, 1, 0.35585],\n B: [0.99072, 1, 0.85223],\n C: [0.98074, 1, 1.18232],\n D50: [0.96422, 1, 0.82521],\n D55: [0.95682, 1, 0.92149],\n D65: [0.95047, 1, 1.0888],\n D75: [0.94972, 1, 1.22638],\n E: [1, 1, 1],\n F2: [0.99186, 1, 0.67393],\n F7: [0.95041, 1, 1.08747],\n F11: [1.00962, 1, 0.6435],\n};\n","import { AdaptationType } from \"./types\";\nimport { Matrix_3x3 } from \"./Matrix\";\n\n/**\n * Matrix adaptation\n */\nexport const getMtxAdaptation = (adaptation: AdaptationType): Matrix_3x3 =>\n Map[adaptation] || [\n [1, 0, 0],\n [0, 1, 0],\n [0, 0, 1],\n ];\n\nconst Map: Partial<Record<AdaptationType, Matrix_3x3>> = {\n Bradford: [\n [0.8951, -0.7502, 0.0389],\n [0.2664, 1.7135, -0.0685],\n [-0.1614, 0.0367, 1.0296],\n ],\n \"von Kries\": [\n [0.40024, -0.2263, 0],\n [0.7076, 1.16532, 0],\n [-0.08081, 0.0457, 0.91822],\n ],\n};\n","import { RGBModelType } from \"./types\";\nimport { NumericTriple } from \"./Matrix\";\n\n/**\n * RefWhite RGB Matrix\n */\nexport const getRefWhiteRgbMtx = (rgbModel: RGBModelType): NumericTriple =>\n Map[rgbModel];\n\nconst Map: Record<RGBModelType, NumericTriple> = {\n \"Adobe RGB (1998)\": [0.95047, 1, 1.08883],\n AppleRGB: [0.95047, 1, 1.08883],\n \"Best RGB\": [0.96422, 1, 0.82521],\n \"Beta RGB\": [0.96422, 1, 0.82521],\n \"Bruce RGB\": [0.95047, 1, 1.08883],\n \"CIE RGB\": [1, 1, 1],\n \"ColorMatch RGB\": [0.96422, 1, 0.82521],\n \"Don RGB 4\": [0.96422, 1, 0.82521],\n \"ECI RGB v2\": [0.96422, 1, 0.82521],\n \"Ekta Space PS5\": [0.96422, 1, 0.82521],\n \"NTSC RGB\": [0.98074, 1, 1.18232],\n \"PAL/SECAM RGB\": [0.95047, 1, 1.08883],\n \"ProPhoto RGB\": [0.96422, 1, 0.82521],\n \"SMPTE-C RGB\": [0.95047, 1, 1.08883],\n sRGB: [0.95047, 1, 1.08883],\n \"Wide Gamut RGB\": [0.96422, 1, 0.82521],\n};\n","import { RGBModelType } from \"./types\";\nimport { Matrix, Matrix_3x3 } from \"./Matrix\";\nimport { getRefWhiteRgbMtx } from \"./getRefWhiteRgbMtx\";\n\n// RGB to XYZ matrix\n// Values come from table on http://www.brucelindbloom.com/\nexport const getRgbToXyzMtx = (rgbModel: RGBModelType): Matrix_3x3 => {\n let xr, yr, xg, yg, xb, yb;\n switch (rgbModel) {\n case \"Adobe RGB (1998)\": {\n [xr, yr, xg, yg, xb, yb] = [0.64, 0.33, 0.21, 0.71, 0.15, 0.06];\n break;\n }\n case \"AppleRGB\": {\n [xr, yr, xg, yg, xb, yb] = [0.625, 0.34, 0.28, 0.595, 0.155, 0.07];\n break;\n }\n case \"Best RGB\": {\n [xr, yr, xg, yg, xb, yb] = [0.7347, 0.2653, 0.215, 0.775, 0.13, 0.035];\n break;\n }\n case \"Beta RGB\": {\n [xr, yr, xg, yg, xb, yb] = [\n 0.6888, 0.3112, 0.1986, 0.7551, 0.1265, 0.0352,\n ];\n break;\n }\n case \"Bruce RGB\": {\n [xr, yr, xg, yg, xb, yb] = [0.64, 0.33, 0.28, 0.65, 0.15, 0.06];\n break;\n }\n case \"CIE RGB\": {\n [xr, yr, xg, yg, xb, yb] = [0.735, 0.265, 0.274, 0.717, 0.167, 0.009];\n break;\n }\n case \"ColorMatch RGB\": {\n [xr, yr, xg, yg, xb, yb] = [0.63, 0.34, 0.295, 0.605, 0.15, 0.075];\n break;\n }\n case \"Don RGB 4\": {\n [xr, yr, xg, yg, xb, yb] = [0.696, 0.3, 0.215, 0.765, 0.13, 0.035];\n break;\n }\n case \"ECI RGB v2\": {\n [xr, yr, xg, yg, xb, yb] = [0.67, 0.33, 0.21, 0.71, 0.14, 0.08];\n break;\n }\n case \"Ekta Space PS5\": {\n [xr, yr, xg, yg, xb, yb] = [0.695, 0.305, 0.26, 0.7, 0.11, 0.005];\n break;\n }\n case \"NTSC RGB\": {\n [xr, yr, xg, yg, xb, yb] = [0.67, 0.33, 0.21, 0.71, 0.14, 0.08];\n break;\n }\n case \"PAL/SECAM RGB\": {\n [xr, yr, xg, yg, xb, yb] = [0.64, 0.33, 0.29, 0.6, 0.15, 0.06];\n break;\n }\n case \"ProPhoto RGB\": {\n [xr, yr, xg, yg, xb, yb] = [\n 0.7347, 0.2653, 0.1596, 0.8404, 0.0366, 0.0001,\n ];\n break;\n }\n case \"SMPTE-C RGB\": {\n [xr, yr, xg, yg, xb, yb] = [0.63, 0.34, 0.31, 0.595, 0.155, 0.07];\n break;\n }\n case \"sRGB\": {\n [xr, yr, xg, yg, xb, yb] = [0.64, 0.33, 0.3, 0.6, 0.15, 0.06];\n break;\n }\n case \"Wide Gamut RGB\": {\n [xr, yr, xg, yg, xb, yb] = [0.735, 0.265, 0.115, 0.826, 0.157, 0.018];\n break;\n }\n } // End switch\n\n const X_r = xr / yr,\n Y_r = 1,\n Z_r = (1 - xr - yr) / yr,\n X_g = xg / yg,\n Y_g = 1,\n Z_g = (1 - xg - yg) / yg,\n X_b = xb / yb,\n Y_b = 1,\n Z_b = (1 - xb - yb) / yb,\n RW_RGB = getRefWhiteRgbMtx(rgbModel),\n X_W = RW_RGB[0],\n Y_W = RW_RGB[1],\n Z_W = RW_RGB[2];\n\n const [S_r, S_g, S_b] = Matrix.multiply_3x3_times_triple(\n Matrix.inv([\n [X_r, X_g, X_b],\n [Y_r, Y_g, Y_b],\n [Z_r, Z_g, Z_b],\n ]),\n [X_W, Y_W, Z_W],\n );\n\n return Matrix.transpose([\n [S_r * X_r, S_g * X_g, S_b * X_b],\n [S_r * Y_r, S_g * Y_g, S_b * Y_b],\n [S_r * Z_r, S_g * Z_g, S_b * Z_b],\n ]);\n};\n","import { GammaModelType } from \"./types\";\n\nexport const getGammaValue = (Gamma: GammaModelType): number => Map[Gamma] || 1;\n\nconst Map: Record<GammaModelType, number> = {\n \"1.0\": 1,\n \"1.8\": 1.8,\n \"2.2\": 2.2,\n sRGB: -2.2,\n \"L*\": 0,\n};\n","import { GammaModelType } from \"./types\";\nimport { getGammaValue } from \"./getGammaValue\";\n\nexport const compand = (linear: number, gammaModel: GammaModelType): number => {\n let G = getGammaValue(gammaModel);\n\n // Depends on sign of Gamma\n if (G > 0) {\n return linear >= 0 ? Math.pow(linear, 1 / G) : -Math.pow(-linear, 1 / G);\n } else if (G < 0) {\n /** sRGB */\n let sign = 1;\n if (linear < 0) {\n sign = -1;\n linear = -linear;\n }\n return (\n sign *\n (linear <= 0.0031308\n ? linear * 12.92\n : 1.055 * Math.pow(linear, 1.0 / 2.4) - 0.055)\n );\n } else {\n /** L* */\n let sign = 1;\n if (linear < 0) {\n sign = -1;\n linear = -linear;\n }\n return (\n sign *\n (linear <= 216.0 / 24389.0\n ? (linear * 24389.0) / 2700.0\n : 1.16 * Math.pow(linear, 1.0 / 3.0) - 0.16)\n );\n }\n};\n","import { NumericTriple } from \"./Matrix\";\nimport { DEFAULT_OPTIONS, kE, kK } from \"./consts\";\nimport { ConverterOptions } from \"./types\";\nimport { getRefWhiteMtx } from \"./getRefWhiteMtx\";\nimport { XYZToLab, XYZToRGB, XYZToxyY } from \"./XYZ\";\nimport { LabToLCHab } from \"./Lab\";\n\nexport const LuvToLCHuv = (Luv: NumericTriple): NumericTriple => {\n const [L, u, v] = Luv;\n const H = (180 / Math.PI) * Math.atan2(v, u);\n\n return [\n L,\n Math.sqrt(Math.pow(u, 2) + Math.pow(v, 2)),\n H + (H >= 0 ? 0 : 360),\n ];\n};\n\nexport const LuvToXYZ = (\n Luv: NumericTriple,\n { refWhite = DEFAULT_OPTIONS.REF_WHITE }: Pick<ConverterOptions, \"refWhite\"> = {},\n): NumericTriple => {\n const [L, u, v] = Luv;\n\n const Y = L > kK * kE ? Math.pow((L + 16) / 116, 3) : L / kK;\n\n const RefWhite = getRefWhiteMtx(refWhite),\n X_r = RefWhite[0],\n Y_r = RefWhite[1],\n Z_r = RefWhite[2],\n Den = X_r + 15 * Y_r + 3 * Z_r,\n v_0 = (9 * Y_r) / Den,\n u_0 = (4 * X_r) / Den,\n d = Y * ((39 * L) / (v + 13 * L * v_0) - 5),\n c = -1 / 3,\n b = -5 * Y,\n a = (1 / 3) * ((52 * L) / (u + 13 * L * u_0) - 1),\n X = (d - b) / (a - c),\n Z = X * a + b;\n\n return [X, Y, Z];\n};\n\nexport const LuvToxyY = (\n Luv: NumericTriple,\n { refWhite = DEFAULT_OPTIONS.REF_WHITE }: Pick<ConverterOptions, \"refWhite\"> = {},\n): NumericTriple => {\n return XYZToxyY(LuvToXYZ(Luv, { refWhite }), { refWhite });\n};\n\nexport const LuvToLab = (\n Luv: NumericTriple,\n { refWhite = DEFAULT_OPTIONS.REF_WHITE }: Pick<ConverterOptions, \"refWhite\"> = {},\n): NumericTriple => {\n return XYZToLab(LuvToXYZ(Luv, { refWhite }), { refWhite });\n};\n\nexport const LuvToLCHab = (\n Luv: NumericTriple,\n { refWhite = DEFAULT_OPTIONS.REF_WHITE }: Pick<ConverterOptions, \"refWhite\"> = {},\n): NumericTriple => {\n return LabToLCHab(LuvToLab(Luv, { refWhite }));\n};\n\nexport const LuvToRGB = (\n Luv: NumericTriple,\n {\n adaptation = DEFAULT_OPTIONS.ADAPTION,\n refWhite = DEFAULT_OPTIONS.REF_WHITE,\n rgbModel = DEFAULT_OPTIONS.RGB_MODEL,\n gammaModel = DEFAULT_OPTIONS.GAMMA_MODEL,\n }: ConverterOptions = {},\n): NumericTriple => {\n return XYZToRGB(LuvToXYZ(Luv, { refWhite }), {\n adaptation,\n refWhite,\n rgbModel,\n gammaModel,\n });\n};\n","import { Matrix, NumericTriple } from \"./Matrix\";\nimport { DEFAULT_OPTIONS, kE, kK } from \"./consts\";\nimport { ConverterOptions } from \"./types\";\nimport { getRefWhiteMtx } from \"./getRefWhiteMtx\";\nimport { getMtxAdaptation } from \"./getMtxAdaptation\";\nimport { getRefWhiteRgbMtx } from \"./getRefWhiteRgbMtx\";\nimport { getRgbToXyzMtx } from \"./getRgbToXyzMtx\";\nimport { compand } from \"./compand\";\nimport { LabToLCHab } from \"./Lab\";\nimport { LuvToLCHuv } from \"./Luv\";\n\nexport const XYZToLab = (\n XYZ: NumericTriple,\n { refWhite = DEFAULT_OPTIONS.REF_WHITE }: Pick<ConverterOptions, \"refWhite\"> = {},\n): NumericTriple => {\n const X = XYZ[0],\n Y = XYZ[1],\n Z = XYZ[2],\n RefWhite = getRefWhiteMtx(refWhite),\n X_r = RefWhite[0],\n Y_r = RefWhite[1],\n Z_r = RefWhite[2],\n x_r = X / X_r,\n y_r = Y / Y_r,\n z_r = Z / Z_r,\n f_x = x_r > kE ? Math.pow(x_r, 1 / 3) : (kK * x_r + 16) / 116,\n f_y = y_r > kE ? Math.pow(y_r, 1 / 3) : (kK * y_r + 16) / 116,\n f_z = z_r > kE ? Math.pow(z_r, 1 / 3) : (kK * z_r + 16) / 116;\n\n return [116 * f_y - 16, 500 * (f_x - f_y), 200 * (f_y - f_z)];\n};\n\nexport const XYZToLuv = (\n XYZ: NumericTriple,\n { refWhite = DEFAULT_OPTIONS.REF_WHITE }: Pick<ConverterOptions, \"refWhite\"> = {},\n): NumericTriple => {\n const [X, Y, Z] = XYZ,\n RefWhite = getRefWhiteMtx(refWhite),\n X_r = RefWhite[0],\n Y_r = RefWhite[1],\n Z_r = RefWhite[2],\n Den = X + 15 * Y + 3 * Z,\n up = Den > 0 ? (4 * X) / Den : 0,\n vp = Den > 0 ? (9 * Y) / Den : 0,\n urp = (4 * X_r) / (X_r + 15 * Y_r + 3 * Z_r),\n vrp = (9 * Y_r) / (X_r + 15 * Y_r + 3 * Z_r),\n yr = Y / Y_r,\n L = yr > kE ? 116 * Math.pow(yr, 1 / 3) - 16 : kK * yr;\n\n return [L, 13 * L * (up - urp), 13 * L * (vp - vrp)];\n};\n\nexport const XYZToRGB = (\n XYZ: NumericTriple,\n {\n adaptation = DEFAULT_OPTIONS.ADAPTION,\n refWhite = DEFAULT_OPTIONS.REF_WHITE,\n rgbModel = DEFAULT_OPTIONS.RGB_MODEL,\n gammaModel = DEFAULT_OPTIONS.GAMMA_MODEL,\n }: ConverterOptions = {},\n): NumericTriple => {\n let XYZd = XYZ;\n const mtxAdp = getMtxAdaptation(adaptation);\n\n if (adaptation != \"None\") {\n // Get source/domain scale factors\n const [As, Bs, Cs] = Matrix.multiply_triple_times_3x3(\n getRefWhiteMtx(refWhite),\n mtxAdp,\n );\n let [Ad, Bd, Cd] = Matrix.multiply_triple_times_3x3(\n getRefWhiteRgbMtx(rgbModel),\n mtxAdp,\n );\n\n XYZd = Matrix.multiply_triple_times_3x3(\n XYZ,\n Matrix.multiply_3x3_times_3x3(\n mtxAdp,\n Matrix.multiply_3x3_times_3x3(\n [\n [Ad / As, 0, 0],\n [0, Bd / Bs, 0],\n [0, 0, Cd / Cs],\n ],\n Matrix.inv(mtxAdp),\n ),\n ),\n );\n }\n\n const RGB = Matrix.multiply_triple_times_3x3(\n XYZd,\n Matrix.inv(getRgbToXyzMtx(rgbModel)),\n );\n\n return RGB.map(\n (v) => 255 * compand(v, gammaModel),\n ) as unknown as NumericTriple;\n};\n\nexport const XYZToxyY = (\n XYZ: NumericTriple,\n { refWhite = DEFAULT_OPTIONS.REF_WHITE }: Pick<ConverterOptions, \"refWhite\"> = {},\n): NumericTriple => {\n const [X, Y, Z] = XYZ,\n Den = X + Y + Z;\n // Non-zero Den:\n if (Den > 0) {\n return [X / Den, Y / Den, Y];\n }\n // Zero den\n else {\n let [RW_X, RW_Y, RW_Z] = getRefWhiteMtx(refWhite),\n RW_Den = RW_X + RW_Y + RW_Z;\n return [RW_X / RW_Den, RW_Y / RW_Den, Y];\n }\n};\n\nexport const XYZToLCHab = (\n XYZ: NumericTriple,\n { refWhite = DEFAULT_OPTIONS.REF_WHITE }: Pick<ConverterOptions, \"refWhite\"> = {},\n): NumericTriple => {\n return LabToLCHab(XYZToLab(XYZ, { refWhite }));\n};\n\nexport const XYZToLCHuv = (\n XYZ: NumericTriple,\n { refWhite = DEFAULT_OPTIONS.REF_WHITE }: Pick<ConverterOptions, \"refWhite\"> = {},\n): NumericTriple => {\n return LuvToLCHuv(XYZToLuv(XYZ, { refWhite }));\n};\n","import { NumericTriple } from \"./Matrix\";\nimport { DEFAULT_OPTIONS, kE, kK } from \"./consts\";\nimport { ConverterOptions } from \"./types\";\nimport { XYZToLuv, XYZToRGB, XYZToxyY } from \"./XYZ\";\nimport { getRefWhiteMtx } from \"./getRefWhiteMtx\";\nimport { LuvToLCHuv } from \"./Luv\";\n\nexport const LabToLCHab = (Lab: NumericTriple): NumericTriple => {\n const [L, a, b] = Lab;\n\n let H = (180 / Math.PI) * Math.atan2(b, a);\n return [\n L,\n Math.sqrt(Math.pow(a, 2) + Math.pow(b, 2)),\n H + (H >= 0 ? 0 : 360),\n ];\n};\n\nexport const LabToRGB = (\n Lab: NumericTriple,\n {\n adaptation = DEFAULT_OPTIONS.ADAPTION,\n refWhite = DEFAULT_OPTIONS.REF_WHITE,\n rgbModel = DEFAULT_OPTIONS.RGB_MODEL,\n gammaModel = DEFAULT_OPTIONS.GAMMA_MODEL,\n }: ConverterOptions = {},\n): NumericTriple => {\n return XYZToRGB(LabToXYZ(Lab, { refWhite }), {\n adaptation,\n refWhite,\n rgbModel,\n gammaModel,\n });\n};\n\nexport const LabToXYZ = (\n Lab: NumericTriple,\n { refWhite = DEFAULT_OPTIONS.REF_WHITE }: Pick<ConverterOptions, \"refWhite\"> = {},\n): NumericTriple => {\n let L = Lab[0],\n a = Lab[1],\n b = Lab[2],\n f_y = (L + 16) / 116,\n f_x = a / 500 + f_y,\n f_z = f_y - b / 200,\n x_r = Math.pow(f_x, 3) > kE ? Math.pow(f_x, 3) : (116 * f_x - 16) / kK,\n y_r = L > kK * kE ? Math.pow((L + 16) / 116, 3) : L / kK,\n z_r = Math.pow(f_z, 3) > kE ? Math.pow(f_z, 3) : (116 * f_z - 16) / kK,\n RefWhite = getRefWhiteMtx(refWhite);\n\n return [x_r * RefWhite[0], y_r * RefWhite[1], z_r * RefWhite[2]];\n};\n\nexport const LabToxyY = (\n Lab: NumericTriple,\n { refWhite = DEFAULT_OPTIONS.REF_WHITE }: Pick<ConverterOptions, \"refWhite\"> = {},\n): NumericTriple => {\n return XYZToxyY(LabToXYZ(Lab, { refWhite }), { refWhite });\n};\n\nexport const LabToLuv = (\n Lab: NumericTriple,\n { refWhite = DEFAULT_OPTIONS.REF_WHITE }: Pick<ConverterOptions, \"refWhite\"> = {},\n): NumericTriple => {\n return XYZToLuv(LabToXYZ(Lab, { refWhite }), { refWhite });\n};\n\nexport const LabToLCHuv = (\n Lab: NumericTriple,\n { refWhite = DEFAULT_OPTIONS.REF_WHITE }: Pick<ConverterOptions, \"refWhite\"> = {},\n): NumericTriple => {\n return LuvToLCHuv(LabToLuv(Lab, { refWhite }));\n};\n","import { NumericTriple } from \"./Matrix\";\nimport { LabToXYZ } from \"./Lab\";\nimport { DEFAULT_OPTIONS } from \"./consts\";\nimport { ConverterOptions } from \"./types\";\nimport { XYZToLuv, XYZToRGB, XYZToxyY } from \"./XYZ\";\nimport { LuvToLCHuv } from \"./Luv\";\n\nexport const LCHabToLab = (LCH: NumericTriple): NumericTriple => {\n const [L, C, H] = LCH;\n return [\n L,\n C * Math.cos((H * Math.PI) / 180),\n C * Math.sin((H * Math.PI) / 180),\n ];\n};\n\nexport const LCHabToXYZ = (\n LCH: NumericTriple,\n { refWhite = DEFAULT_OPTIONS.REF_WHITE }: Pick<ConverterOptions, \"refWhite\"> = {},\n): NumericTriple => {\n return LabToXYZ(LCHabToLab(LCH), { refWhite });\n};\n\nexport const LCHabToxyY = (\n LCH: NumericTriple,\n { refWhite = DEFAULT_OPTIONS.REF_WHITE }: Pick<ConverterOptions, \"refWhite\"> = {},\n): NumericTriple => {\n return XYZToxyY(LabToXYZ(LCHabToLab(LCH), { refWhite }), { refWhite });\n};\n\nexport const LCHabToLuv = (\n LCH: NumericTriple,\n { refWhite = DEFAULT_OPTIONS.REF_WHITE }: Pick<ConverterOptions, \"refWhite\"> = {},\n): NumericTriple => {\n return XYZToLuv(LabToXYZ(LCHabToLab(LCH), { refWhite }), { refWhite });\n};\n\nexport const LCHabToLCHuv = (\n LCH: NumericTriple,\n { refWhite = DEFAULT_OPTIONS.REF_WHITE }: Pick<ConverterOptions, \"refWhite\"> = {},\n): NumericTriple => {\n return LuvToLCHuv(LCHabToLuv(LCH, { refWhite }));\n};\n\nexport const LCHabToRGB = (\n LCH: NumericTriple,\n {\n adaptation = DEFAULT_OPTIONS.ADAPTION,\n refWhite = DEFAULT_OPTIONS.REF_WHITE,\n rgbModel = DEFAULT_OPTIONS.RGB_MODEL,\n gammaModel = DEFAULT_OPTIONS.GAMMA_MODEL,\n }: ConverterOptions = {},\n): NumericTriple => {\n return XYZToRGB(LCHabToXYZ(LCH, { refWhite }), {\n adaptation,\n refWhite,\n rgbModel,\n gammaModel,\n });\n};\n","import { NumericTriple } from \"./Matrix\";\nimport { LuvToXYZ } from \"./Luv\";\nimport { DEFAULT_OPTIONS } from \"./consts\";\nimport { ConverterOptions } from \"./types\";\nimport { XYZToLab, XYZToRGB, XYZToxyY } from \"./XYZ\";\nimport { LabToLCHab } from \"./Lab\";\n\nexport const LCHuvToLuv = (LCH: NumericTriple): NumericTriple => {\n const [L, C, H] = LCH;\n\n return [\n L,\n C * Math.cos((H * Math.PI) / 180),\n C * Math.sin((H * Math.PI) / 180),\n ];\n};\n\nexport const LCHuvToXYZ = (\n LCH: NumericTriple,\n { refWhite = DEFAULT_OPTIONS.REF_WHITE }: Pick<ConverterOptions, \"refWhite\"> = {},\n): NumericTriple => {\n return LuvToXYZ(LCHuvToLuv(LCH), { refWhite });\n};\n\nexport const LCHuvToxyY = (\n LCH: NumericTriple,\n { refWhite = DEFAULT_OPTIONS.REF_WHITE }: Pick<ConverterOptions, \"refWhite\"> = {},\n): NumericTriple => {\n return XYZToxyY(LCHuvToXYZ(LCH, { refWhite }), { refWhite });\n};\n\nexport const LCHuvToLab = (\n LCH: NumericTriple,\n { refWhite = DEFAULT_OPTIONS.REF_WHITE }: Pick<ConverterOptions, \"refWhite\"> = {},\n): NumericTriple => {\n return XYZToLab(LCHuvToXYZ(LCH, { refWhite }), { refWhite });\n};\n\nexport const LCHuvToLCHab = (\n LCH: NumericTriple,\n { refWhite = DEFAULT_OPTIONS.REF_WHITE }: Pick<ConverterOptions, \"refWhite\"> = {},\n): NumericTriple => {\n return LabToLCHab(LCHuvToLab(LCH, { refWhite }));\n};\n\nexport const LCHuvToRGB = (\n LCH: NumericTriple,\n {\n adaptation = DEFAULT_OPTIONS.ADAPTION,\n refWhite = DEFAULT_OPTIONS.REF_WHITE,\n rgbModel = DEFAULT_OPTIONS.RGB_MODEL,\n gammaModel = DEFAULT_OPTIONS.GAMMA_MODEL,\n }: ConverterOptions = {},\n): NumericTriple => {\n return XYZToRGB(LCHuvToXYZ(LCH, { refWhite }), {\n adaptation,\n refWhite,\n rgbModel,\n gammaModel,\n });\n};\n","import { GammaModelType } from \"./types\";\nimport { getGammaValue } from \"./getGammaValue\";\n\n/**\n * Inverse compand function\n */\nexport const inverseCompand = (\n companded: number,\n gammaModel: GammaModelType,\n): number => {\n const G = getGammaValue(gammaModel);\n\n if (G > 0) {\n return companded >= 0 ? Math.pow(companded, G) : -Math.pow(-companded, G);\n } else if (G < 0) {\n /** sRGB */\n let sign = 1;\n if (companded < 0) {\n sign = -1;\n companded = -companded;\n }\n return (\n sign *\n (companded <= 0.04045\n ? companded / 12.92\n : Math.pow((companded + 0.055) / 1.055, 2.4))\n );\n } else {\n /** L* */\n let sign = 1;\n if (companded < 0) {\n sign = -1;\n companded = -companded;\n }\n return (\n sign *\n (companded <= 0.08\n ? (2700.0 * companded) / 24389.0\n : (((1000000.0 * companded + 480000.0) * companded + 76800.0) *\n companded +\n 4096.0) /\n 1560896.0)\n );\n }\n};\n","import { Matrix, NumericTriple } from \"./Matrix\";\nimport { ConverterOptions } from \"./types\";\nimport { inverseCompand } from \"./inverseCompand\";\nimport { DEFAULT_OPTIONS } from \"./consts\";\nimport { getMtxAdaptation } from \"./getMtxAdaptation\";\nimport { getRefWhiteRgbMtx } from \"./getRefWhiteRgbMtx\";\nimport { getRefWhiteMtx } from \"./getRefWhiteMtx\";\nimport { getRgbToXyzMtx } from \"./getRgbToXyzMtx\";\nimport { XYZToLab, XYZToLuv, XYZToxyY } from \"./XYZ\";\nimport { LabToLCHab } from \"./Lab\";\nimport { LuvToLCHuv } from \"./Luv\";\n\nexport const RGBToXYZ = (\n RGB: NumericTriple,\n {\n adaptation = DEFAULT_OPTIONS.ADAPTION,\n rgbModel = DEFAULT_OPTIONS.RGB_MODEL,\n gammaModel = DEFAULT_OPTIONS.GAMMA_MODEL,\n refWhite = DEFAULT_OPTIONS.REF_WHITE,\n }: ConverterOptions = {},\n): NumericTriple => {\n // utils\n const MtxAdp = getMtxAdaptation(adaptation);\n const Mtx_RefWhiteRGB = getRefWhiteRgbMtx(rgbModel);\n const Mtx_RefWhite = getRefWhiteMtx(refWhite);\n const Mtx_RGB2XYZ = getRgbToXyzMtx(rgbModel);\n\n // Inverse compound the values\n RGB = RGB.map((v) =>\n inverseCompand(v / 255, gammaModel),\n ) as unknown as NumericTriple;\n // Linear RGB to XYZ\n let XYZ = Matrix.multiply_triple_times_3x3(RGB, Mtx_RGB2XYZ);\n\n // Adaptation if necessary\n if (adaptation != \"None\") {\n // Get source/domain scale factors\n const [As, Bs, Cs] = Matrix.multiply_triple_times_3x3(\n Mtx_RefWhiteRGB,\n MtxAdp,\n );\n const [Ad, Bd, Cd] = Matrix.multiply_triple_times_3x3(Mtx_RefWhite, MtxAdp);\n\n return Matrix.multiply_triple_times_3x3(\n XYZ,\n Matrix.multiply_3x3_times_3x3(\n MtxAdp,\n Matrix.multiply_3x3_times_3x3(\n [\n [Ad / As, 0, 0],\n [0, Bd / Bs, 0],\n [0, 0, Cd / Cs],\n ],\n Matrix.inv(MtxAdp),\n ),\n ),\n );\n } else {\n return XYZ;\n }\n};\n\nexport const RGBToLab = (\n RGB: NumericTriple,\n {\n adaptation = DEFAULT_OPTIONS.ADAPTION,\n rgbModel = DEFAULT_OPTIONS.RGB_MODEL,\n gammaModel = DEFAULT_OPTIONS.GAMMA_MODEL,\n refWhite = DEFAULT_OPTIONS.REF_WHITE,\n }: ConverterOptions = {},\n): NumericTriple => {\n return XYZToLab(\n RGBToXYZ(RGB, { adaptation, rgbModel, gammaModel, refWhite }),\n { refWhite },\n );\n};\n\nexport const RGBToxyY = (\n RGB: NumericTriple,\n {\n adaptation = DEFAULT_OPTIONS.ADAPTION,\n rgbModel = DEFAULT_OPTIONS.RGB_MODEL,\n gammaModel = DEFAULT_OPTIONS.GAMMA_MODEL,\n refWhite = DEFAULT_OPTIONS.REF_WHITE,\n }: ConverterOptions = {},\n): NumericTriple => {\n return XYZToxyY(\n RGBToXYZ(RGB, { adaptation, rgbModel, refWhite, gammaModel }),\n { refWhite },\n );\n};\n\nexport const RGBToLCHab = (\n RGB: NumericTriple,\n {\n adaptation = DEFAULT_OPTIONS.ADAPTION,\n rgbModel = DEFAULT_OPTIONS.RGB_MODEL,\n gammaModel = DEFAULT_OPTIONS.GAMMA_MODEL,\n refWhite = DEFAULT_OPTIONS.REF_WHITE,\n }: ConverterOptions = {},\n): NumericTriple => {\n return LabToLCHab(\n RGBToLab(RGB, { adaptation, rgbModel, refWhite, gammaModel }),\n );\n};\n\nexport const RGBToLuv = (\n RGB: NumericTriple,\n {\n adaptation = DEFAULT_OPTIONS.ADAPTION,\n rgbModel = DEFAULT_OPTIONS.RGB_MODEL,\n gammaModel = DEFAULT_OPTIONS.GAMMA_MODEL,\n refWhite = DEFAULT_OPTIONS.REF_WHITE,\n }: ConverterOptions = {},\n): NumericTriple => {\n return XYZToLuv(\n RGBToXYZ(RGB, { adaptation, rgbModel, refWhite, gammaModel }),\n { refWhite },\n );\n};\n\nexport const RGBToLCHuv = (\n RGB: NumericTriple,\n {\n adaptation = DEFAULT_OPTIONS.ADAPTION,\n rgbModel = DEFAULT_OPTIONS.RGB_MODEL,\n gammaModel = DEFAULT_OPTIONS.GAMMA_MODEL,\n refWhite = DEFAULT_OPTIONS.REF_WHITE,\n }: ConverterOptions = {},\n): NumericTriple => {\n return LuvToLCHuv(\n RGBToLuv(RGB, { adaptation, rgbModel, refWhite, gammaModel }),\n );\n};\n","import { NumericTriple } from \"./Matrix\";\nimport { DEFAULT_OPTIONS, kE, kK } from \"./consts\";\nimport { ConverterOptions } from \"./types\";\nimport { XYZToLab, XYZToLuv, XYZToRGB } from \"./XYZ\";\nimport { LabToLCHab } from \"./Lab\";\nimport { LuvToLCHuv } from \"./Luv\";\n\nexport const xyYToXYZ = (xyY: NumericTriple): NumericTriple => {\n const [x, y, Y] = xyY;\n if (y < 0.000001) {\n return [0, 0, 0];\n } else {\n return [(x * Y) / y, Y, ((1 - x - y) * Y) / y];\n }\n};\n\nexport const xyYToLab = (\n xyY: NumericTriple,\n { refWhite = DEFAULT_OPTIONS.REF_WHITE }: Pick<ConverterOptions, \"refWhite\"> = {},\n): NumericTriple => {\n return XYZToLab(xyYToXYZ(xyY), { refWhite });\n};\n\nexport const xyYToLCHab = (\n xyY: NumericTriple,\n { refWhite = DEFAULT_OPTIONS.REF_WHITE }: Pick<ConverterOptions, \"refWhite\"> = {},\n): NumericTriple => {\n return LabToLCHab(XYZToLab(xyYToXYZ(xyY), { refWhite }));\n};\n\nexport const xyYToLuv = (\n xyY: NumericTriple,\n { refWhite = DEFAULT_OPTIONS.REF_WHITE }: Pick<ConverterOptions, \"refWhite\"> = {},\n): NumericTriple => {\n return XYZToLuv(xyYToXYZ(xyY), { refWhite });\n};\n\nexport const xyYToLCHuv = (\n xyY: NumericTriple,\n { refWhite = DEFAULT_OPTIONS.REF_WHITE }: Pick<ConverterOptions, \"refWhite\"> = {},\n): NumericTriple => {\n return LuvToLCHuv(XYZToLuv(xyYToXYZ(xyY), { refWhite }));\n};\n\nexport const xyYToRGB = (\n xyY: NumericTriple,\n {\n adaptation = DEFAULT_OPTIONS.ADAPTION,\n refWhite = DEFAULT_OPTIONS.REF_WHITE,\n rgbModel = DEFAULT_OPTIONS.RGB_MODEL,\n gammaModel = DEFAULT_OPTIONS.GAMMA_MODEL,\n }: ConverterOptions = {},\n): NumericTriple => {\n return XYZToRGB(xyYToXYZ(xyY), {\n adaptation,\n rgbModel,\n refWhite,\n gammaModel,\n });\n};\n"],"mappings":"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","names":[]}