html2canvas-pro 2.1.0 → 2.1.1
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/dist/html2canvas-pro.esm.js +21 -7
- package/dist/html2canvas-pro.esm.js.map +1 -1
- package/dist/html2canvas-pro.js +21 -7
- package/dist/html2canvas-pro.js.map +1 -1
- package/dist/html2canvas-pro.min.js +3 -3
- package/dist/lib/core/cache-storage.js +2 -2
- package/dist/lib/core/features.js +2 -2
- package/dist/lib/render/canvas/background-renderer.js +6 -0
- package/dist/lib/render/canvas/canvas-renderer.js +5 -1
- package/dist/lib/render/canvas/foreignobject-renderer.js +5 -1
- package/package.json +3 -11
- package/dist/lib/invariant.js +0 -9
- package/dist/types/invariant.d.ts +0 -1
- package/src/__tests__/index.ts +0 -99
- package/src/config.ts +0 -107
- package/src/core/__mocks__/cache-storage.ts +0 -1
- package/src/core/__mocks__/context.ts +0 -19
- package/src/core/__mocks__/features.ts +0 -8
- package/src/core/__mocks__/logger.ts +0 -17
- package/src/core/__tests__/cache-storage.test.ts +0 -205
- package/src/core/__tests__/cache-storage.ts +0 -278
- package/src/core/__tests__/logger.ts +0 -29
- package/src/core/__tests__/validator.ts +0 -359
- package/src/core/bitwise.ts +0 -1
- package/src/core/cache-storage.ts +0 -315
- package/src/core/context.ts +0 -31
- package/src/core/debugger.ts +0 -32
- package/src/core/features.ts +0 -222
- package/src/core/logger.ts +0 -64
- package/src/core/origin-checker.ts +0 -57
- package/src/core/performance-monitor.ts +0 -241
- package/src/core/render-element.ts +0 -272
- package/src/core/util.ts +0 -1
- package/src/core/validator.ts +0 -593
- package/src/css/index.ts +0 -427
- package/src/css/layout/__mocks__/bounds.ts +0 -6
- package/src/css/layout/bounds.ts +0 -79
- package/src/css/layout/text.ts +0 -161
- package/src/css/property-descriptor.ts +0 -49
- package/src/css/property-descriptors/__tests__/background-tests.ts +0 -65
- package/src/css/property-descriptors/__tests__/clip-path.test.ts +0 -280
- package/src/css/property-descriptors/__tests__/font-family.ts +0 -25
- package/src/css/property-descriptors/__tests__/image-rendering-integration.test.ts +0 -153
- package/src/css/property-descriptors/__tests__/image-rendering-performance.test.ts +0 -175
- package/src/css/property-descriptors/__tests__/image-rendering.test.ts +0 -72
- package/src/css/property-descriptors/__tests__/paint-order.ts +0 -87
- package/src/css/property-descriptors/__tests__/text-shadow.ts +0 -94
- package/src/css/property-descriptors/__tests__/transform-tests.ts +0 -18
- package/src/css/property-descriptors/background-clip.ts +0 -30
- package/src/css/property-descriptors/background-color.ts +0 -9
- package/src/css/property-descriptors/background-image.ts +0 -27
- package/src/css/property-descriptors/background-origin.ts +0 -31
- package/src/css/property-descriptors/background-position.ts +0 -38
- package/src/css/property-descriptors/background-repeat.ts +0 -44
- package/src/css/property-descriptors/background-size.ts +0 -27
- package/src/css/property-descriptors/border-color.ts +0 -13
- package/src/css/property-descriptors/border-radius.ts +0 -19
- package/src/css/property-descriptors/border-style.ts +0 -34
- package/src/css/property-descriptors/border-width.ts +0 -20
- package/src/css/property-descriptors/box-shadow.ts +0 -60
- package/src/css/property-descriptors/clip-path.ts +0 -271
- package/src/css/property-descriptors/color.ts +0 -9
- package/src/css/property-descriptors/content.ts +0 -26
- package/src/css/property-descriptors/counter-increment.ts +0 -43
- package/src/css/property-descriptors/counter-reset.ts +0 -36
- package/src/css/property-descriptors/direction.ts +0 -23
- package/src/css/property-descriptors/display.ts +0 -117
- package/src/css/property-descriptors/duration.ts +0 -14
- package/src/css/property-descriptors/float.ts +0 -29
- package/src/css/property-descriptors/font-family.ts +0 -38
- package/src/css/property-descriptors/font-size.ts +0 -9
- package/src/css/property-descriptors/font-style.ts +0 -25
- package/src/css/property-descriptors/font-variant.ts +0 -12
- package/src/css/property-descriptors/font-weight.ts +0 -26
- package/src/css/property-descriptors/image-rendering.ts +0 -33
- package/src/css/property-descriptors/letter-spacing.ts +0 -25
- package/src/css/property-descriptors/line-break.ts +0 -22
- package/src/css/property-descriptors/line-height.ts +0 -22
- package/src/css/property-descriptors/list-style-image.ts +0 -19
- package/src/css/property-descriptors/list-style-position.ts +0 -22
- package/src/css/property-descriptors/list-style-type.ts +0 -179
- package/src/css/property-descriptors/margin.ts +0 -13
- package/src/css/property-descriptors/mix-blend-mode.ts +0 -35
- package/src/css/property-descriptors/object-fit.ts +0 -39
- package/src/css/property-descriptors/opacity.ts +0 -15
- package/src/css/property-descriptors/overflow-wrap.ts +0 -22
- package/src/css/property-descriptors/overflow.ts +0 -34
- package/src/css/property-descriptors/padding.ts +0 -14
- package/src/css/property-descriptors/paint-order.ts +0 -42
- package/src/css/property-descriptors/position.ts +0 -30
- package/src/css/property-descriptors/quotes.ts +0 -57
- package/src/css/property-descriptors/rotate.ts +0 -34
- package/src/css/property-descriptors/text-align.ts +0 -26
- package/src/css/property-descriptors/text-decoration-color.ts +0 -9
- package/src/css/property-descriptors/text-decoration-line.ts +0 -38
- package/src/css/property-descriptors/text-decoration-style.ts +0 -32
- package/src/css/property-descriptors/text-decoration-thickness.ts +0 -30
- package/src/css/property-descriptors/text-overflow.ts +0 -23
- package/src/css/property-descriptors/text-shadow.ts +0 -52
- package/src/css/property-descriptors/text-transform.ts +0 -27
- package/src/css/property-descriptors/text-underline-offset.ts +0 -27
- package/src/css/property-descriptors/transform-origin.ts +0 -29
- package/src/css/property-descriptors/transform.ts +0 -74
- package/src/css/property-descriptors/visibility.ts +0 -25
- package/src/css/property-descriptors/webkit-line-clamp.ts +0 -30
- package/src/css/property-descriptors/webkit-text-stroke-color.ts +0 -8
- package/src/css/property-descriptors/webkit-text-stroke-width.ts +0 -15
- package/src/css/property-descriptors/word-break.ts +0 -25
- package/src/css/property-descriptors/writing-mode.ts +0 -37
- package/src/css/property-descriptors/z-index.ts +0 -27
- package/src/css/syntax/__tests__/tokernizer-tests.ts +0 -29
- package/src/css/syntax/parser.ts +0 -188
- package/src/css/syntax/tokenizer.ts +0 -822
- package/src/css/type-descriptor.ts +0 -7
- package/src/css/types/__tests__/color-tests.ts +0 -147
- package/src/css/types/__tests__/image-tests.ts +0 -239
- package/src/css/types/angle.ts +0 -86
- package/src/css/types/color-math.ts +0 -22
- package/src/css/types/color-spaces/a98.ts +0 -86
- package/src/css/types/color-spaces/p3.ts +0 -92
- package/src/css/types/color-spaces/pro-photo.ts +0 -87
- package/src/css/types/color-spaces/rec2020.ts +0 -90
- package/src/css/types/color-spaces/srgb.ts +0 -87
- package/src/css/types/color-utilities.ts +0 -452
- package/src/css/types/color.ts +0 -485
- package/src/css/types/functions/-prefix-linear-gradient.ts +0 -35
- package/src/css/types/functions/-prefix-radial-gradient.ts +0 -106
- package/src/css/types/functions/-webkit-gradient.ts +0 -69
- package/src/css/types/functions/__tests__/radial-gradient.ts +0 -69
- package/src/css/types/functions/counter.ts +0 -511
- package/src/css/types/functions/gradient.ts +0 -206
- package/src/css/types/functions/linear-gradient.ts +0 -28
- package/src/css/types/functions/radial-gradient.ts +0 -101
- package/src/css/types/image.ts +0 -120
- package/src/css/types/index.ts +0 -1
- package/src/css/types/length-percentage.ts +0 -137
- package/src/css/types/length.ts +0 -7
- package/src/css/types/time.ts +0 -20
- package/src/dom/__mocks__/document-cloner.ts +0 -22
- package/src/dom/__tests__/dom-normalizer.test.ts +0 -133
- package/src/dom/__tests__/element-container.test.ts +0 -129
- package/src/dom/document-cloner.ts +0 -929
- package/src/dom/dom-normalizer.ts +0 -133
- package/src/dom/element-container.ts +0 -75
- package/src/dom/elements/li-element-container.ts +0 -10
- package/src/dom/elements/ol-element-container.ts +0 -12
- package/src/dom/elements/select-element-container.ts +0 -10
- package/src/dom/elements/textarea-element-container.ts +0 -9
- package/src/dom/node-parser.ts +0 -177
- package/src/dom/node-type-guards.ts +0 -70
- package/src/dom/replaced-elements/canvas-element-container.ts +0 -15
- package/src/dom/replaced-elements/iframe-element-container.ts +0 -55
- package/src/dom/replaced-elements/image-element-container.ts +0 -16
- package/src/dom/replaced-elements/index.ts +0 -5
- package/src/dom/replaced-elements/input-element-container.ts +0 -105
- package/src/dom/replaced-elements/pseudo-elements.ts +0 -0
- package/src/dom/replaced-elements/svg-element-container.ts +0 -23
- package/src/dom/text-container.ts +0 -42
- package/src/global.d.ts +0 -19
- package/src/index.ts +0 -82
- package/src/invariant.ts +0 -5
- package/src/options.ts +0 -55
- package/src/render/__tests__/object-fit.test.ts +0 -85
- package/src/render/background.ts +0 -298
- package/src/render/bezier-curve.ts +0 -47
- package/src/render/border.ts +0 -165
- package/src/render/bound-curves.ts +0 -388
- package/src/render/box-sizing.ts +0 -31
- package/src/render/canvas/__tests__/background-renderer.test.ts +0 -72
- package/src/render/canvas/__tests__/border-renderer.test.ts +0 -24
- package/src/render/canvas/__tests__/effects-renderer.test.ts +0 -32
- package/src/render/canvas/__tests__/text-renderer.test.ts +0 -471
- package/src/render/canvas/background-renderer.ts +0 -271
- package/src/render/canvas/border-renderer.ts +0 -224
- package/src/render/canvas/canvas-path.ts +0 -31
- package/src/render/canvas/canvas-renderer.ts +0 -641
- package/src/render/canvas/effects-renderer.ts +0 -130
- package/src/render/canvas/foreignobject-renderer.ts +0 -53
- package/src/render/canvas/text-renderer.ts +0 -700
- package/src/render/effects.ts +0 -75
- package/src/render/font-metrics.ts +0 -72
- package/src/render/object-fit.ts +0 -100
- package/src/render/path.ts +0 -37
- package/src/render/renderer-interface.ts +0 -28
- package/src/render/stacking-context.ts +0 -386
- package/src/render/vector.ts +0 -19
|
@@ -1,92 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Display-P3 related functions
|
|
3
|
-
*/
|
|
4
|
-
|
|
5
|
-
import { srgbLinear2rgb } from './srgb';
|
|
6
|
-
import { multiplyMatrices, packXYZ } from '../color-utilities';
|
|
7
|
-
|
|
8
|
-
/**
|
|
9
|
-
* Convert P3 Linear to xyz
|
|
10
|
-
*
|
|
11
|
-
* @param p3l
|
|
12
|
-
*/
|
|
13
|
-
export const p3LinearToXyz = (p3l: [number, number, number]): [number, number, number] => {
|
|
14
|
-
return multiplyMatrices(
|
|
15
|
-
[
|
|
16
|
-
0.4865709486482162, 0.26566769316909306, 0.1982172852343625, 0.2289745640697488, 0.6917385218365064,
|
|
17
|
-
0.079286914093745, 0.0, 0.04511338185890264, 1.043944368900976
|
|
18
|
-
],
|
|
19
|
-
p3l
|
|
20
|
-
);
|
|
21
|
-
};
|
|
22
|
-
/**
|
|
23
|
-
* Convert XYZ to P3 Linear
|
|
24
|
-
*
|
|
25
|
-
* @param xyz
|
|
26
|
-
*/
|
|
27
|
-
export const xyzToP3Linear = (xyz: [number, number, number]): [number, number, number] => {
|
|
28
|
-
return multiplyMatrices(
|
|
29
|
-
[
|
|
30
|
-
2.493496911941425, -0.9313836179191239, -0.40271078445071684, -0.8294889695615747, 1.7626640603183463,
|
|
31
|
-
0.023624685841943577, 0.03584583024378447, -0.07617238926804182, 0.9568845240076872
|
|
32
|
-
],
|
|
33
|
-
xyz
|
|
34
|
-
);
|
|
35
|
-
};
|
|
36
|
-
|
|
37
|
-
/**
|
|
38
|
-
* Convert P3 to P3 linear
|
|
39
|
-
*
|
|
40
|
-
* @param p3
|
|
41
|
-
*/
|
|
42
|
-
export const p32p3Linear = (p3: [number, number, number]): number[] => {
|
|
43
|
-
return p3.map((c: number) => {
|
|
44
|
-
const sign = c < 0 ? -1 : 1,
|
|
45
|
-
abs = c * sign;
|
|
46
|
-
|
|
47
|
-
if (abs <= 0.04045) {
|
|
48
|
-
return c / 12.92;
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
return sign * ((c + 0.055) / 1.055) ** 2.4 || 0;
|
|
52
|
-
});
|
|
53
|
-
};
|
|
54
|
-
|
|
55
|
-
/**
|
|
56
|
-
* Convert P3 Linear to P3
|
|
57
|
-
*
|
|
58
|
-
* @param p3l
|
|
59
|
-
*/
|
|
60
|
-
export const p3Linear2p3 = (p3l: [number, number, number]): number[] => {
|
|
61
|
-
return srgbLinear2rgb(p3l);
|
|
62
|
-
};
|
|
63
|
-
|
|
64
|
-
/**
|
|
65
|
-
* Convert P3 to XYZ
|
|
66
|
-
*
|
|
67
|
-
* @param args
|
|
68
|
-
*/
|
|
69
|
-
export const p3ToXYZ = (args: number[]): number[] => {
|
|
70
|
-
const p3_linear = p32p3Linear([args[0], args[1], args[2]]);
|
|
71
|
-
return p3LinearToXyz([p3_linear[0], p3_linear[1], p3_linear[2]]);
|
|
72
|
-
};
|
|
73
|
-
|
|
74
|
-
/**
|
|
75
|
-
* Convert XYZ to P3
|
|
76
|
-
*
|
|
77
|
-
* @param args
|
|
78
|
-
*/
|
|
79
|
-
export const p3FromXYZ = (args: [number, number, number, number]): [number, number, number, number] => {
|
|
80
|
-
const [r, g, b] = p3Linear2p3(xyzToP3Linear([args[0], args[1], args[2]]));
|
|
81
|
-
return [r, g, b, args[3]];
|
|
82
|
-
};
|
|
83
|
-
|
|
84
|
-
/**
|
|
85
|
-
* Convert P3 to SRGB and Pack
|
|
86
|
-
*
|
|
87
|
-
* @param args
|
|
88
|
-
*/
|
|
89
|
-
export const convertP3 = (args: number[]): number => {
|
|
90
|
-
const xyz = p3ToXYZ([args[0], args[1], args[2]]);
|
|
91
|
-
return packXYZ([xyz[0], xyz[1], xyz[2], args[3]]);
|
|
92
|
-
};
|
|
@@ -1,87 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Pro Photo related functions
|
|
3
|
-
*/
|
|
4
|
-
|
|
5
|
-
import { d50toD65, d65toD50, multiplyMatrices, packXYZ } from '../color-utilities';
|
|
6
|
-
|
|
7
|
-
/**
|
|
8
|
-
* Convert linear-light display-p3 to XYZ D65
|
|
9
|
-
*
|
|
10
|
-
* @param p3
|
|
11
|
-
*/
|
|
12
|
-
export const proPhotoLinearToXyz = (p3: [number, number, number]): [number, number, number] => {
|
|
13
|
-
return multiplyMatrices(
|
|
14
|
-
[
|
|
15
|
-
0.7977666449006423, 0.13518129740053308, 0.0313477341283922, 0.2880748288194013, 0.711835234241873,
|
|
16
|
-
0.00008993693872564, 0.0, 0.0, 0.8251046025104602
|
|
17
|
-
],
|
|
18
|
-
p3
|
|
19
|
-
);
|
|
20
|
-
};
|
|
21
|
-
|
|
22
|
-
/**
|
|
23
|
-
* Convert XYZ D65 to linear-light display-p3
|
|
24
|
-
*
|
|
25
|
-
* @param xyz
|
|
26
|
-
*/
|
|
27
|
-
export const xyzToProPhotoLinear = (xyz: [number, number, number]): [number, number, number] => {
|
|
28
|
-
return multiplyMatrices(
|
|
29
|
-
[
|
|
30
|
-
1.3457868816471583, -0.25557208737979464, -0.05110186497554526, -0.5446307051249019, 1.5082477428451468,
|
|
31
|
-
0.02052744743642139, 0.0, 0.0, 1.2119675456389452
|
|
32
|
-
],
|
|
33
|
-
xyz
|
|
34
|
-
);
|
|
35
|
-
};
|
|
36
|
-
|
|
37
|
-
/**
|
|
38
|
-
* Convert Pro-Photo to Pro-Photo Linear
|
|
39
|
-
*
|
|
40
|
-
* @param p3
|
|
41
|
-
*/
|
|
42
|
-
export const proPhotoToProPhotoLinear = (p3: [number, number, number]): number[] => {
|
|
43
|
-
return p3.map((c: number) => {
|
|
44
|
-
return c < 16 / 512 ? c / 16 : c ** 1.8;
|
|
45
|
-
});
|
|
46
|
-
};
|
|
47
|
-
|
|
48
|
-
/**
|
|
49
|
-
* Convert Pro-Photo Linear to Pro-Photo
|
|
50
|
-
*
|
|
51
|
-
* @param p3
|
|
52
|
-
*/
|
|
53
|
-
export const proPhotoLinearToProPhoto = (p3: [number, number, number]): number[] => {
|
|
54
|
-
return p3.map((c: number) => {
|
|
55
|
-
return c > 1 / 512 ? c ** (1 / 1.8) : c * 16;
|
|
56
|
-
});
|
|
57
|
-
};
|
|
58
|
-
|
|
59
|
-
/**
|
|
60
|
-
* Convert Pro-Photo to XYZ
|
|
61
|
-
*
|
|
62
|
-
* @param args
|
|
63
|
-
*/
|
|
64
|
-
export const proPhotoToXYZ = (args: number[]): [number, number, number] => {
|
|
65
|
-
const prophoto_linear = proPhotoToProPhotoLinear([args[0], args[1], args[2]]);
|
|
66
|
-
return d50toD65(proPhotoLinearToXyz([prophoto_linear[0], prophoto_linear[1], prophoto_linear[2]]));
|
|
67
|
-
};
|
|
68
|
-
|
|
69
|
-
/**
|
|
70
|
-
* Convert XYZ to Pro-Photo
|
|
71
|
-
*
|
|
72
|
-
* @param args
|
|
73
|
-
*/
|
|
74
|
-
export const proPhotoFromXYZ = (args: [number, number, number, number]): [number, number, number, number] => {
|
|
75
|
-
const [r, g, b] = proPhotoLinearToProPhoto(xyzToProPhotoLinear(d65toD50([args[0], args[1], args[2]])));
|
|
76
|
-
return [r, g, b, args[3]];
|
|
77
|
-
};
|
|
78
|
-
|
|
79
|
-
/**
|
|
80
|
-
* Convert Pro-Photo to XYZ and Pack
|
|
81
|
-
*
|
|
82
|
-
* @param args
|
|
83
|
-
*/
|
|
84
|
-
export const convertProPhoto = (args: number[]): number => {
|
|
85
|
-
const xyz = proPhotoToXYZ([args[0], args[1], args[2]]);
|
|
86
|
-
return packXYZ([xyz[0], xyz[1], xyz[2], args[3]]);
|
|
87
|
-
};
|
|
@@ -1,90 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* REC2020 related functions
|
|
3
|
-
*/
|
|
4
|
-
|
|
5
|
-
import { multiplyMatrices, packXYZ } from '../color-utilities';
|
|
6
|
-
|
|
7
|
-
const _a = 1.09929682680944;
|
|
8
|
-
const _b = 0.018053968510807;
|
|
9
|
-
|
|
10
|
-
/**
|
|
11
|
-
* Convert rec2020 to rec2020 linear
|
|
12
|
-
*
|
|
13
|
-
* @param rgb
|
|
14
|
-
*/
|
|
15
|
-
export const rec20202rec2020Linear = (rgb: [number, number, number]): number[] => {
|
|
16
|
-
return rgb.map(function (c) {
|
|
17
|
-
return c < _b * 4.5 ? c / 4.5 : Math.pow((c + _a - 1) / _a, 1 / 0.45);
|
|
18
|
-
});
|
|
19
|
-
};
|
|
20
|
-
|
|
21
|
-
/**
|
|
22
|
-
* Convert rec2020 linear to rec2020
|
|
23
|
-
*
|
|
24
|
-
* @param rgb
|
|
25
|
-
*/
|
|
26
|
-
export const rec2020Linear2rec2020 = (rgb: [number, number, number]): number[] => {
|
|
27
|
-
return rgb.map(function (c) {
|
|
28
|
-
return c >= _b ? _a * Math.pow(c, 0.45) - (_a - 1) : 4.5 * c;
|
|
29
|
-
});
|
|
30
|
-
};
|
|
31
|
-
|
|
32
|
-
/**
|
|
33
|
-
* Convert rec2020 linear to XYZ D65
|
|
34
|
-
*
|
|
35
|
-
* @param rec
|
|
36
|
-
*/
|
|
37
|
-
export const rec2020LinearToXyz = (rec: [number, number, number]): [number, number, number] => {
|
|
38
|
-
return multiplyMatrices(
|
|
39
|
-
[
|
|
40
|
-
0.6369580483012914, 0.14461690358620832, 0.1688809751641721, 0.2627002120112671, 0.6779980715188708,
|
|
41
|
-
0.05930171646986196, 0.0, 0.028072693049087428, 1.060985057710791
|
|
42
|
-
],
|
|
43
|
-
rec
|
|
44
|
-
);
|
|
45
|
-
};
|
|
46
|
-
|
|
47
|
-
/**
|
|
48
|
-
* Convert XYZ D65 to rec2020 linear
|
|
49
|
-
*
|
|
50
|
-
* @param xyz
|
|
51
|
-
*/
|
|
52
|
-
export const xyzToRec2020Linear = (xyz: [number, number, number]): [number, number, number] => {
|
|
53
|
-
return multiplyMatrices(
|
|
54
|
-
[
|
|
55
|
-
1.716651187971268, -0.355670783776392, -0.25336628137366, -0.666684351832489, 1.616481236634939,
|
|
56
|
-
0.0157685458139111, 0.017639857445311, -0.042770613257809, 0.942103121235474
|
|
57
|
-
],
|
|
58
|
-
xyz
|
|
59
|
-
);
|
|
60
|
-
};
|
|
61
|
-
|
|
62
|
-
/**
|
|
63
|
-
* Convert Rec2020 to XYZ
|
|
64
|
-
*
|
|
65
|
-
* @param args
|
|
66
|
-
*/
|
|
67
|
-
export const rec2020ToXYZ = (args: number[]): [number, number, number] => {
|
|
68
|
-
const rec2020_linear = rec20202rec2020Linear([args[0], args[1], args[2]]);
|
|
69
|
-
return rec2020LinearToXyz([rec2020_linear[0], rec2020_linear[1], rec2020_linear[2]]);
|
|
70
|
-
};
|
|
71
|
-
|
|
72
|
-
/**
|
|
73
|
-
* Convert XYZ to Rec2020
|
|
74
|
-
*
|
|
75
|
-
* @param args
|
|
76
|
-
*/
|
|
77
|
-
export const rec2020FromXYZ = (args: [number, number, number, number]): [number, number, number, number] => {
|
|
78
|
-
const [r, g, b] = rec2020Linear2rec2020(xyzToRec2020Linear([args[0], args[1], args[2]]));
|
|
79
|
-
return [r, g, b, args[3]];
|
|
80
|
-
};
|
|
81
|
-
|
|
82
|
-
/**
|
|
83
|
-
* Convert Rec2020 to SRGB and Pack
|
|
84
|
-
*
|
|
85
|
-
* @param args
|
|
86
|
-
*/
|
|
87
|
-
export const convertRec2020 = (args: number[]): number => {
|
|
88
|
-
const xyz = rec2020ToXYZ([args[0], args[1], args[2]]);
|
|
89
|
-
return packXYZ([xyz[0], xyz[1], xyz[2], args[3]]);
|
|
90
|
-
};
|
|
@@ -1,87 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* SRGB related functions
|
|
3
|
-
*/
|
|
4
|
-
|
|
5
|
-
import { clamp, multiplyMatrices } from '../color-math';
|
|
6
|
-
|
|
7
|
-
/**
|
|
8
|
-
* Convert XYZ to linear-light sRGB
|
|
9
|
-
*
|
|
10
|
-
* @param xyz
|
|
11
|
-
*/
|
|
12
|
-
export const xyz2rgbLinear = (xyz: [number, number, number]): [number, number, number] => {
|
|
13
|
-
return multiplyMatrices(
|
|
14
|
-
[
|
|
15
|
-
3.2409699419045226, -1.537383177570094, -0.4986107602930034, -0.9692436362808796, 1.8759675015077202,
|
|
16
|
-
0.04155505740717559, 0.05563007969699366, -0.20397695888897652, 1.0569715142428786
|
|
17
|
-
],
|
|
18
|
-
xyz
|
|
19
|
-
);
|
|
20
|
-
};
|
|
21
|
-
|
|
22
|
-
/**
|
|
23
|
-
* Convert XYZ to linear-light sRGB
|
|
24
|
-
*
|
|
25
|
-
* @param xyz
|
|
26
|
-
*/
|
|
27
|
-
export const rgbLinear2xyz = (xyz: [number, number, number]): [number, number, number] => {
|
|
28
|
-
return multiplyMatrices(
|
|
29
|
-
[
|
|
30
|
-
0.41239079926595934, 0.357584339383878, 0.1804807884018343, 0.21263900587151027, 0.715168678767756,
|
|
31
|
-
0.07219231536073371, 0.01933081871559182, 0.11919477979462598, 0.9505321522496607
|
|
32
|
-
],
|
|
33
|
-
xyz
|
|
34
|
-
);
|
|
35
|
-
};
|
|
36
|
-
|
|
37
|
-
/**
|
|
38
|
-
* Convert sRGB to RGB
|
|
39
|
-
*
|
|
40
|
-
* @param rgb
|
|
41
|
-
*/
|
|
42
|
-
export const srgbLinear2rgb = (rgb: [number, number, number]): number[] => {
|
|
43
|
-
return rgb.map((c: number) => {
|
|
44
|
-
const sign = c < 0 ? -1 : 1,
|
|
45
|
-
abs = Math.abs(c);
|
|
46
|
-
|
|
47
|
-
return abs > 0.0031308 ? sign * (1.055 * abs ** (1 / 2.4) - 0.055) : 12.92 * c;
|
|
48
|
-
});
|
|
49
|
-
};
|
|
50
|
-
|
|
51
|
-
/**
|
|
52
|
-
* Convert RGB to sRGB
|
|
53
|
-
*
|
|
54
|
-
* @param rgb
|
|
55
|
-
*/
|
|
56
|
-
export const rgb2rgbLinear = (rgb: [number, number, number]): number[] => {
|
|
57
|
-
return rgb.map((c: number) => {
|
|
58
|
-
const sign = c < 0 ? -1 : 1,
|
|
59
|
-
abs = Math.abs(c);
|
|
60
|
-
|
|
61
|
-
return abs <= 0.04045 ? c / 12.92 : sign * ((abs + 0.055) / 1.055) ** 2.4;
|
|
62
|
-
});
|
|
63
|
-
};
|
|
64
|
-
|
|
65
|
-
/**
|
|
66
|
-
* XYZ to SRGB
|
|
67
|
-
*
|
|
68
|
-
* @param args
|
|
69
|
-
*/
|
|
70
|
-
export const srgbFromXYZ = (args: [number, number, number, number]): [number, number, number, number] => {
|
|
71
|
-
const [r, g, b] = srgbLinear2rgb(xyz2rgbLinear([args[0], args[1], args[2]]));
|
|
72
|
-
return [r, g, b, args[3]];
|
|
73
|
-
};
|
|
74
|
-
|
|
75
|
-
/**
|
|
76
|
-
* XYZ to SRGB-Linear
|
|
77
|
-
* @param args
|
|
78
|
-
*/
|
|
79
|
-
export const srgbLinearFromXYZ = (args: [number, number, number, number]): [number, number, number, number] => {
|
|
80
|
-
const [r, g, b] = xyz2rgbLinear([args[0], args[1], args[2]]);
|
|
81
|
-
return [
|
|
82
|
-
clamp(Math.round(r * 255), 0, 255),
|
|
83
|
-
clamp(Math.round(g * 255), 0, 255),
|
|
84
|
-
clamp(Math.round(b * 255), 0, 255),
|
|
85
|
-
args[3]
|
|
86
|
-
];
|
|
87
|
-
};
|