color-bits 0.1.0 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +82 -2
- package/benchmarks/index.ts +35 -0
- package/build/bit.d.ts +3 -0
- package/{src/bit.ts → build/bit.js} +15 -13
- package/build/bit.js.map +1 -0
- package/build/convert.d.ts +23 -0
- package/build/convert.js +347 -0
- package/build/convert.js.map +1 -0
- package/build/core.d.ts +27 -0
- package/build/core.js +75 -0
- package/build/core.js.map +1 -0
- package/build/format.d.ts +24 -0
- package/build/format.js +133 -0
- package/build/format.js.map +1 -0
- package/build/functions.d.ts +33 -0
- package/build/functions.js +95 -0
- package/build/functions.js.map +1 -0
- package/{src/index.ts → build/index.d.ts} +1 -1
- package/build/index.js +21 -0
- package/build/index.js.map +1 -0
- package/build/parse.d.ts +17 -0
- package/build/parse.js +392 -0
- package/build/parse.js.map +1 -0
- package/build/string.d.ts +5 -0
- package/build/string.js +38 -0
- package/build/string.js.map +1 -0
- package/build/transform.d.ts +19 -0
- package/build/transform.js +40 -0
- package/build/transform.js.map +1 -0
- package/build/transformString.d.ts +3 -0
- package/build/transformString.js +35 -0
- package/build/transformString.js.map +1 -0
- package/package.json +24 -1
- package/tsconfig.json +4 -2
- package/src/color.test.ts +0 -66
- package/src/convert.ts +0 -392
- package/src/core.ts +0 -58
- package/src/functions.ts +0 -27
- package/src/parse.ts +0 -392
- package/src/transform.ts +0 -58
- package/src/transformString.ts +0 -7
package/README.md
CHANGED
|
@@ -1,3 +1,83 @@
|
|
|
1
|
-
|
|
1
|
+
<h1 align="center">
|
|
2
|
+
color-bits
|
|
3
|
+
</h1>
|
|
2
4
|
|
|
3
|
-
|
|
5
|
+
<p align="center">
|
|
6
|
+
<b>High-performance color library</b>
|
|
7
|
+
</p>
|
|
8
|
+
|
|
9
|
+
This library represents RGBA colors as a single `int32` number and avoids allocating memory as much as possible while parsing, handling, and formatting colors, to provide the best possible memory and CPU efficiency.
|
|
10
|
+
|
|
11
|
+
<p align="center">
|
|
12
|
+
<a href="#-benchmarks">Benchmarks</a> •
|
|
13
|
+
<a href="#-install">Install</a> •
|
|
14
|
+
<a href="#-technical-details">Technical details</a> •
|
|
15
|
+
<a href="#-documentation">Documentation</a> •
|
|
16
|
+
<a href="#-license">License</a>
|
|
17
|
+
</p>
|
|
18
|
+
|
|
19
|
+
<p align="center">
|
|
20
|
+
<small>🔴🟠🟡🟢🔵🟣</small>
|
|
21
|
+
</p>
|
|
22
|
+
|
|
23
|
+
### ⚡ Benchmarks
|
|
24
|
+
|
|
25
|
+
| Library | Operations/sec | Relative speed |
|
|
26
|
+
| --- | --: | --- |
|
|
27
|
+
| **color-bits** | **22 966 299** | fastest |
|
|
28
|
+
| colord | 4 308 547 | 81.24% slower |
|
|
29
|
+
| tinycolor2 | 1 475 762 | 93.57% slower |
|
|
30
|
+
| chroma-js | 846 924 | 96.31% slower |
|
|
31
|
+
| color | 799 262 | 96.52% slower |
|
|
32
|
+
|
|
33
|
+
### 🛠️ Install
|
|
34
|
+
|
|
35
|
+
```sh
|
|
36
|
+
pnpm install color-bits
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
### 📑 Technical details
|
|
40
|
+
|
|
41
|
+
Due to the compact representation, `color-bits` preserves **at most 8 bits of precision for each channel**, so an operation like `alpha(color, 0.000001)` would simply return the same color with no modification.
|
|
42
|
+
|
|
43
|
+
`color-bits` supports the full **CSS Color Module Level 4** color spaces **in absolute representations only**, so:
|
|
44
|
+
- Yes: `oklab(59.69% 0.1007 0.1191)`
|
|
45
|
+
- No: `oklab(from green l a b / 0.5)`
|
|
46
|
+
|
|
47
|
+
When parsing and converting non-sRGB color spaces, `color-bits` behaves the same as browsers behave, which differs from the formal CSS spec! In technical terms: non-sRGB color spaces with a wider gamut are converted using clipping rather than gamut-mapping.
|
|
48
|
+
|
|
49
|
+
For performance reasons, the representation is `int32`, not `uint32`. It is expected if you see negative numbers when you print the color value.
|
|
50
|
+
|
|
51
|
+
Every function is tree-shakeable, so the bundle size cost should be from 1.5kb to 3kb, depending on which functions you use.
|
|
52
|
+
|
|
53
|
+
### 📚 Documentation
|
|
54
|
+
|
|
55
|
+
[Documentation: `'color-bits'`](https://github.com/romgrk/color-bits/tree/master/docs/README.md)
|
|
56
|
+
[Documentation: `'color-bits/string'`](https://github.com/romgrk/color-bits/tree/master/docs/string/README.md)
|
|
57
|
+
|
|
58
|
+
If you're storing and manipulating colors frequently, you should use the `color-bits` exports directly, e.g.
|
|
59
|
+
|
|
60
|
+
```tsx
|
|
61
|
+
import * as Color from 'color-bits'
|
|
62
|
+
|
|
63
|
+
const background = Color.parse('#232323')
|
|
64
|
+
const seeThrough = Color.alpha(backround, 0.5)
|
|
65
|
+
const output = Color.format(seeThrough) // #RRGGBBAA string
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
The `color-bits/string` exports wrap some of the functions to accept string colors as input/output, which may be used if you're not storing the colors but just transforming them on the fly.
|
|
69
|
+
|
|
70
|
+
```tsx
|
|
71
|
+
import * as Color from 'color-bits/string'
|
|
72
|
+
|
|
73
|
+
const background = '#232323'
|
|
74
|
+
const output = Color.alpha(backround, 0.5) // #RRGGBBAA string
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
### 📜 License
|
|
78
|
+
|
|
79
|
+
I release any of the code here to the public domain. Feel free to copy/paste in part or in full without attribution. Some parts of the codebase have been extracted from Chrome's devtools, MaterialUI, and stackoverflow, those contain a license notice or attribution in code comments, inline.
|
|
80
|
+
|
|
81
|
+
<p align="center">
|
|
82
|
+
<small>🔴🟠🟡🟢🔵🟣</small>
|
|
83
|
+
</p>
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import b from 'benny'
|
|
2
|
+
import { alpha as colorBitsAlpha } from '../src/string'
|
|
3
|
+
import { colord } from 'colord'
|
|
4
|
+
import tinycolor2 from 'tinycolor2'
|
|
5
|
+
import color from 'color'
|
|
6
|
+
import chroma from 'chroma-js'
|
|
7
|
+
|
|
8
|
+
const input = '#808080'
|
|
9
|
+
|
|
10
|
+
b.suite(
|
|
11
|
+
`Parse color, set to 0.5 opacity, and convert back to hexadecimal`,
|
|
12
|
+
|
|
13
|
+
b.add('color-bits', () => {
|
|
14
|
+
colorBitsAlpha(input, 0.5)
|
|
15
|
+
}),
|
|
16
|
+
|
|
17
|
+
b.add('colord', () => {
|
|
18
|
+
colord(input).alpha(0.5).toHex()
|
|
19
|
+
}),
|
|
20
|
+
|
|
21
|
+
b.add('color', () => {
|
|
22
|
+
color(input).alpha(0.5).hex()
|
|
23
|
+
}),
|
|
24
|
+
|
|
25
|
+
b.add('tinycolor2', () => {
|
|
26
|
+
tinycolor2(input).setAlpha(0.5).toHexString()
|
|
27
|
+
}),
|
|
28
|
+
|
|
29
|
+
b.add('chroma-js', () => {
|
|
30
|
+
chroma(input).alpha(0.5).hex()
|
|
31
|
+
}),
|
|
32
|
+
|
|
33
|
+
b.cycle(),
|
|
34
|
+
b.complete()
|
|
35
|
+
)
|
package/build/bit.d.ts
ADDED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
"use strict";
|
|
1
2
|
// Bitwise functions
|
|
2
3
|
//
|
|
3
4
|
// The color representation would ideally be 32-bits unsigned, but JS bitwise
|
|
@@ -8,20 +9,21 @@
|
|
|
8
9
|
// Colors with a R channel >= 0x80 will be a negative number, but that's not really
|
|
9
10
|
// an issue at any point because the bits for signed and unsigned integers are always
|
|
10
11
|
// the same, only their interpretation changes.
|
|
11
|
-
|
|
12
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
+
exports.cast = cast;
|
|
14
|
+
exports.get = get;
|
|
15
|
+
exports.set = set;
|
|
12
16
|
const INT32_TO_UINT32_OFFSET = 2 ** 32;
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
return n;
|
|
17
|
+
function cast(n) {
|
|
18
|
+
if (n < 0) {
|
|
19
|
+
return n + INT32_TO_UINT32_OFFSET;
|
|
20
|
+
}
|
|
21
|
+
return n;
|
|
19
22
|
}
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
return (n >> offset) & 0xff;
|
|
23
|
+
function get(n, offset) {
|
|
24
|
+
return (n >> offset) & 0xff;
|
|
23
25
|
}
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
return n ^ ((n ^ (byte << offset)) & (0xff << offset));
|
|
26
|
+
function set(n, offset, byte) {
|
|
27
|
+
return n ^ ((n ^ (byte << offset)) & (0xff << offset));
|
|
27
28
|
}
|
|
29
|
+
//# sourceMappingURL=bit.js.map
|
package/build/bit.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bit.js","sourceRoot":"","sources":["../src/bit.ts"],"names":[],"mappings":";AAAA,oBAAoB;AACpB,EAAE;AACF,6EAA6E;AAC7E,+EAA+E;AAC/E,kFAAkF;AAClF,6CAA6C;AAC7C,EAAE;AACF,mFAAmF;AACnF,qFAAqF;AACrF,+CAA+C;;AAI/C,oBAKC;AAED,kBAEC;AAED,kBAEC;AAfD,MAAM,sBAAsB,GAAG,CAAC,IAAI,EAAE,CAAC;AAEvC,SAAgB,IAAI,CAAC,CAAS;IAC5B,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QACV,OAAO,CAAC,GAAG,sBAAsB,CAAC;IACpC,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC;AAED,SAAgB,GAAG,CAAC,CAAS,EAAE,MAAc;IAC3C,OAAO,CAAC,CAAC,IAAI,MAAM,CAAC,GAAG,IAAI,CAAC;AAC9B,CAAC;AAED,SAAgB,GAAG,CAAC,CAAS,EAAE,MAAc,EAAE,IAAY;IACzD,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,IAAI,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI,IAAI,MAAM,CAAC,CAAC,CAAC;AACzD,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
export declare function labToXyzd50(l: number, a: number, b: number): [number, number, number];
|
|
2
|
+
export declare function xyzd50ToLab(x: number, y: number, z: number): [number, number, number];
|
|
3
|
+
export declare function oklabToXyzd65(l: number, a: number, b: number): [number, number, number];
|
|
4
|
+
export declare function xyzd65ToOklab(x: number, y: number, z: number): [number, number, number];
|
|
5
|
+
export declare function lchToLab(l: number, c: number, h: number | undefined): [number, number, number];
|
|
6
|
+
export declare function labToLch(l: number, a: number, b: number): [number, number, number];
|
|
7
|
+
export declare function displayP3ToXyzd50(r: number, g: number, b: number): [number, number, number];
|
|
8
|
+
export declare function xyzd50ToDisplayP3(x: number, y: number, z: number): [number, number, number];
|
|
9
|
+
export declare function proPhotoToXyzd50(r: number, g: number, b: number): [number, number, number];
|
|
10
|
+
export declare function xyzd50ToProPhoto(x: number, y: number, z: number): [number, number, number];
|
|
11
|
+
export declare function adobeRGBToXyzd50(r: number, g: number, b: number): [number, number, number];
|
|
12
|
+
export declare function xyzd50ToAdobeRGB(x: number, y: number, z: number): [number, number, number];
|
|
13
|
+
export declare function rec2020ToXyzd50(r: number, g: number, b: number): [number, number, number];
|
|
14
|
+
export declare function xyzd50ToRec2020(x: number, y: number, z: number): [number, number, number];
|
|
15
|
+
export declare function xyzd50ToD65(x: number, y: number, z: number): [number, number, number];
|
|
16
|
+
export declare function xyzd65ToD50(x: number, y: number, z: number): [number, number, number];
|
|
17
|
+
export declare function xyzd65TosRGBLinear(x: number, y: number, z: number): [number, number, number];
|
|
18
|
+
export declare function xyzd50TosRGBLinear(x: number, y: number, z: number): [number, number, number];
|
|
19
|
+
export declare function srgbLinearToXyzd50(r: number, g: number, b: number): [number, number, number];
|
|
20
|
+
export declare function srgbToXyzd50(r: number, g: number, b: number): [number, number, number];
|
|
21
|
+
export declare function xyzd50ToSrgb(x: number, y: number, z: number): [number, number, number];
|
|
22
|
+
export declare function oklchToXyzd50(lInput: number, c: number, h: number): [number, number, number];
|
|
23
|
+
export declare function xyzd50ToOklch(x: number, y: number, z: number): [number, number, number];
|
package/build/convert.js
ADDED
|
@@ -0,0 +1,347 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Copyright 2022 The Chromium Authors. All rights reserved.
|
|
3
|
+
// Use of this source code is governed by a BSD-style license that can be
|
|
4
|
+
// found in the LICENSE file.
|
|
5
|
+
//
|
|
6
|
+
// Source: https://github.com/ChromeDevTools/devtools-frontend/blob/c51201e6ee70370f7f1ac8a1a49dca7d4561aeaa/front_end/core/common/ColorConverter.ts
|
|
7
|
+
// License: https://github.com/ChromeDevTools/devtools-frontend/blob/c51201e6ee70370f7f1ac8a1a49dca7d4561aeaa/LICENSE
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.labToXyzd50 = labToXyzd50;
|
|
10
|
+
exports.xyzd50ToLab = xyzd50ToLab;
|
|
11
|
+
exports.oklabToXyzd65 = oklabToXyzd65;
|
|
12
|
+
exports.xyzd65ToOklab = xyzd65ToOklab;
|
|
13
|
+
exports.lchToLab = lchToLab;
|
|
14
|
+
exports.labToLch = labToLch;
|
|
15
|
+
exports.displayP3ToXyzd50 = displayP3ToXyzd50;
|
|
16
|
+
exports.xyzd50ToDisplayP3 = xyzd50ToDisplayP3;
|
|
17
|
+
exports.proPhotoToXyzd50 = proPhotoToXyzd50;
|
|
18
|
+
exports.xyzd50ToProPhoto = xyzd50ToProPhoto;
|
|
19
|
+
exports.adobeRGBToXyzd50 = adobeRGBToXyzd50;
|
|
20
|
+
exports.xyzd50ToAdobeRGB = xyzd50ToAdobeRGB;
|
|
21
|
+
exports.rec2020ToXyzd50 = rec2020ToXyzd50;
|
|
22
|
+
exports.xyzd50ToRec2020 = xyzd50ToRec2020;
|
|
23
|
+
exports.xyzd50ToD65 = xyzd50ToD65;
|
|
24
|
+
exports.xyzd65ToD50 = xyzd65ToD50;
|
|
25
|
+
exports.xyzd65TosRGBLinear = xyzd65TosRGBLinear;
|
|
26
|
+
exports.xyzd50TosRGBLinear = xyzd50TosRGBLinear;
|
|
27
|
+
exports.srgbLinearToXyzd50 = srgbLinearToXyzd50;
|
|
28
|
+
exports.srgbToXyzd50 = srgbToXyzd50;
|
|
29
|
+
exports.xyzd50ToSrgb = xyzd50ToSrgb;
|
|
30
|
+
exports.oklchToXyzd50 = oklchToXyzd50;
|
|
31
|
+
exports.xyzd50ToOklch = xyzd50ToOklch;
|
|
32
|
+
/**
|
|
33
|
+
* Implementation of this module and all the tests are heavily influenced by
|
|
34
|
+
* https://source.chromium.org/chromium/chromium/src/+/main:ui/gfx/color_conversions.cc
|
|
35
|
+
*/
|
|
36
|
+
// https://en.wikipedia.org/wiki/CIELAB_color_space#Converting_between_CIELAB_and_CIEXYZ_coordinates
|
|
37
|
+
const D50_X = 0.9642;
|
|
38
|
+
const D50_Y = 1.0;
|
|
39
|
+
const D50_Z = 0.8251;
|
|
40
|
+
function multiply(matrix, other) {
|
|
41
|
+
const dst = [0, 0, 0];
|
|
42
|
+
for (let row = 0; row < 3; ++row) {
|
|
43
|
+
dst[row] = matrix[row][0] * other[0] + matrix[row][1] * other[1] +
|
|
44
|
+
matrix[row][2] * other[2];
|
|
45
|
+
}
|
|
46
|
+
return dst;
|
|
47
|
+
}
|
|
48
|
+
// A transfer function mapping encoded values to linear values,
|
|
49
|
+
// represented by this 7-parameter piecewise function:
|
|
50
|
+
//
|
|
51
|
+
// linear = sign(encoded) * (c*|encoded| + f) , 0 <= |encoded| < d
|
|
52
|
+
// = sign(encoded) * ((a*|encoded| + b)^g + e), d <= |encoded|
|
|
53
|
+
//
|
|
54
|
+
// (A simple gamma transfer function sets g to gamma and a to 1.)
|
|
55
|
+
class TransferFunction {
|
|
56
|
+
g;
|
|
57
|
+
a;
|
|
58
|
+
b;
|
|
59
|
+
c;
|
|
60
|
+
d;
|
|
61
|
+
e;
|
|
62
|
+
f;
|
|
63
|
+
constructor(g, a, b = 0, c = 0, d = 0, e = 0, f = 0) {
|
|
64
|
+
this.g = g;
|
|
65
|
+
this.a = a;
|
|
66
|
+
this.b = b;
|
|
67
|
+
this.c = c;
|
|
68
|
+
this.d = d;
|
|
69
|
+
this.e = e;
|
|
70
|
+
this.f = f;
|
|
71
|
+
}
|
|
72
|
+
eval(val) {
|
|
73
|
+
const sign = val < 0 ? -1.0 : 1.0;
|
|
74
|
+
const abs = val * sign;
|
|
75
|
+
// 0 <= |encoded| < d path
|
|
76
|
+
if (abs < this.d) {
|
|
77
|
+
return sign * (this.c * abs + this.f);
|
|
78
|
+
}
|
|
79
|
+
// d <= |encoded| path
|
|
80
|
+
return sign * (Math.pow(this.a * abs + this.b, this.g) + this.e);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
const NAMED_TRANSFER_FN = {
|
|
84
|
+
sRGB: new TransferFunction(2.4, (1 / 1.055), (0.055 / 1.055), (1 / 12.92), 0.04045, 0.0, 0.0),
|
|
85
|
+
sRGB_INVERSE: new TransferFunction(0.416667, 1.13728, -0, 12.92, 0.0031308, -0.0549698, -0),
|
|
86
|
+
proPhotoRGB: new TransferFunction(1.8, 1),
|
|
87
|
+
proPhotoRGB_INVERSE: new TransferFunction(0.555556, 1, -0, 0, 0, 0, 0),
|
|
88
|
+
k2Dot2: new TransferFunction(2.2, 1.0),
|
|
89
|
+
k2Dot2_INVERSE: new TransferFunction(0.454545, 1),
|
|
90
|
+
rec2020: new TransferFunction(2.22222, 0.909672, 0.0903276, 0.222222, 0.0812429, 0, 0),
|
|
91
|
+
rec2020_INVERSE: new TransferFunction(0.45, 1.23439, -0, 4.5, 0.018054, -0.0993195, -0),
|
|
92
|
+
};
|
|
93
|
+
const NAMED_GAMUTS = {
|
|
94
|
+
sRGB: [
|
|
95
|
+
[0.436065674, 0.385147095, 0.143066406],
|
|
96
|
+
[0.222488403, 0.716873169, 0.060607910],
|
|
97
|
+
[0.013916016, 0.097076416, 0.714096069],
|
|
98
|
+
],
|
|
99
|
+
sRGB_INVERSE: [
|
|
100
|
+
[3.134112151374599, -1.6173924597114966, -0.4906334036481285],
|
|
101
|
+
[-0.9787872938826594, 1.9162795854799963, 0.0334547139520088],
|
|
102
|
+
[0.07198304248352326, -0.2289858493321844, 1.4053851325241447],
|
|
103
|
+
],
|
|
104
|
+
displayP3: [
|
|
105
|
+
[0.515102, 0.291965, 0.157153],
|
|
106
|
+
[0.241182, 0.692236, 0.0665819],
|
|
107
|
+
[-0.00104941, 0.0418818, 0.784378],
|
|
108
|
+
],
|
|
109
|
+
displayP3_INVERSE: [
|
|
110
|
+
[2.404045155982687, -0.9898986932663839, -0.3976317191366333],
|
|
111
|
+
[-0.8422283799266768, 1.7988505115115485, 0.016048170293157416],
|
|
112
|
+
[0.04818705979712955, -0.09737385156228891, 1.2735066448052303],
|
|
113
|
+
],
|
|
114
|
+
adobeRGB: [
|
|
115
|
+
[0.60974, 0.20528, 0.14919],
|
|
116
|
+
[0.31111, 0.62567, 0.06322],
|
|
117
|
+
[0.01947, 0.06087, 0.74457],
|
|
118
|
+
],
|
|
119
|
+
adobeRGB_INVERSE: [
|
|
120
|
+
[1.9625385510109137, -0.6106892546501431, -0.3413827467482388],
|
|
121
|
+
[-0.9787580455521, 1.9161624707082339, 0.03341676594241408],
|
|
122
|
+
[0.028696263137883395, -0.1406807819331586, 1.349252109991369],
|
|
123
|
+
],
|
|
124
|
+
rec2020: [
|
|
125
|
+
[0.673459, 0.165661, 0.125100],
|
|
126
|
+
[0.279033, 0.675338, 0.0456288],
|
|
127
|
+
[-0.00193139, 0.0299794, 0.797162],
|
|
128
|
+
],
|
|
129
|
+
rec2020_INVERSE: [
|
|
130
|
+
[1.647275201661012, -0.3936024771460771, -0.23598028884792507],
|
|
131
|
+
[-0.6826176165196962, 1.647617775014935, 0.01281626807852422],
|
|
132
|
+
[0.029662725298529837, -0.06291668721366285, 1.2533964313435522],
|
|
133
|
+
],
|
|
134
|
+
xyz: [
|
|
135
|
+
[1.0, 0.0, 0.0],
|
|
136
|
+
[0.0, 1.0, 0.0],
|
|
137
|
+
[0.0, 0.0, 1.0],
|
|
138
|
+
],
|
|
139
|
+
};
|
|
140
|
+
function degToRad(deg) {
|
|
141
|
+
return deg * (Math.PI / 180);
|
|
142
|
+
}
|
|
143
|
+
function radToDeg(rad) {
|
|
144
|
+
return rad * (180 / Math.PI);
|
|
145
|
+
}
|
|
146
|
+
function applyTransferFns(fn, r, g, b) {
|
|
147
|
+
return [fn.eval(r), fn.eval(g), fn.eval(b)];
|
|
148
|
+
}
|
|
149
|
+
const OKLAB_TO_LMS_MATRIX = [
|
|
150
|
+
[0.99999999845051981432, 0.39633779217376785678, 0.21580375806075880339],
|
|
151
|
+
[1.0000000088817607767, -0.1055613423236563494, -0.063854174771705903402],
|
|
152
|
+
[1.0000000546724109177, -0.089484182094965759684, -1.2914855378640917399],
|
|
153
|
+
];
|
|
154
|
+
// Inverse of the OKLAB_TO_LMS_MATRIX
|
|
155
|
+
const LMS_TO_OKLAB_MATRIX = [
|
|
156
|
+
[0.2104542553, 0.7936177849999999, -0.0040720468],
|
|
157
|
+
[1.9779984951000003, -2.4285922049999997, 0.4505937099000001],
|
|
158
|
+
[0.025904037099999982, 0.7827717662, -0.8086757660000001],
|
|
159
|
+
];
|
|
160
|
+
const XYZ_TO_LMS_MATRIX = [
|
|
161
|
+
[0.8190224432164319, 0.3619062562801221, -0.12887378261216414],
|
|
162
|
+
[0.0329836671980271, 0.9292868468965546, 0.03614466816999844],
|
|
163
|
+
[0.048177199566046255, 0.26423952494422764, 0.6335478258136937],
|
|
164
|
+
];
|
|
165
|
+
// Inverse of XYZ_TO_LMS_MATRIX
|
|
166
|
+
const LMS_TO_XYZ_MATRIX = [
|
|
167
|
+
[1.226879873374156, -0.5578149965554814, 0.2813910501772159],
|
|
168
|
+
[-0.040575762624313734, 1.1122868293970596, -0.07171106666151703],
|
|
169
|
+
[-0.07637294974672144, -0.4214933239627915, 1.586924024427242],
|
|
170
|
+
];
|
|
171
|
+
const PRO_PHOTO_TO_XYZD50_MATRIX = [
|
|
172
|
+
[0.7976700747153241, 0.13519395152800417, 0.03135596341127167],
|
|
173
|
+
[0.28803902352472205, 0.7118744007923554, 0.00008661179538844252],
|
|
174
|
+
[2.739876695467402e-7, -0.0000014405226518969991, 0.825211112593861],
|
|
175
|
+
];
|
|
176
|
+
// Inverse of PRO_PHOTO_TO_XYZD50_MATRIX
|
|
177
|
+
const XYZD50_TO_PRO_PHOTO_MATRIX = [
|
|
178
|
+
[1.3459533710138858, -0.25561367037652133, -0.051116041522131374],
|
|
179
|
+
[-0.544600415668951, 1.5081687311475767, 0.020535163968720935],
|
|
180
|
+
[-0.0000013975622054109725, 0.000002717590904589903, 1.2118111696814942],
|
|
181
|
+
];
|
|
182
|
+
const XYZD65_TO_XYZD50_MATRIX = [
|
|
183
|
+
[1.0478573189120088, 0.022907374491829943, -0.050162247377152525],
|
|
184
|
+
[0.029570500050499514, 0.9904755577034089, -0.017061518194840468],
|
|
185
|
+
[-0.00924047197558879, 0.015052921526981566, 0.7519708530777581],
|
|
186
|
+
];
|
|
187
|
+
// Inverse of XYZD65_TO_XYZD50_MATRIX
|
|
188
|
+
const XYZD50_TO_XYZD65_MATRIX = [
|
|
189
|
+
[0.9555366447632887, -0.02306009252137888, 0.06321844147263304],
|
|
190
|
+
[-0.028315378228764922, 1.009951351591575, 0.021026001591792402],
|
|
191
|
+
[0.012308773293784308, -0.02050053471777469, 1.3301947294775631],
|
|
192
|
+
];
|
|
193
|
+
const XYZD65_TO_SRGB_MATRIX = [
|
|
194
|
+
[3.2408089365140573, -1.5375788839307314, -0.4985609572551541],
|
|
195
|
+
[-0.9692732213205414, 1.876110235238969, 0.041560501141251774],
|
|
196
|
+
[0.05567030990267439, -0.2040007921971802, 1.0571046720577026],
|
|
197
|
+
];
|
|
198
|
+
function labToXyzd50(l, a, b) {
|
|
199
|
+
let y = (l + 16.0) / 116.0;
|
|
200
|
+
let x = y + a / 500.0;
|
|
201
|
+
let z = y - b / 200.0;
|
|
202
|
+
function labInverseTransferFunction(t) {
|
|
203
|
+
const delta = (24.0 / 116.0);
|
|
204
|
+
if (t <= delta) {
|
|
205
|
+
return (108.0 / 841.0) * (t - (16.0 / 116.0));
|
|
206
|
+
}
|
|
207
|
+
return t * t * t;
|
|
208
|
+
}
|
|
209
|
+
x = labInverseTransferFunction(x) * D50_X;
|
|
210
|
+
y = labInverseTransferFunction(y) * D50_Y;
|
|
211
|
+
z = labInverseTransferFunction(z) * D50_Z;
|
|
212
|
+
return [x, y, z];
|
|
213
|
+
}
|
|
214
|
+
function xyzd50ToLab(x, y, z) {
|
|
215
|
+
function labTransferFunction(t) {
|
|
216
|
+
const deltaLimit = (24.0 / 116.0) * (24.0 / 116.0) * (24.0 / 116.0);
|
|
217
|
+
if (t <= deltaLimit) {
|
|
218
|
+
return (841.0 / 108.0) * t + (16.0 / 116.0);
|
|
219
|
+
}
|
|
220
|
+
return Math.pow(t, 1.0 / 3.0);
|
|
221
|
+
}
|
|
222
|
+
x = labTransferFunction(x / D50_X);
|
|
223
|
+
y = labTransferFunction(y / D50_Y);
|
|
224
|
+
z = labTransferFunction(z / D50_Z);
|
|
225
|
+
const l = 116.0 * y - 16.0;
|
|
226
|
+
const a = 500.0 * (x - y);
|
|
227
|
+
const b = 200.0 * (y - z);
|
|
228
|
+
return [l, a, b];
|
|
229
|
+
}
|
|
230
|
+
function oklabToXyzd65(l, a, b) {
|
|
231
|
+
const labInput = [l, a, b];
|
|
232
|
+
const lmsIntermediate = multiply(OKLAB_TO_LMS_MATRIX, labInput);
|
|
233
|
+
lmsIntermediate[0] = lmsIntermediate[0] * lmsIntermediate[0] * lmsIntermediate[0];
|
|
234
|
+
lmsIntermediate[1] = lmsIntermediate[1] * lmsIntermediate[1] * lmsIntermediate[1];
|
|
235
|
+
lmsIntermediate[2] = lmsIntermediate[2] * lmsIntermediate[2] * lmsIntermediate[2];
|
|
236
|
+
const xyzOutput = multiply(LMS_TO_XYZ_MATRIX, lmsIntermediate);
|
|
237
|
+
return xyzOutput;
|
|
238
|
+
}
|
|
239
|
+
function xyzd65ToOklab(x, y, z) {
|
|
240
|
+
const xyzInput = [x, y, z];
|
|
241
|
+
const lmsIntermediate = multiply(XYZ_TO_LMS_MATRIX, xyzInput);
|
|
242
|
+
lmsIntermediate[0] = Math.pow(lmsIntermediate[0], 1.0 / 3.0);
|
|
243
|
+
lmsIntermediate[1] = Math.pow(lmsIntermediate[1], 1.0 / 3.0);
|
|
244
|
+
lmsIntermediate[2] = Math.pow(lmsIntermediate[2], 1.0 / 3.0);
|
|
245
|
+
const labOutput = multiply(LMS_TO_OKLAB_MATRIX, lmsIntermediate);
|
|
246
|
+
return [labOutput[0], labOutput[1], labOutput[2]];
|
|
247
|
+
}
|
|
248
|
+
function lchToLab(l, c, h) {
|
|
249
|
+
if (h === undefined) {
|
|
250
|
+
return [l, 0, 0];
|
|
251
|
+
}
|
|
252
|
+
return [l, c * Math.cos(degToRad(h)), c * Math.sin(degToRad(h))];
|
|
253
|
+
}
|
|
254
|
+
function labToLch(l, a, b) {
|
|
255
|
+
return [l, Math.sqrt(a * a + b * b), radToDeg(Math.atan2(b, a))];
|
|
256
|
+
}
|
|
257
|
+
function displayP3ToXyzd50(r, g, b) {
|
|
258
|
+
const [mappedR, mappedG, mappedB] = applyTransferFns(NAMED_TRANSFER_FN.sRGB, r, g, b);
|
|
259
|
+
const rgbInput = [mappedR, mappedG, mappedB];
|
|
260
|
+
const xyzOutput = multiply(NAMED_GAMUTS.displayP3, rgbInput);
|
|
261
|
+
return xyzOutput;
|
|
262
|
+
}
|
|
263
|
+
function xyzd50ToDisplayP3(x, y, z) {
|
|
264
|
+
const xyzInput = [x, y, z];
|
|
265
|
+
const rgbOutput = multiply(NAMED_GAMUTS.displayP3_INVERSE, xyzInput);
|
|
266
|
+
return applyTransferFns(NAMED_TRANSFER_FN.sRGB_INVERSE, rgbOutput[0], rgbOutput[1], rgbOutput[2]);
|
|
267
|
+
}
|
|
268
|
+
function proPhotoToXyzd50(r, g, b) {
|
|
269
|
+
const [mappedR, mappedG, mappedB] = applyTransferFns(NAMED_TRANSFER_FN.proPhotoRGB, r, g, b);
|
|
270
|
+
const rgbInput = [mappedR, mappedG, mappedB];
|
|
271
|
+
const xyzOutput = multiply(PRO_PHOTO_TO_XYZD50_MATRIX, rgbInput);
|
|
272
|
+
return xyzOutput;
|
|
273
|
+
}
|
|
274
|
+
function xyzd50ToProPhoto(x, y, z) {
|
|
275
|
+
const xyzInput = [x, y, z];
|
|
276
|
+
const rgbOutput = multiply(XYZD50_TO_PRO_PHOTO_MATRIX, xyzInput);
|
|
277
|
+
return applyTransferFns(NAMED_TRANSFER_FN.proPhotoRGB_INVERSE, rgbOutput[0], rgbOutput[1], rgbOutput[2]);
|
|
278
|
+
}
|
|
279
|
+
function adobeRGBToXyzd50(r, g, b) {
|
|
280
|
+
const [mappedR, mappedG, mappedB] = applyTransferFns(NAMED_TRANSFER_FN.k2Dot2, r, g, b);
|
|
281
|
+
const rgbInput = [mappedR, mappedG, mappedB];
|
|
282
|
+
const xyzOutput = multiply(NAMED_GAMUTS.adobeRGB, rgbInput);
|
|
283
|
+
return xyzOutput;
|
|
284
|
+
}
|
|
285
|
+
function xyzd50ToAdobeRGB(x, y, z) {
|
|
286
|
+
const xyzInput = [x, y, z];
|
|
287
|
+
const rgbOutput = multiply(NAMED_GAMUTS.adobeRGB_INVERSE, xyzInput);
|
|
288
|
+
return applyTransferFns(NAMED_TRANSFER_FN.k2Dot2_INVERSE, rgbOutput[0], rgbOutput[1], rgbOutput[2]);
|
|
289
|
+
}
|
|
290
|
+
function rec2020ToXyzd50(r, g, b) {
|
|
291
|
+
const [mappedR, mappedG, mappedB] = applyTransferFns(NAMED_TRANSFER_FN.rec2020, r, g, b);
|
|
292
|
+
const rgbInput = [mappedR, mappedG, mappedB];
|
|
293
|
+
const xyzOutput = multiply(NAMED_GAMUTS.rec2020, rgbInput);
|
|
294
|
+
return xyzOutput;
|
|
295
|
+
}
|
|
296
|
+
function xyzd50ToRec2020(x, y, z) {
|
|
297
|
+
const xyzInput = [x, y, z];
|
|
298
|
+
const rgbOutput = multiply(NAMED_GAMUTS.rec2020_INVERSE, xyzInput);
|
|
299
|
+
return applyTransferFns(NAMED_TRANSFER_FN.rec2020_INVERSE, rgbOutput[0], rgbOutput[1], rgbOutput[2]);
|
|
300
|
+
}
|
|
301
|
+
function xyzd50ToD65(x, y, z) {
|
|
302
|
+
const xyzInput = [x, y, z];
|
|
303
|
+
const xyzOutput = multiply(XYZD50_TO_XYZD65_MATRIX, xyzInput);
|
|
304
|
+
return xyzOutput;
|
|
305
|
+
}
|
|
306
|
+
function xyzd65ToD50(x, y, z) {
|
|
307
|
+
const xyzInput = [x, y, z];
|
|
308
|
+
const xyzOutput = multiply(XYZD65_TO_XYZD50_MATRIX, xyzInput);
|
|
309
|
+
return xyzOutput;
|
|
310
|
+
}
|
|
311
|
+
function xyzd65TosRGBLinear(x, y, z) {
|
|
312
|
+
const xyzInput = [x, y, z];
|
|
313
|
+
const rgbResult = multiply(XYZD65_TO_SRGB_MATRIX, xyzInput);
|
|
314
|
+
return rgbResult;
|
|
315
|
+
}
|
|
316
|
+
function xyzd50TosRGBLinear(x, y, z) {
|
|
317
|
+
const xyzInput = [x, y, z];
|
|
318
|
+
const rgbResult = multiply(NAMED_GAMUTS.sRGB_INVERSE, xyzInput);
|
|
319
|
+
return rgbResult;
|
|
320
|
+
}
|
|
321
|
+
function srgbLinearToXyzd50(r, g, b) {
|
|
322
|
+
const rgbInput = [r, g, b];
|
|
323
|
+
const xyzOutput = multiply(NAMED_GAMUTS.sRGB, rgbInput);
|
|
324
|
+
return xyzOutput;
|
|
325
|
+
}
|
|
326
|
+
function srgbToXyzd50(r, g, b) {
|
|
327
|
+
const [mappedR, mappedG, mappedB] = applyTransferFns(NAMED_TRANSFER_FN.sRGB, r, g, b);
|
|
328
|
+
const rgbInput = [mappedR, mappedG, mappedB];
|
|
329
|
+
const xyzOutput = multiply(NAMED_GAMUTS.sRGB, rgbInput);
|
|
330
|
+
return xyzOutput;
|
|
331
|
+
}
|
|
332
|
+
function xyzd50ToSrgb(x, y, z) {
|
|
333
|
+
const xyzInput = [x, y, z];
|
|
334
|
+
const rgbOutput = multiply(NAMED_GAMUTS.sRGB_INVERSE, xyzInput);
|
|
335
|
+
return applyTransferFns(NAMED_TRANSFER_FN.sRGB_INVERSE, rgbOutput[0], rgbOutput[1], rgbOutput[2]);
|
|
336
|
+
}
|
|
337
|
+
function oklchToXyzd50(lInput, c, h) {
|
|
338
|
+
const [l, a, b] = lchToLab(lInput, c, h);
|
|
339
|
+
const [x65, y65, z65] = oklabToXyzd65(l, a, b);
|
|
340
|
+
return xyzd65ToD50(x65, y65, z65);
|
|
341
|
+
}
|
|
342
|
+
function xyzd50ToOklch(x, y, z) {
|
|
343
|
+
const [x65, y65, z65] = xyzd50ToD65(x, y, z);
|
|
344
|
+
const [l, a, b] = xyzd65ToOklab(x65, y65, z65);
|
|
345
|
+
return labToLch(l, a, b);
|
|
346
|
+
}
|
|
347
|
+
//# sourceMappingURL=convert.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"convert.js","sourceRoot":"","sources":["../src/convert.ts"],"names":[],"mappings":"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"}
|
package/build/core.d.ts
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
export type Color = number;
|
|
2
|
+
export declare const OFFSET_R = 24;
|
|
3
|
+
export declare const OFFSET_G = 16;
|
|
4
|
+
export declare const OFFSET_B = 8;
|
|
5
|
+
export declare const OFFSET_A = 0;
|
|
6
|
+
/**
|
|
7
|
+
* Creates a new color from the given RGBA components.
|
|
8
|
+
* Every component should be in the [0, 255] range.
|
|
9
|
+
*/
|
|
10
|
+
export declare function newColor(r: number, g: number, b: number, a: number): number;
|
|
11
|
+
/**
|
|
12
|
+
* Creates a new color from the given number value, e.g. 0x599eff.
|
|
13
|
+
*/
|
|
14
|
+
export declare function from(color: number): number;
|
|
15
|
+
/**
|
|
16
|
+
* Turns the color into its equivalent number representation.
|
|
17
|
+
* This is essentially a cast from int32 to uint32.
|
|
18
|
+
*/
|
|
19
|
+
export declare function toNumber(color: Color): number;
|
|
20
|
+
export declare function getRed(c: Color): number;
|
|
21
|
+
export declare function getGreen(c: Color): number;
|
|
22
|
+
export declare function getBlue(c: Color): number;
|
|
23
|
+
export declare function getAlpha(c: Color): number;
|
|
24
|
+
export declare function setRed(c: Color, value: number): number;
|
|
25
|
+
export declare function setGreen(c: Color, value: number): number;
|
|
26
|
+
export declare function setBlue(c: Color, value: number): number;
|
|
27
|
+
export declare function setAlpha(c: Color, value: number): number;
|