Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/erikyo/lab-color
https://github.com/erikyo/lab-color
Last synced: 13 days ago
JSON representation
- Host: GitHub
- URL: https://github.com/erikyo/lab-color
- Owner: erikyo
- Created: 2024-05-03T23:44:06.000Z (8 months ago)
- Default Branch: master
- Last Pushed: 2024-05-04T16:59:23.000Z (8 months ago)
- Last Synced: 2024-10-27T16:38:52.385Z (2 months ago)
- Language: TypeScript
- Size: 13.7 KB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Contributing: CONTRIBUTING.md
- Code of conduct: CODE_OF_CONDUCT.md
Awesome Lists containing this project
README
# Lab-color
This npm module provides a robust method for converting colors from Lab (CIELAB) space to RGB space with maximum accuracy.
Commonly the lab color space is converted from other modules in a fast but inaccurate manner.
This module provides a robust method for converting colors from Lab (CIELAB) space to RGB space with maximum accuracy.
With this module you can decide the white point of the color space you want to convert to, or the RGB color space you want to convert from.Lab color space is a color-opponent space with dimensions for lightness and the color-opponent dimensions a and b. RGB, on the other hand, is an additive color model where red, green, and blue light are added together in various ways to reproduce a broad array of colors.
All the formulas are taken from the studies of [Bruce Justin Lindbloom](http://www.brucelindbloom.com/).
You can find more information about the CIE color space here: [CIE Color Space](http://www.brucelindbloom.com/index.html?ColorDifferenceCalc.html)## Installation
You can install this module via npm:
```bash
npm install lab-color --save-dev
```## Usage
```javascript
import { rgbToLab } from 'lab-color';// Convert a Lab color to RGB
const labColor = { l: 50, a: 20, b: -10 };
const options = {
refWhite: WHITE.D50,
rgbModel: MODEL.sRGB,
gamma: GAMMA.sRGB,
adaptationMethod: ADAPTATION.Bradford
};
const rgbColor = labToRgb(labColor, options);
console.log(rgbColor); // { r: 120, g: 180, b: 200 }
```## API
### `rgbToLab`
Converts an RGB color to a Lab color representation.
**Arguments:**
- `rgb` (`RGB`): An object representing the RGB color with properties `R`, `G`, and `B`, each ranging from 0 to 255.
- `options` (`OPTIONS`, optional): An optional object containing additional conversion options.**Returns:**
- `LAB`: An object representing the Lab color with properties `L`, `a`, and `b`.### `rgbToXyz`
Converts an RGB color to an XYZ color representation.
**Arguments:**
- `rgb` (`RGB`): An object representing the RGB color with properties `R`, `G`, and `B`, each ranging from 0 to 255.
- `options` (`OPTIONS`, optional): An optional object containing additional conversion options.**Returns:**
- `XYZ`: An object representing the XYZ color with properties `X`, `Y`, and `Z`.### `labToRgb`
Converts a Lab color to an RGB color representation.
**Arguments:**
- `lab` (`LAB`): An object representing the Lab color with properties `L`, `a`, and `b`.
- `options` (`OPTIONS`, optional): An optional object containing additional conversion options.**Returns:**
- `RGB`: An object representing the RGB color with properties `R`, `G`, and `B`, each ranging from 0 to 255.### `labToXyz`
Converts a Lab color to an XYZ color representation.
**Arguments:**
- `lab` (`LAB`): An object representing the Lab color with properties `L`, `a`, and `b`.
- `options` (`OPTIONS`, optional): An optional object containing additional conversion options.**Returns:**
- `XYZ`: An object representing the XYZ color with properties `X`, `Y`, and `Z`.### Options
- `refWhite`: The reference white used to convert the color, and is used in the white interpretation of the CIE color system.
When converting to color temperature, there are many different colors that map onto the same color temperature.
Robertson's method has been implemented to perform this conversion, and if the color temperature field is blank after doing a calculation, that means the color was out of the range that Robertson's method supports. When converting from color temperature, the standard CIE method used is only valid for color temperatures in the range [4000K, 25000K]`A, B, C, D50, D55, D65, D75, E, F2, F7, F11`
- `MODEL`: The color model used to change the colorimetric interpretation of the RGB color values.
Included in this list are all the RGB working spaces that ship with Adobe Photoshop, as well as several others that have emerged as a result of research efforts from various individuals (details [here](http://www.brucelindbloom.com/WorkingSpaceAuthors.html)).`AdobeRGB, AppleRGB, BestRGB, BetaRGB, BruceRGB, CI, ColorMatch, DonRGB, ECI_RGB_v2, EktaSpacePS5, NTSC , PAL_SECAM , ProPhoto , SMPTE_C , sRGB , WideGamut`
- `ADAPTATION`: The color adaptation method used to convert the color.
The differences among the three methods lie in the definition of the cone response domains`Bradford, von_Kries, XYZ_Scaling, None`
- `GAMMA`: The gamma correction used to convert the color allowing the native RGB companding function to be overridden.
This is useful for computing linear RGB values. G1_0, G1_8, G2_2 stands for gamma 1.0, 1.8, 2.2 respectively while sRGB and L stands for sRGB and linear respectively`G1_0, G1_8, G2_2, sRGB, L`
## Examples
LAB to RGB conversion:
```javascriptimport { labToRgb } from 'lab-color';
const labColor = { l: 50, a: 20, b: -10 };
const rgbColor = labToRgb(labColor, {
refWhite: WHITE.D50,
rgbModel: MODEL.sRGB,
gamma: GAMMA.sRGB,
adaptationMethod: ADAPTATION.Bradford
});
console.log(rgbColor); // { r: 120, g: 180, b: 200 }```
RGB to LAB conversion:
```javascriptimport { rgbToLab } from 'lab-color';
const rgbColor = { r: 120, g: 180, b: 200 };
const labColor = rgbToLab(rgbColor, {
refWhite: WHITE.D50,
rgbModel: MODEL.sRGB,
gamma: GAMMA.sRGB,
adaptationMethod: ADAPTATION.Bradford
});
console.log(labColor); // { l: 50, a: 20, b: -10 }
```## References and inspirations
- [Bruce Lindbloom color conversion algorithm collection](http://www.brucelindbloom.com/index.html?ColorDifferenceCalc.html)
- [CIELAB color space](https://en.wikipedia.org/wiki/Lab_color_space)
- [RGB color model](https://en.wikipedia.org/wiki/RGB_color_model)