Skip to content

A type-safe color science library, written for Javascript.

License

Notifications You must be signed in to change notification settings

dylanraga/colorimetry-ts

Repository files navigation

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 to display-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

About

A type-safe color science library, written for Javascript.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published