@lexmata/micropdf 0.4.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 (170) hide show
  1. package/LICENSE +191 -0
  2. package/README.md +985 -0
  3. package/binding.gyp +73 -0
  4. package/dist/annot.d.ts +458 -0
  5. package/dist/annot.d.ts.map +1 -0
  6. package/dist/annot.js +697 -0
  7. package/dist/annot.js.map +1 -0
  8. package/dist/archive.d.ts +128 -0
  9. package/dist/archive.d.ts.map +1 -0
  10. package/dist/archive.js +268 -0
  11. package/dist/archive.js.map +1 -0
  12. package/dist/buffer.d.ts +572 -0
  13. package/dist/buffer.d.ts.map +1 -0
  14. package/dist/buffer.js +971 -0
  15. package/dist/buffer.js.map +1 -0
  16. package/dist/colorspace.d.ts +287 -0
  17. package/dist/colorspace.d.ts.map +1 -0
  18. package/dist/colorspace.js +542 -0
  19. package/dist/colorspace.js.map +1 -0
  20. package/dist/context.d.ts +184 -0
  21. package/dist/context.d.ts.map +1 -0
  22. package/dist/context.js +320 -0
  23. package/dist/context.js.map +1 -0
  24. package/dist/cookie.d.ts +164 -0
  25. package/dist/cookie.d.ts.map +1 -0
  26. package/dist/cookie.js +306 -0
  27. package/dist/cookie.js.map +1 -0
  28. package/dist/device.d.ts +169 -0
  29. package/dist/device.d.ts.map +1 -0
  30. package/dist/device.js +350 -0
  31. package/dist/device.js.map +1 -0
  32. package/dist/display-list.d.ts +202 -0
  33. package/dist/display-list.d.ts.map +1 -0
  34. package/dist/display-list.js +410 -0
  35. package/dist/display-list.js.map +1 -0
  36. package/dist/document.d.ts +637 -0
  37. package/dist/document.d.ts.map +1 -0
  38. package/dist/document.js +902 -0
  39. package/dist/document.js.map +1 -0
  40. package/dist/easy.d.ts +423 -0
  41. package/dist/easy.d.ts.map +1 -0
  42. package/dist/easy.js +644 -0
  43. package/dist/easy.js.map +1 -0
  44. package/dist/enhanced.d.ts +226 -0
  45. package/dist/enhanced.d.ts.map +1 -0
  46. package/dist/enhanced.js +368 -0
  47. package/dist/enhanced.js.map +1 -0
  48. package/dist/filter.d.ts +51 -0
  49. package/dist/filter.d.ts.map +1 -0
  50. package/dist/filter.js +381 -0
  51. package/dist/filter.js.map +1 -0
  52. package/dist/font.d.ts +222 -0
  53. package/dist/font.d.ts.map +1 -0
  54. package/dist/font.js +381 -0
  55. package/dist/font.js.map +1 -0
  56. package/dist/form.d.ts +214 -0
  57. package/dist/form.d.ts.map +1 -0
  58. package/dist/form.js +497 -0
  59. package/dist/form.js.map +1 -0
  60. package/dist/geometry.d.ts +469 -0
  61. package/dist/geometry.d.ts.map +1 -0
  62. package/dist/geometry.js +780 -0
  63. package/dist/geometry.js.map +1 -0
  64. package/dist/image.d.ts +172 -0
  65. package/dist/image.d.ts.map +1 -0
  66. package/dist/image.js +348 -0
  67. package/dist/image.js.map +1 -0
  68. package/dist/index.d.ts +171 -0
  69. package/dist/index.d.ts.map +1 -0
  70. package/dist/index.js +339 -0
  71. package/dist/index.js.map +1 -0
  72. package/dist/link.d.ts +168 -0
  73. package/dist/link.d.ts.map +1 -0
  74. package/dist/link.js +343 -0
  75. package/dist/link.js.map +1 -0
  76. package/dist/micropdf.d.ts +40 -0
  77. package/dist/micropdf.d.ts.map +1 -0
  78. package/dist/micropdf.js +45 -0
  79. package/dist/micropdf.js.map +1 -0
  80. package/dist/nanopdf.d.ts +40 -0
  81. package/dist/nanopdf.d.ts.map +1 -0
  82. package/dist/nanopdf.js +45 -0
  83. package/dist/nanopdf.js.map +1 -0
  84. package/dist/native.d.ts +242 -0
  85. package/dist/native.d.ts.map +1 -0
  86. package/dist/native.js +509 -0
  87. package/dist/native.js.map +1 -0
  88. package/dist/output.d.ts +166 -0
  89. package/dist/output.d.ts.map +1 -0
  90. package/dist/output.js +365 -0
  91. package/dist/output.js.map +1 -0
  92. package/dist/path.d.ts +420 -0
  93. package/dist/path.d.ts.map +1 -0
  94. package/dist/path.js +687 -0
  95. package/dist/path.js.map +1 -0
  96. package/dist/pdf/object.d.ts +489 -0
  97. package/dist/pdf/object.d.ts.map +1 -0
  98. package/dist/pdf/object.js +1045 -0
  99. package/dist/pdf/object.js.map +1 -0
  100. package/dist/pixmap.d.ts +315 -0
  101. package/dist/pixmap.d.ts.map +1 -0
  102. package/dist/pixmap.js +590 -0
  103. package/dist/pixmap.js.map +1 -0
  104. package/dist/profiler.d.ts +159 -0
  105. package/dist/profiler.d.ts.map +1 -0
  106. package/dist/profiler.js +380 -0
  107. package/dist/profiler.js.map +1 -0
  108. package/dist/render-options.d.ts +227 -0
  109. package/dist/render-options.d.ts.map +1 -0
  110. package/dist/render-options.js +130 -0
  111. package/dist/render-options.js.map +1 -0
  112. package/dist/resource-tracking.d.ts +332 -0
  113. package/dist/resource-tracking.d.ts.map +1 -0
  114. package/dist/resource-tracking.js +653 -0
  115. package/dist/resource-tracking.js.map +1 -0
  116. package/dist/simple.d.ts +276 -0
  117. package/dist/simple.d.ts.map +1 -0
  118. package/dist/simple.js +343 -0
  119. package/dist/simple.js.map +1 -0
  120. package/dist/stext.d.ts +290 -0
  121. package/dist/stext.d.ts.map +1 -0
  122. package/dist/stext.js +312 -0
  123. package/dist/stext.js.map +1 -0
  124. package/dist/stream.d.ts +174 -0
  125. package/dist/stream.d.ts.map +1 -0
  126. package/dist/stream.js +476 -0
  127. package/dist/stream.js.map +1 -0
  128. package/dist/text.d.ts +337 -0
  129. package/dist/text.d.ts.map +1 -0
  130. package/dist/text.js +454 -0
  131. package/dist/text.js.map +1 -0
  132. package/dist/typed-arrays.d.ts +127 -0
  133. package/dist/typed-arrays.d.ts.map +1 -0
  134. package/dist/typed-arrays.js +410 -0
  135. package/dist/typed-arrays.js.map +1 -0
  136. package/dist/types.d.ts +358 -0
  137. package/dist/types.d.ts.map +1 -0
  138. package/dist/types.js +216 -0
  139. package/dist/types.js.map +1 -0
  140. package/native/annot.cc +557 -0
  141. package/native/buffer.cc +204 -0
  142. package/native/colorspace.cc +166 -0
  143. package/native/context.cc +84 -0
  144. package/native/cookie.cc +179 -0
  145. package/native/device.cc +179 -0
  146. package/native/display_list.cc +179 -0
  147. package/native/document.cc +268 -0
  148. package/native/enhanced.cc +70 -0
  149. package/native/font.cc +282 -0
  150. package/native/form.cc +523 -0
  151. package/native/geometry.cc +255 -0
  152. package/native/image.cc +216 -0
  153. package/native/include/micropdf/enhanced.h +38 -0
  154. package/native/include/micropdf/types.h +36 -0
  155. package/native/include/micropdf.h +106 -0
  156. package/native/include/mupdf-ffi.h +39 -0
  157. package/native/include/mupdf.h +11 -0
  158. package/native/include/mupdf_minimal.h +381 -0
  159. package/native/lib/linux-x64/libmicropdf.a +0 -0
  160. package/native/link.cc +234 -0
  161. package/native/micropdf.cc +71 -0
  162. package/native/output.cc +229 -0
  163. package/native/page.cc +572 -0
  164. package/native/path.cc +259 -0
  165. package/native/pixmap.cc +240 -0
  166. package/native/stext.cc +610 -0
  167. package/native/stream.cc +239 -0
  168. package/package.json +120 -0
  169. package/scripts/build-from-rust.js +97 -0
  170. package/scripts/install.js +184 -0
@@ -0,0 +1,542 @@
1
+ /**
2
+ * Colorspace - PDF color space handling and color conversion
3
+ *
4
+ * This module provides comprehensive support for PDF color spaces including device
5
+ * color spaces (Gray, RGB, CMYK), indexed colors, ICC profiles, Lab, and more.
6
+ *
7
+ * This module provides 100% API compatibility with MuPDF's colorspace operations.
8
+ *
9
+ * @module colorspace
10
+ * @example
11
+ * ```typescript
12
+ * import { Colorspace, ColorspaceType } from 'micropdf';
13
+ *
14
+ * // Use device colorspaces
15
+ * const rgb = Colorspace.deviceRGB();
16
+ * const gray = Colorspace.deviceGray();
17
+ * const cmyk = Colorspace.deviceCMYK();
18
+ *
19
+ * console.log(rgb.n); // 3 (components)
20
+ * console.log(gray.n); // 1 (component)
21
+ * console.log(cmyk.n); // 4 (components)
22
+ *
23
+ * // Convert colors between colorspaces
24
+ * const rgbColor = [255, 0, 0]; // Red in RGB (0-255)
25
+ * const normalizedRgb = rgbColor.map(c => c / 255); // Normalize to 0-1
26
+ * const grayColor = rgb.convertColor(gray, normalizedRgb);
27
+ *
28
+ * console.log(grayColor); // [~0.3] (approximately 30% gray)
29
+ *
30
+ * // Create indexed colorspace
31
+ * const palette = new Uint8Array([
32
+ * 255, 0, 0, // Red
33
+ * 0, 255, 0, // Green
34
+ * 0, 0, 255 // Blue
35
+ * ]);
36
+ * const indexed = Colorspace.createIndexed(rgb, 2, palette);
37
+ * ```
38
+ */
39
+ /**
40
+ * PDF colorspace types.
41
+ *
42
+ * Colorspace types determine how color values are interpreted and rendered.
43
+ * Each type has a specific number of components and color model.
44
+ *
45
+ * @enum {number}
46
+ * @example
47
+ * ```typescript
48
+ * const cs = Colorspace.deviceRGB();
49
+ *
50
+ * if (cs.type === ColorspaceType.RGB) {
51
+ * console.log('RGB colorspace with 3 components');
52
+ * }
53
+ *
54
+ * // Check colorspace type
55
+ * const isGray = cs.type === ColorspaceType.Gray;
56
+ * const isCMYK = cs.type === ColorspaceType.CMYK;
57
+ * ```
58
+ */
59
+ export var ColorspaceType;
60
+ (function (ColorspaceType) {
61
+ /** No colorspace / undefined */
62
+ ColorspaceType[ColorspaceType["None"] = 0] = "None";
63
+ /** Grayscale (1 component: luminance) */
64
+ ColorspaceType[ColorspaceType["Gray"] = 1] = "Gray";
65
+ /** RGB color (3 components: red, green, blue) */
66
+ ColorspaceType[ColorspaceType["RGB"] = 2] = "RGB";
67
+ /** BGR color (3 components: blue, green, red) - reverse of RGB */
68
+ ColorspaceType[ColorspaceType["BGR"] = 3] = "BGR";
69
+ /** CMYK color (4 components: cyan, magenta, yellow, black) - used in printing */
70
+ ColorspaceType[ColorspaceType["CMYK"] = 4] = "CMYK";
71
+ /** Lab color (3 components: L*, a*, b*) - perceptual uniformity */
72
+ ColorspaceType[ColorspaceType["Lab"] = 5] = "Lab";
73
+ /** Indexed color (palette-based, 1 component: index) */
74
+ ColorspaceType[ColorspaceType["Indexed"] = 6] = "Indexed";
75
+ /** Separation color (spot colors, 1 component per colorant) */
76
+ ColorspaceType[ColorspaceType["Separation"] = 7] = "Separation";
77
+ /** DeviceN color (multiple spot colors) */
78
+ ColorspaceType[ColorspaceType["DeviceN"] = 8] = "DeviceN";
79
+ /** ICC profile-based color (variable components) */
80
+ ColorspaceType[ColorspaceType["ICC"] = 9] = "ICC";
81
+ })(ColorspaceType || (ColorspaceType = {}));
82
+ /**
83
+ * A PDF colorspace defining how colors are interpreted.
84
+ *
85
+ * Colorspaces determine the color model and number of components used to represent
86
+ * colors in a PDF. They handle color conversion between different color models and
87
+ * provide color manipulation capabilities.
88
+ *
89
+ * **Device Colorspaces**: Use the singleton factory methods (`deviceGray()`,
90
+ * `deviceRGB()`, `deviceCMYK()`) for standard device colorspaces.
91
+ *
92
+ * **Reference Counting**: Colorspaces use manual reference counting. Call `keep()`
93
+ * to increment the reference count and `drop()` to decrement it.
94
+ *
95
+ * @class Colorspace
96
+ * @example
97
+ * ```typescript
98
+ * // Use device colorspaces (recommended)
99
+ * const rgb = Colorspace.deviceRGB();
100
+ * const gray = Colorspace.deviceGray();
101
+ *
102
+ * // Create a pixmap with RGB colorspace
103
+ * const pixmap = Pixmap.create(rgb, 100, 100, true);
104
+ *
105
+ * // Convert RGB to grayscale
106
+ * const rgbColor = [1.0, 0.0, 0.0]; // Red (normalized 0-1)
107
+ * const grayValue = rgb.convertColor(gray, rgbColor);
108
+ * console.log(grayValue); // [~0.3] (30% gray)
109
+ *
110
+ * // Get colorspace info
111
+ * console.log(rgb.name); // "DeviceRGB"
112
+ * console.log(rgb.n); // 3 (components)
113
+ * console.log(rgb.type); // ColorspaceType.RGB
114
+ * ```
115
+ *
116
+ * @example
117
+ * ```typescript
118
+ * // Create indexed colorspace for palette-based colors
119
+ * const base = Colorspace.deviceRGB();
120
+ * const palette = new Uint8Array([
121
+ * 255, 0, 0, // Index 0: Red
122
+ * 0, 255, 0, // Index 1: Green
123
+ * 0, 0, 255, // Index 2: Blue
124
+ * 255, 255, 0, // Index 3: Yellow
125
+ * ]);
126
+ *
127
+ * const indexed = Colorspace.createIndexed(base, 3, palette);
128
+ * console.log(indexed.n); // 1 (index component)
129
+ *
130
+ * // Use index 0 (red), 1 (green), 2 (blue), or 3 (yellow)
131
+ * ```
132
+ *
133
+ * @example
134
+ * ```typescript
135
+ * // Color conversion between colorspaces
136
+ * const rgb = Colorspace.deviceRGB();
137
+ * const cmyk = Colorspace.deviceCMYK();
138
+ * const gray = Colorspace.deviceGray();
139
+ *
140
+ * // Red in RGB
141
+ * const red = [1.0, 0.0, 0.0];
142
+ *
143
+ * // Convert RGB to CMYK
144
+ * const cmykRed = rgb.convertColor(cmyk, red);
145
+ * console.log(cmykRed); // [0, 1, 1, 0] (cyan=0, magenta=100%, yellow=100%, black=0)
146
+ *
147
+ * // Convert RGB to grayscale
148
+ * const grayRed = rgb.convertColor(gray, red);
149
+ * console.log(grayRed); // [~0.3] (30% gray - perceptual luminance)
150
+ * ```
151
+ */
152
+ export class Colorspace {
153
+ _type;
154
+ _n;
155
+ _name;
156
+ _refCount = 1;
157
+ _base = null;
158
+ _high = 255;
159
+ _lookup = null;
160
+ _colorants = [];
161
+ constructor(type, n, name) {
162
+ this._type = type;
163
+ this._n = n;
164
+ this._name = name || this.getDefaultName(type);
165
+ }
166
+ getDefaultName(type) {
167
+ const names = {
168
+ [ColorspaceType.None]: 'None',
169
+ [ColorspaceType.Gray]: 'DeviceGray',
170
+ [ColorspaceType.RGB]: 'DeviceRGB',
171
+ [ColorspaceType.BGR]: 'DeviceBGR',
172
+ [ColorspaceType.CMYK]: 'DeviceCMYK',
173
+ [ColorspaceType.Lab]: 'Lab',
174
+ [ColorspaceType.Indexed]: 'Indexed',
175
+ [ColorspaceType.Separation]: 'Separation',
176
+ [ColorspaceType.DeviceN]: 'DeviceN',
177
+ [ColorspaceType.ICC]: 'ICCBased'
178
+ };
179
+ return names[type];
180
+ }
181
+ // ============================================================================
182
+ // Device Colorspaces (Singletons)
183
+ // ============================================================================
184
+ static _deviceGray = null;
185
+ static _deviceRGB = null;
186
+ static _deviceBGR = null;
187
+ static _deviceCMYK = null;
188
+ static _deviceLab = null;
189
+ static _deviceSRGB = null;
190
+ static _deviceGrayscale = null;
191
+ static deviceGray() {
192
+ if (!Colorspace._deviceGray) {
193
+ Colorspace._deviceGray = new Colorspace(ColorspaceType.Gray, 1);
194
+ }
195
+ return Colorspace._deviceGray;
196
+ }
197
+ static deviceRGB() {
198
+ if (!Colorspace._deviceRGB) {
199
+ Colorspace._deviceRGB = new Colorspace(ColorspaceType.RGB, 3);
200
+ }
201
+ return Colorspace._deviceRGB;
202
+ }
203
+ static deviceBGR() {
204
+ if (!Colorspace._deviceBGR) {
205
+ Colorspace._deviceBGR = new Colorspace(ColorspaceType.BGR, 3);
206
+ }
207
+ return Colorspace._deviceBGR;
208
+ }
209
+ static deviceCMYK() {
210
+ if (!Colorspace._deviceCMYK) {
211
+ Colorspace._deviceCMYK = new Colorspace(ColorspaceType.CMYK, 4);
212
+ }
213
+ return Colorspace._deviceCMYK;
214
+ }
215
+ static deviceLab() {
216
+ if (!Colorspace._deviceLab) {
217
+ Colorspace._deviceLab = new Colorspace(ColorspaceType.Lab, 3);
218
+ }
219
+ return Colorspace._deviceLab;
220
+ }
221
+ static deviceSRGB() {
222
+ if (!Colorspace._deviceSRGB) {
223
+ Colorspace._deviceSRGB = new Colorspace(ColorspaceType.RGB, 3, 'sRGB');
224
+ }
225
+ return Colorspace._deviceSRGB;
226
+ }
227
+ static deviceGrayscale() {
228
+ if (!Colorspace._deviceGrayscale) {
229
+ Colorspace._deviceGrayscale = new Colorspace(ColorspaceType.Gray, 1, 'Grayscale');
230
+ }
231
+ return Colorspace._deviceGrayscale;
232
+ }
233
+ // Convenience aliases
234
+ static createGray() {
235
+ return Colorspace.deviceGray();
236
+ }
237
+ static createRGB() {
238
+ return Colorspace.deviceRGB();
239
+ }
240
+ static createCMYK() {
241
+ return Colorspace.deviceCMYK();
242
+ }
243
+ // ============================================================================
244
+ // Reference Counting
245
+ // ============================================================================
246
+ keep() {
247
+ this._refCount++;
248
+ return this;
249
+ }
250
+ drop() {
251
+ if (this._refCount > 0) {
252
+ this._refCount--;
253
+ }
254
+ }
255
+ /**
256
+ * Clone this colorspace
257
+ */
258
+ clone() {
259
+ const cloned = new Colorspace(this._type, this._n, this._name);
260
+ cloned._base = this._base;
261
+ cloned._high = this._high;
262
+ cloned._lookup = this._lookup ? new Uint8Array(this._lookup) : null;
263
+ cloned._colorants = [...this._colorants];
264
+ return cloned;
265
+ }
266
+ // ============================================================================
267
+ // Properties
268
+ // ============================================================================
269
+ /**
270
+ * Get number of components
271
+ */
272
+ get n() {
273
+ return this._n;
274
+ }
275
+ /**
276
+ * Get colorspace type
277
+ */
278
+ get type() {
279
+ return this._type;
280
+ }
281
+ /**
282
+ * Get colorspace name
283
+ */
284
+ get name() {
285
+ return this._name;
286
+ }
287
+ /**
288
+ * Get name as string (alias)
289
+ */
290
+ nameString() {
291
+ return this._name;
292
+ }
293
+ /**
294
+ * Get base colorspace (for indexed/separation)
295
+ */
296
+ base() {
297
+ return this._base;
298
+ }
299
+ /**
300
+ * Get base colorspace component count
301
+ */
302
+ baseN() {
303
+ return this._base ? this._base.n : 0;
304
+ }
305
+ /**
306
+ * Get high value (for indexed)
307
+ */
308
+ high() {
309
+ return this._high;
310
+ }
311
+ /**
312
+ * Get lookup table (for indexed)
313
+ */
314
+ lookup() {
315
+ return this._lookup;
316
+ }
317
+ /**
318
+ * Get maximum color value
319
+ */
320
+ max() {
321
+ return this._type === ColorspaceType.Lab ? 100 : 1;
322
+ }
323
+ // ============================================================================
324
+ // Type Checking
325
+ // ============================================================================
326
+ isGray() {
327
+ return this._type === ColorspaceType.Gray;
328
+ }
329
+ isRGB() {
330
+ return this._type === ColorspaceType.RGB || this._type === ColorspaceType.BGR;
331
+ }
332
+ isCMYK() {
333
+ return this._type === ColorspaceType.CMYK;
334
+ }
335
+ isLab() {
336
+ return this._type === ColorspaceType.Lab;
337
+ }
338
+ isDevice() {
339
+ return (this._type === ColorspaceType.Gray ||
340
+ this._type === ColorspaceType.RGB ||
341
+ this._type === ColorspaceType.BGR ||
342
+ this._type === ColorspaceType.CMYK);
343
+ }
344
+ isIndexed() {
345
+ return this._type === ColorspaceType.Indexed;
346
+ }
347
+ isDeviceN() {
348
+ return this._type === ColorspaceType.DeviceN;
349
+ }
350
+ isICC() {
351
+ return this._type === ColorspaceType.ICC;
352
+ }
353
+ isSubtractive() {
354
+ return this._type === ColorspaceType.CMYK;
355
+ }
356
+ // ============================================================================
357
+ // DeviceN Colorspace Checks
358
+ // ============================================================================
359
+ deviceNHasCMYK() {
360
+ if (this._type !== ColorspaceType.DeviceN) {
361
+ return false;
362
+ }
363
+ return this._colorants.some((c) => ['Cyan', 'Magenta', 'Yellow', 'Black'].includes(c));
364
+ }
365
+ deviceNHasOnlyCMYK() {
366
+ if (this._type !== ColorspaceType.DeviceN) {
367
+ return false;
368
+ }
369
+ return this._colorants.every((c) => ['Cyan', 'Magenta', 'Yellow', 'Black'].includes(c));
370
+ }
371
+ hasSpots() {
372
+ return this._type === ColorspaceType.Separation || this._type === ColorspaceType.DeviceN;
373
+ }
374
+ numSpots() {
375
+ if (this._type === ColorspaceType.Separation) {
376
+ return 1;
377
+ }
378
+ if (this._type === ColorspaceType.DeviceN) {
379
+ return this._colorants.length;
380
+ }
381
+ return 0;
382
+ }
383
+ // ============================================================================
384
+ // Colorants
385
+ // ============================================================================
386
+ /**
387
+ * Get colorant name by index
388
+ */
389
+ colorant(index) {
390
+ return this._colorants[index] || null;
391
+ }
392
+ /**
393
+ * Get number of colorants
394
+ */
395
+ numColorants() {
396
+ return this._colorants.length;
397
+ }
398
+ /**
399
+ * Get all colorants
400
+ */
401
+ getColorants() {
402
+ return [...this._colorants];
403
+ }
404
+ // ============================================================================
405
+ // Factory Methods
406
+ // ============================================================================
407
+ /**
408
+ * Create indexed colorspace
409
+ */
410
+ static createIndexed(base, high, lookup) {
411
+ const cs = new Colorspace(ColorspaceType.Indexed, 1, 'Indexed');
412
+ cs._base = base;
413
+ cs._high = high;
414
+ cs._lookup = lookup;
415
+ return cs;
416
+ }
417
+ /**
418
+ * Create DeviceN colorspace
419
+ */
420
+ static createDeviceN(colorants) {
421
+ const cs = new Colorspace(ColorspaceType.DeviceN, colorants.length, 'DeviceN');
422
+ cs._colorants = [...colorants];
423
+ return cs;
424
+ }
425
+ /**
426
+ * Create ICC-based colorspace
427
+ */
428
+ static createICC(n, name) {
429
+ return new Colorspace(ColorspaceType.ICC, n, name || 'ICCBased');
430
+ }
431
+ // ============================================================================
432
+ // Color Conversion
433
+ // ============================================================================
434
+ /**
435
+ * Convert color from this colorspace to another
436
+ */
437
+ convertColor(destCS, srcColor) {
438
+ if (this.equals(destCS)) {
439
+ return [...srcColor];
440
+ }
441
+ // Convert to RGB as intermediate
442
+ const rgb = this.toRGB(srcColor);
443
+ // Convert from RGB to destination
444
+ return destCS.fromRGB(rgb);
445
+ }
446
+ /**
447
+ * Convert color to RGB
448
+ */
449
+ toRGB(color) {
450
+ switch (this._type) {
451
+ case ColorspaceType.Gray:
452
+ return [color[0], color[0], color[0]];
453
+ case ColorspaceType.RGB:
454
+ return [color[0], color[1], color[2]];
455
+ case ColorspaceType.BGR:
456
+ return [color[2], color[1], color[0]];
457
+ case ColorspaceType.CMYK: {
458
+ const c = color[0];
459
+ const m = color[1];
460
+ const y = color[2];
461
+ const k = color[3];
462
+ return [(1 - c) * (1 - k), (1 - m) * (1 - k), (1 - y) * (1 - k)];
463
+ }
464
+ default:
465
+ return [0, 0, 0];
466
+ }
467
+ }
468
+ /**
469
+ * Convert RGB to this colorspace
470
+ */
471
+ fromRGB(rgb) {
472
+ const [r, g, b] = rgb;
473
+ switch (this._type) {
474
+ case ColorspaceType.Gray:
475
+ return [0.299 * r + 0.587 * g + 0.114 * b];
476
+ case ColorspaceType.RGB:
477
+ return [r, g, b];
478
+ case ColorspaceType.BGR:
479
+ return [b, g, r];
480
+ case ColorspaceType.CMYK: {
481
+ const k = 1 - Math.max(r, g, b);
482
+ if (k === 1) {
483
+ return [0, 0, 0, 1];
484
+ }
485
+ return [(1 - r - k) / (1 - k), (1 - g - k) / (1 - k), (1 - b - k) / (1 - k), k];
486
+ }
487
+ default:
488
+ return new Array(this._n).fill(0);
489
+ }
490
+ }
491
+ /**
492
+ * Convert a single pixel
493
+ */
494
+ convertPixel(destCS, srcPixel, destPixel) {
495
+ const srcColor = [...srcPixel.slice(0, this._n)].map((v) => v / 255);
496
+ const destColor = this.convertColor(destCS, srcColor);
497
+ for (let i = 0; i < destCS._n; i++) {
498
+ destPixel[i] = Math.round(destColor[i] * 255);
499
+ }
500
+ }
501
+ /**
502
+ * Clamp color values to valid range
503
+ */
504
+ clampColor(color) {
505
+ const max = this.max();
506
+ return color.map((v) => Math.max(0, Math.min(max, v)));
507
+ }
508
+ // ============================================================================
509
+ // Comparison
510
+ // ============================================================================
511
+ /**
512
+ * Check if two colorspaces are equal
513
+ */
514
+ equals(other) {
515
+ if (this._type !== other._type) {
516
+ return false;
517
+ }
518
+ if (this._n !== other._n) {
519
+ return false;
520
+ }
521
+ if (this._name !== other._name) {
522
+ return false;
523
+ }
524
+ return true;
525
+ }
526
+ // ============================================================================
527
+ // Validation
528
+ // ============================================================================
529
+ /**
530
+ * Check if colorspace is valid
531
+ */
532
+ isValid() {
533
+ if (this._n <= 0 || this._n > 32) {
534
+ return false;
535
+ }
536
+ if (this._type === ColorspaceType.None) {
537
+ return false;
538
+ }
539
+ return true;
540
+ }
541
+ }
542
+ //# sourceMappingURL=colorspace.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"colorspace.js","sourceRoot":"","sources":["../src/colorspace.ts"],"names":[],"mappings":"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"}