html2canvas-pro 2.1.0 → 2.2.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.
Files changed (266) hide show
  1. package/dist/html2canvas-pro.esm.js +10226 -10526
  2. package/dist/html2canvas-pro.esm.js.map +1 -1
  3. package/dist/html2canvas-pro.js +10869 -11171
  4. package/dist/html2canvas-pro.js.map +1 -1
  5. package/dist/html2canvas-pro.min.js +8 -8
  6. package/dist/lib/config.js +0 -22
  7. package/dist/lib/core/cache-storage.js +3 -40
  8. package/dist/lib/core/constants.js +25 -0
  9. package/dist/lib/core/context.js +1 -0
  10. package/dist/lib/core/features.js +3 -2
  11. package/dist/lib/core/validator.js +3 -3
  12. package/dist/lib/css/grouped/background-styles.js +36 -0
  13. package/dist/lib/css/grouped/border-styles.js +75 -0
  14. package/dist/lib/css/grouped/font-styles.js +93 -0
  15. package/dist/lib/css/grouped/layout-styles.js +127 -0
  16. package/dist/lib/css/index.js +74 -46
  17. package/dist/lib/css/layout/text.js +7 -6
  18. package/dist/lib/css/property-descriptors/background-blend-mode.js +41 -0
  19. package/dist/lib/css/property-descriptors/border-image-repeat.js +42 -0
  20. package/dist/lib/css/property-descriptors/border-image-slice.js +45 -0
  21. package/dist/lib/css/property-descriptors/border-image-source.js +21 -0
  22. package/dist/lib/css/property-descriptors/border-radius.js +1 -1
  23. package/dist/lib/css/property-descriptors/box-decoration-break.js +18 -0
  24. package/dist/lib/css/property-descriptors/counter-increment.js +17 -12
  25. package/dist/lib/css/property-descriptors/counter-reset.js +4 -12
  26. package/dist/lib/css/property-descriptors/filter.js +76 -0
  27. package/dist/lib/css/property-descriptors/font-variant-ligatures.js +34 -0
  28. package/dist/lib/css/property-descriptors/object-fit.js +1 -1
  29. package/dist/lib/css/property-descriptors/object-position.js +42 -0
  30. package/dist/lib/css/property-descriptors/visibility.js +1 -1
  31. package/dist/lib/css/property-descriptors/zoom.js +18 -0
  32. package/dist/lib/css/syntax/parser.js +0 -1
  33. package/dist/lib/css/types/color.js +5 -1
  34. package/dist/lib/css/types/functions/repeating-linear-gradient.js +9 -0
  35. package/dist/lib/css/types/image.js +12 -2
  36. package/dist/lib/css/types/length-percentage.js +6 -2
  37. package/dist/lib/css/types/safe-eval.js +80 -0
  38. package/dist/lib/dom/document-cloner.js +23 -163
  39. package/dist/lib/dom/slot-cloner.js +176 -0
  40. package/dist/lib/index.js +1 -17
  41. package/dist/lib/render/canvas/background-renderer.js +169 -30
  42. package/dist/lib/render/canvas/border-image-renderer.js +153 -0
  43. package/dist/lib/render/canvas/canvas-renderer.js +39 -190
  44. package/dist/lib/render/canvas/content-renderer.js +202 -0
  45. package/dist/lib/render/canvas/effects-renderer.js +3 -0
  46. package/dist/lib/render/canvas/foreignobject-renderer.js +5 -1
  47. package/dist/lib/render/canvas/text/text-decoration-renderer.js +99 -0
  48. package/dist/lib/render/canvas/text-renderer.js +100 -224
  49. package/dist/lib/render/effects.js +38 -3
  50. package/dist/lib/render/object-fit.js +19 -15
  51. package/dist/lib/render/stacking-context.js +11 -0
  52. package/dist/types/config.d.ts +0 -10
  53. package/dist/types/core/cache-storage.d.ts +0 -24
  54. package/dist/types/core/constants.d.ts +22 -0
  55. package/dist/types/core/context.d.ts +3 -0
  56. package/dist/types/core/performance-monitor.d.ts +4 -4
  57. package/dist/types/core/validator.d.ts +6 -8
  58. package/dist/types/css/grouped/background-styles.d.ts +16 -0
  59. package/dist/types/css/grouped/border-styles.d.ts +31 -0
  60. package/dist/types/css/grouped/font-styles.d.ts +35 -0
  61. package/dist/types/css/grouped/layout-styles.d.ts +46 -0
  62. package/dist/types/css/index.d.ts +30 -0
  63. package/dist/types/css/property-descriptors/background-blend-mode.d.ts +23 -0
  64. package/dist/types/css/property-descriptors/border-image-repeat.d.ts +12 -0
  65. package/dist/types/css/property-descriptors/border-image-slice.d.ts +10 -0
  66. package/dist/types/css/property-descriptors/border-image-source.d.ts +4 -0
  67. package/dist/types/css/property-descriptors/box-decoration-break.d.ts +6 -0
  68. package/dist/types/css/property-descriptors/counter-increment.d.ts +3 -0
  69. package/dist/types/css/property-descriptors/filter.d.ts +3 -0
  70. package/dist/types/css/property-descriptors/font-variant-ligatures.d.ts +14 -0
  71. package/dist/types/css/property-descriptors/object-position.d.ts +4 -0
  72. package/dist/types/css/property-descriptors/zoom.d.ts +3 -0
  73. package/dist/types/css/types/functions/repeating-linear-gradient.d.ts +4 -0
  74. package/dist/types/css/types/image.d.ts +4 -2
  75. package/dist/types/css/types/safe-eval.d.ts +8 -0
  76. package/dist/types/dom/document-cloner.d.ts +3 -44
  77. package/dist/types/dom/slot-cloner.d.ts +66 -0
  78. package/dist/types/index.d.ts +3 -7
  79. package/dist/types/options.d.ts +11 -0
  80. package/dist/types/render/canvas/background-renderer.d.ts +23 -0
  81. package/dist/types/render/canvas/border-image-renderer.d.ts +18 -0
  82. package/dist/types/render/canvas/canvas-renderer.d.ts +1 -0
  83. package/dist/types/render/canvas/content-renderer.d.ts +44 -0
  84. package/dist/types/render/canvas/text/text-decoration-renderer.d.ts +18 -0
  85. package/dist/types/render/canvas/text-renderer.d.ts +12 -1
  86. package/dist/types/render/effects.d.ts +12 -2
  87. package/dist/types/render/object-fit.d.ts +2 -1
  88. package/dist/types/render/renderer-interface.d.ts +11 -9
  89. package/package.json +7 -20
  90. package/dist/lib/dom/replaced-elements/pseudo-elements.js +0 -0
  91. package/dist/lib/invariant.js +0 -9
  92. package/dist/types/dom/replaced-elements/pseudo-elements.d.ts +0 -0
  93. package/dist/types/invariant.d.ts +0 -1
  94. package/src/__tests__/index.ts +0 -99
  95. package/src/config.ts +0 -107
  96. package/src/core/__mocks__/cache-storage.ts +0 -1
  97. package/src/core/__mocks__/context.ts +0 -19
  98. package/src/core/__mocks__/features.ts +0 -8
  99. package/src/core/__mocks__/logger.ts +0 -17
  100. package/src/core/__tests__/cache-storage.test.ts +0 -205
  101. package/src/core/__tests__/cache-storage.ts +0 -278
  102. package/src/core/__tests__/logger.ts +0 -29
  103. package/src/core/__tests__/validator.ts +0 -359
  104. package/src/core/bitwise.ts +0 -1
  105. package/src/core/cache-storage.ts +0 -315
  106. package/src/core/context.ts +0 -31
  107. package/src/core/debugger.ts +0 -32
  108. package/src/core/features.ts +0 -222
  109. package/src/core/logger.ts +0 -64
  110. package/src/core/origin-checker.ts +0 -57
  111. package/src/core/performance-monitor.ts +0 -241
  112. package/src/core/render-element.ts +0 -272
  113. package/src/core/util.ts +0 -1
  114. package/src/core/validator.ts +0 -593
  115. package/src/css/index.ts +0 -427
  116. package/src/css/layout/__mocks__/bounds.ts +0 -6
  117. package/src/css/layout/bounds.ts +0 -79
  118. package/src/css/layout/text.ts +0 -161
  119. package/src/css/property-descriptor.ts +0 -49
  120. package/src/css/property-descriptors/__tests__/background-tests.ts +0 -65
  121. package/src/css/property-descriptors/__tests__/clip-path.test.ts +0 -280
  122. package/src/css/property-descriptors/__tests__/font-family.ts +0 -25
  123. package/src/css/property-descriptors/__tests__/image-rendering-integration.test.ts +0 -153
  124. package/src/css/property-descriptors/__tests__/image-rendering-performance.test.ts +0 -175
  125. package/src/css/property-descriptors/__tests__/image-rendering.test.ts +0 -72
  126. package/src/css/property-descriptors/__tests__/paint-order.ts +0 -87
  127. package/src/css/property-descriptors/__tests__/text-shadow.ts +0 -94
  128. package/src/css/property-descriptors/__tests__/transform-tests.ts +0 -18
  129. package/src/css/property-descriptors/background-clip.ts +0 -30
  130. package/src/css/property-descriptors/background-color.ts +0 -9
  131. package/src/css/property-descriptors/background-image.ts +0 -27
  132. package/src/css/property-descriptors/background-origin.ts +0 -31
  133. package/src/css/property-descriptors/background-position.ts +0 -38
  134. package/src/css/property-descriptors/background-repeat.ts +0 -44
  135. package/src/css/property-descriptors/background-size.ts +0 -27
  136. package/src/css/property-descriptors/border-color.ts +0 -13
  137. package/src/css/property-descriptors/border-radius.ts +0 -19
  138. package/src/css/property-descriptors/border-style.ts +0 -34
  139. package/src/css/property-descriptors/border-width.ts +0 -20
  140. package/src/css/property-descriptors/box-shadow.ts +0 -60
  141. package/src/css/property-descriptors/clip-path.ts +0 -271
  142. package/src/css/property-descriptors/color.ts +0 -9
  143. package/src/css/property-descriptors/content.ts +0 -26
  144. package/src/css/property-descriptors/counter-increment.ts +0 -43
  145. package/src/css/property-descriptors/counter-reset.ts +0 -36
  146. package/src/css/property-descriptors/direction.ts +0 -23
  147. package/src/css/property-descriptors/display.ts +0 -117
  148. package/src/css/property-descriptors/duration.ts +0 -14
  149. package/src/css/property-descriptors/float.ts +0 -29
  150. package/src/css/property-descriptors/font-family.ts +0 -38
  151. package/src/css/property-descriptors/font-size.ts +0 -9
  152. package/src/css/property-descriptors/font-style.ts +0 -25
  153. package/src/css/property-descriptors/font-variant.ts +0 -12
  154. package/src/css/property-descriptors/font-weight.ts +0 -26
  155. package/src/css/property-descriptors/image-rendering.ts +0 -33
  156. package/src/css/property-descriptors/letter-spacing.ts +0 -25
  157. package/src/css/property-descriptors/line-break.ts +0 -22
  158. package/src/css/property-descriptors/line-height.ts +0 -22
  159. package/src/css/property-descriptors/list-style-image.ts +0 -19
  160. package/src/css/property-descriptors/list-style-position.ts +0 -22
  161. package/src/css/property-descriptors/list-style-type.ts +0 -179
  162. package/src/css/property-descriptors/margin.ts +0 -13
  163. package/src/css/property-descriptors/mix-blend-mode.ts +0 -35
  164. package/src/css/property-descriptors/object-fit.ts +0 -39
  165. package/src/css/property-descriptors/opacity.ts +0 -15
  166. package/src/css/property-descriptors/overflow-wrap.ts +0 -22
  167. package/src/css/property-descriptors/overflow.ts +0 -34
  168. package/src/css/property-descriptors/padding.ts +0 -14
  169. package/src/css/property-descriptors/paint-order.ts +0 -42
  170. package/src/css/property-descriptors/position.ts +0 -30
  171. package/src/css/property-descriptors/quotes.ts +0 -57
  172. package/src/css/property-descriptors/rotate.ts +0 -34
  173. package/src/css/property-descriptors/text-align.ts +0 -26
  174. package/src/css/property-descriptors/text-decoration-color.ts +0 -9
  175. package/src/css/property-descriptors/text-decoration-line.ts +0 -38
  176. package/src/css/property-descriptors/text-decoration-style.ts +0 -32
  177. package/src/css/property-descriptors/text-decoration-thickness.ts +0 -30
  178. package/src/css/property-descriptors/text-overflow.ts +0 -23
  179. package/src/css/property-descriptors/text-shadow.ts +0 -52
  180. package/src/css/property-descriptors/text-transform.ts +0 -27
  181. package/src/css/property-descriptors/text-underline-offset.ts +0 -27
  182. package/src/css/property-descriptors/transform-origin.ts +0 -29
  183. package/src/css/property-descriptors/transform.ts +0 -74
  184. package/src/css/property-descriptors/visibility.ts +0 -25
  185. package/src/css/property-descriptors/webkit-line-clamp.ts +0 -30
  186. package/src/css/property-descriptors/webkit-text-stroke-color.ts +0 -8
  187. package/src/css/property-descriptors/webkit-text-stroke-width.ts +0 -15
  188. package/src/css/property-descriptors/word-break.ts +0 -25
  189. package/src/css/property-descriptors/writing-mode.ts +0 -37
  190. package/src/css/property-descriptors/z-index.ts +0 -27
  191. package/src/css/syntax/__tests__/tokernizer-tests.ts +0 -29
  192. package/src/css/syntax/parser.ts +0 -188
  193. package/src/css/syntax/tokenizer.ts +0 -822
  194. package/src/css/type-descriptor.ts +0 -7
  195. package/src/css/types/__tests__/color-tests.ts +0 -147
  196. package/src/css/types/__tests__/image-tests.ts +0 -239
  197. package/src/css/types/angle.ts +0 -86
  198. package/src/css/types/color-math.ts +0 -22
  199. package/src/css/types/color-spaces/a98.ts +0 -86
  200. package/src/css/types/color-spaces/p3.ts +0 -92
  201. package/src/css/types/color-spaces/pro-photo.ts +0 -87
  202. package/src/css/types/color-spaces/rec2020.ts +0 -90
  203. package/src/css/types/color-spaces/srgb.ts +0 -87
  204. package/src/css/types/color-utilities.ts +0 -452
  205. package/src/css/types/color.ts +0 -485
  206. package/src/css/types/functions/-prefix-linear-gradient.ts +0 -35
  207. package/src/css/types/functions/-prefix-radial-gradient.ts +0 -106
  208. package/src/css/types/functions/-webkit-gradient.ts +0 -69
  209. package/src/css/types/functions/__tests__/radial-gradient.ts +0 -69
  210. package/src/css/types/functions/counter.ts +0 -511
  211. package/src/css/types/functions/gradient.ts +0 -206
  212. package/src/css/types/functions/linear-gradient.ts +0 -28
  213. package/src/css/types/functions/radial-gradient.ts +0 -101
  214. package/src/css/types/image.ts +0 -120
  215. package/src/css/types/index.ts +0 -1
  216. package/src/css/types/length-percentage.ts +0 -137
  217. package/src/css/types/length.ts +0 -7
  218. package/src/css/types/time.ts +0 -20
  219. package/src/dom/__mocks__/document-cloner.ts +0 -22
  220. package/src/dom/__tests__/dom-normalizer.test.ts +0 -133
  221. package/src/dom/__tests__/element-container.test.ts +0 -129
  222. package/src/dom/document-cloner.ts +0 -929
  223. package/src/dom/dom-normalizer.ts +0 -133
  224. package/src/dom/element-container.ts +0 -75
  225. package/src/dom/elements/li-element-container.ts +0 -10
  226. package/src/dom/elements/ol-element-container.ts +0 -12
  227. package/src/dom/elements/select-element-container.ts +0 -10
  228. package/src/dom/elements/textarea-element-container.ts +0 -9
  229. package/src/dom/node-parser.ts +0 -177
  230. package/src/dom/node-type-guards.ts +0 -70
  231. package/src/dom/replaced-elements/canvas-element-container.ts +0 -15
  232. package/src/dom/replaced-elements/iframe-element-container.ts +0 -55
  233. package/src/dom/replaced-elements/image-element-container.ts +0 -16
  234. package/src/dom/replaced-elements/index.ts +0 -5
  235. package/src/dom/replaced-elements/input-element-container.ts +0 -105
  236. package/src/dom/replaced-elements/pseudo-elements.ts +0 -0
  237. package/src/dom/replaced-elements/svg-element-container.ts +0 -23
  238. package/src/dom/text-container.ts +0 -42
  239. package/src/global.d.ts +0 -19
  240. package/src/index.ts +0 -82
  241. package/src/invariant.ts +0 -5
  242. package/src/options.ts +0 -55
  243. package/src/render/__tests__/object-fit.test.ts +0 -85
  244. package/src/render/background.ts +0 -298
  245. package/src/render/bezier-curve.ts +0 -47
  246. package/src/render/border.ts +0 -165
  247. package/src/render/bound-curves.ts +0 -388
  248. package/src/render/box-sizing.ts +0 -31
  249. package/src/render/canvas/__tests__/background-renderer.test.ts +0 -72
  250. package/src/render/canvas/__tests__/border-renderer.test.ts +0 -24
  251. package/src/render/canvas/__tests__/effects-renderer.test.ts +0 -32
  252. package/src/render/canvas/__tests__/text-renderer.test.ts +0 -471
  253. package/src/render/canvas/background-renderer.ts +0 -271
  254. package/src/render/canvas/border-renderer.ts +0 -224
  255. package/src/render/canvas/canvas-path.ts +0 -31
  256. package/src/render/canvas/canvas-renderer.ts +0 -641
  257. package/src/render/canvas/effects-renderer.ts +0 -130
  258. package/src/render/canvas/foreignobject-renderer.ts +0 -53
  259. package/src/render/canvas/text-renderer.ts +0 -700
  260. package/src/render/effects.ts +0 -75
  261. package/src/render/font-metrics.ts +0 -72
  262. package/src/render/object-fit.ts +0 -100
  263. package/src/render/path.ts +0 -37
  264. package/src/render/renderer-interface.ts +0 -28
  265. package/src/render/stacking-context.ts +0 -386
  266. 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
- };