UNPKG

lib-colors

Version:

Simple node.js library for work with colors

72 lines (71 loc) 2.12 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.cmykToLab = cmykToLab; const xyz_to_lab_helper_1 = require("../../lab/helpers/xyz_to_lab.helper"); function cmykToLab(cmyk) { const xyz = cmykToXyz(cmyk); return (0, xyz_to_lab_helper_1.xyzToLab)(xyz); } const baseReflectance = { c: { x: 0.1, y: 0.2, z: 0.8 }, m: { x: 0.6, y: 0.2, z: 0.4 }, y: { x: 0.8, y: 0.9, z: 0.1 }, k: { x: 0.05, y: 0.05, z: 0.05 }, }; function cmykToXyz(cmyk) { let { c, m, y, k, a } = { ...cmyk }; c /= 100; m /= 100; y /= 100; k /= 100; const reflectance = calculateReflectance(c, m, y, k); const illuminantD65 = { x: 95.047, y: 100.0, z: 108.883 }; return { x: reflectance.x * illuminantD65.x, y: reflectance.y * illuminantD65.y, z: reflectance.z * illuminantD65.z, alpha: a, }; } function calculateReflectance(c, m, y, k) { let r = { x: 0.95, y: 0.95, z: 0.95 }; const blackEffect = 1 - k * 0.9; r.x *= blackEffect; r.y *= blackEffect; r.z *= blackEffect; const cEffect = { x: 1 - c * (1 - baseReflectance.c.x), y: 1 - c * (1 - baseReflectance.c.y), z: 1 - c * (1 - baseReflectance.c.z), }; r.x *= cEffect.x; r.y *= cEffect.y; r.z *= cEffect.z; const mEffect = { x: 1 - m * (1 - baseReflectance.m.x), y: 1 - m * (1 - baseReflectance.m.y), z: 1 - m * (1 - baseReflectance.m.z), }; r.x *= mEffect.x; r.y *= mEffect.y; r.z *= mEffect.z; const yEffect = { x: 1 - y * (1 - baseReflectance.y.x), y: 1 - y * (1 - baseReflectance.y.y), z: 1 - y * (1 - baseReflectance.y.z), }; r.x *= yEffect.x; r.y *= yEffect.y; r.z *= yEffect.z; const totalInk = c + m + y + k; const dotGain = Math.min(0.3, totalInk * 0.1); const gainFactor = 1 - dotGain; r.x *= gainFactor; r.y *= gainFactor; r.z *= gainFactor; return { x: Math.max(0, Math.min(1, r.x)), y: Math.max(0, Math.min(1, r.y)), z: Math.max(0, Math.min(1, r.z)), }; }