colorimetry-ts
v0.5.3
Published
Colorimetry for Typescript.
Downloads
12
Maintainers
Readme
colorimetry-ts
A type-safe color science library, written for Javascript.
Installation
npm install colorimetry-ts
Then import as an ES module:
import { color } from "colorimetry-ts";
Features
- Value conversions between most widely-used color spaces
- Supports custom RGB (and non-RGB) color spaces
- Object definitions for common color gamut primaries and illuminants
- Function definitions for common tone response transfer functions
- Color differences
- Includes CIE2000, ITP , CIE1976 (TODO), u′v′
- Supports luminance component compensation
- Color gamut mapping
- Correlated color temperature
- Chromatic adaptation transforms
- ...and more
Examples
- Convert
sRGB
red primary todisplay-p3
RGB encoding (using 8 bits):
const srgbRed = color("srgb", [255, 0, 0], { bitDepth: 8 });
const srgbRedInP3 = srgbRed.toSpace("display-p3", { bitDepth: 8 });
console.log(srgbRedInP3.values);
// output: [ 234, 51, 35 ]
The input/output of RGB values are normalized between 0–1 if no bitDepth
value is passed to the color's context object argument.
- Create an
XYZ
color space converter to convert multiple colors:
const toXyz = color("xyz");
const color1 = color("srgb", [1, 1, 1]);
const color2 = color("display-p3", [1, 1, 1]);
const color3 = color("lab", [100, 0, 0]);
console.log(toXyz(color1).values, toXyz(color2).values, toXyz(color3).values);
// output: [ 76.036, 80.000, 87.125 ],
// [ 76.036, 80.000, 87.125 ],
// [ 95.046, 100.00, 108.91 ]
- Check if two colors are equal/indistinguishable from each other:
// srgb and p3 share the same blue primary
// ...but their luminance is not equal!
const colorA = color("srgb", [0, 0, 1]);
const colorB = color("display-p3", [0, 0, 1]);
console.log(colorA.equals(colorB));
// output: false
// conversions should always be equal
console.log(srgbRed.equals(srgbRedInP3));
// output: true
Note: Color value conversions using color()
require absolute color spaces for both source and destination spaces, as Color
object values are supposed to be non-ambiguous. For agnostic conversions, import the relevant function, e.g. ycbcrFromRgb()
.
Roadmap
- Possibly support BigInt to avoid floating-point errors, for use in reference conversion values