modern-pdf-lib 0.25.0 → 0.28.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 (110) hide show
  1. package/README.md +16 -3
  2. package/dist/{batchOptimize-Ba_pWw71.cjs → batchOptimize-CXC9gNqD.cjs} +55 -55
  3. package/dist/{batchOptimize-DtRwBOqR.mjs → batchOptimize-CjLGD5ie.mjs} +25 -25
  4. package/dist/{bridge-DYCQzxF7.cjs → bridge-ByvzPu5h.cjs} +29 -31
  5. package/dist/{bridge-CcivG_Sm.mjs → bridge-ZD6O6QQa.mjs} +4 -5
  6. package/dist/browser.cjs +263 -151
  7. package/dist/browser.d.cts +166 -166
  8. package/dist/browser.d.cts.map +1 -1
  9. package/dist/browser.d.mts +166 -166
  10. package/dist/browser.d.mts.map +1 -1
  11. package/dist/browser.mjs +15 -19
  12. package/dist/cli/index.cjs +7 -7
  13. package/dist/cli/index.mjs +8 -8
  14. package/dist/{compressionAnalysis-odbHC7Uk.mjs → compressionAnalysis-BgKy45pA.mjs} +60 -74
  15. package/dist/{compressionAnalysis-DGs-MqTe.d.mts → compressionAnalysis-CDOp_vPr.d.mts} +136 -136
  16. package/dist/compressionAnalysis-CDOp_vPr.d.mts.map +1 -0
  17. package/dist/{compressionAnalysis-B84FPXaQ.cjs → compressionAnalysis-Djv-Zvcd.cjs} +90 -104
  18. package/dist/{compressionAnalysis-VtYV9Zmq.d.cts → compressionAnalysis-UfmonqbM.d.cts} +136 -136
  19. package/dist/compressionAnalysis-UfmonqbM.d.cts.map +1 -0
  20. package/dist/create.cjs +21 -23
  21. package/dist/create.d.cts +2 -2
  22. package/dist/create.d.mts +2 -2
  23. package/dist/create.mjs +3 -5
  24. package/dist/{deduplicateImages-MfUDPxQz.mjs → deduplicateImages-BTCyAPfJ.mjs} +4 -5
  25. package/dist/{deduplicateImages-cKsnD6Ep.cjs → deduplicateImages-CaGgaqyS.cjs} +14 -15
  26. package/dist/{fieldAppearance-C8PoLFSc.d.mts → fieldAppearance-Df1262CT.d.cts} +44 -44
  27. package/dist/fieldAppearance-Df1262CT.d.cts.map +1 -0
  28. package/dist/{fieldAppearance-CdiGFG5e.d.cts → fieldAppearance-_CZdoUCD.d.mts} +44 -44
  29. package/dist/fieldAppearance-_CZdoUCD.d.mts.map +1 -0
  30. package/dist/fontEmbed-DGiZS0h2.d.cts +677 -0
  31. package/dist/fontEmbed-DGiZS0h2.d.cts.map +1 -0
  32. package/dist/fontEmbed-DtA_riGC.d.mts +677 -0
  33. package/dist/fontEmbed-DtA_riGC.d.mts.map +1 -0
  34. package/dist/forms.cjs +3 -4
  35. package/dist/forms.d.cts +2 -2
  36. package/dist/forms.d.mts +2 -2
  37. package/dist/forms.mjs +2 -3
  38. package/dist/{grayscaleDetect-C6kFF3dk.mjs → grayscaleDetect-6GJrgBRT.mjs} +3 -3
  39. package/dist/{grayscaleDetect-C2m-eEXR.cjs → grayscaleDetect-DAUqxjgR.cjs} +13 -14
  40. package/dist/{imageExtract-zEb1gnkb.cjs → imageExtract-DT50Hp_g.cjs} +13 -14
  41. package/dist/{imageExtract-Dnk_Ssv7.mjs → imageExtract-Dapir-ux.mjs} +3 -4
  42. package/dist/index-C1lZe66f.d.mts +8682 -0
  43. package/dist/index-C1lZe66f.d.mts.map +1 -0
  44. package/dist/index-D1SvXWSI.d.cts +8682 -0
  45. package/dist/index-D1SvXWSI.d.cts.map +1 -0
  46. package/dist/index.cjs +263 -150
  47. package/dist/index.d.cts +7 -7
  48. package/dist/index.d.mts +7 -7
  49. package/dist/index.mjs +14 -17
  50. package/dist/{layout-DH61a1iR.cjs → layout-C4vbTlBW.cjs} +184 -134
  51. package/dist/{layout-D6EUKSP8.mjs → layout-lO4x64kY.mjs} +50 -12
  52. package/dist/{loader-C7B5dVCI.mjs → loader-B1Ix7ozU.mjs} +259 -13
  53. package/dist/{loader-I4zdkoWc.cjs → loader-DR7H0XOf.cjs} +343 -67
  54. package/dist/parse.cjs +7 -8
  55. package/dist/parse.d.cts +3 -3
  56. package/dist/parse.d.mts +3 -3
  57. package/dist/parse.mjs +6 -7
  58. package/dist/pdfDocument-CH2E4UCc.d.mts +5160 -0
  59. package/dist/pdfDocument-CH2E4UCc.d.mts.map +1 -0
  60. package/dist/{pdfDocument-CEbbUP9i.cjs → pdfDocument-C_7mrBCL.cjs} +20493 -9511
  61. package/dist/pdfDocument-CzOipXnw.d.cts +5160 -0
  62. package/dist/pdfDocument-CzOipXnw.d.cts.map +1 -0
  63. package/dist/{pdfDocument-B0_XwS4X.mjs → pdfDocument-DRbT6HZw.mjs} +11017 -863
  64. package/dist/{pdfForm-9gd40uz9.cjs → pdfForm-BVS_do95.cjs} +113 -102
  65. package/dist/pdfForm-Ca86NDWn.d.cts +897 -0
  66. package/dist/pdfForm-Ca86NDWn.d.cts.map +1 -0
  67. package/dist/pdfForm-Ca86NDWn.d.mts +897 -0
  68. package/dist/pdfForm-Ca86NDWn.d.mts.map +1 -0
  69. package/dist/{pdfForm-Cn-cVicP.mjs → pdfForm-CfLnlsj-.mjs} +23 -18
  70. package/dist/{pdfObjects-1veop1_d.cjs → pdfObjects-BcPlSI0a.cjs} +62 -53
  71. package/dist/{pdfObjects-uEsWlfzU.mjs → pdfObjects-CB7TEdbW.mjs} +12 -2
  72. package/dist/rolldown-runtime-ak5kbic3.cjs +18 -0
  73. package/dist/{src-B1iDGLCL.cjs → src-C-IDXuvi.cjs} +9886 -1421
  74. package/dist/{src-Db6Qknoz.mjs → src-DJaD-bJ2.mjs} +8392 -515
  75. package/dist/{streamDecode-Bj568Nc9.mjs → streamDecode-BamENT3k.mjs} +129 -150
  76. package/dist/{streamDecode-CvgErkFu.cjs → streamDecode-DcaZz309.cjs} +139 -160
  77. package/package.json +26 -22
  78. package/dist/compressionAnalysis-DGs-MqTe.d.mts.map +0 -1
  79. package/dist/compressionAnalysis-VtYV9Zmq.d.cts.map +0 -1
  80. package/dist/fflateAdapter-LTAeAhaD.cjs +0 -207
  81. package/dist/fflateAdapter-PSiW_ML7.mjs +0 -196
  82. package/dist/fieldAppearance-C8PoLFSc.d.mts.map +0 -1
  83. package/dist/fieldAppearance-CdiGFG5e.d.cts.map +0 -1
  84. package/dist/fontEmbed-BN842wlb.d.cts +0 -659
  85. package/dist/fontEmbed-BN842wlb.d.cts.map +0 -1
  86. package/dist/fontEmbed-Dgq5K89o.d.mts +0 -659
  87. package/dist/fontEmbed-Dgq5K89o.d.mts.map +0 -1
  88. package/dist/fontSubset-5SLWMmEw.cjs +0 -518
  89. package/dist/fontSubset-D-vQQems.mjs +0 -495
  90. package/dist/index-DCSbmXWh.d.mts +0 -5939
  91. package/dist/index-DCSbmXWh.d.mts.map +0 -1
  92. package/dist/index-J1W3FdL8.d.cts +0 -5939
  93. package/dist/index-J1W3FdL8.d.cts.map +0 -1
  94. package/dist/libdeflateWasm-8b91Vmia.mjs +0 -220
  95. package/dist/libdeflateWasm-BdiDEJOj.cjs +0 -237
  96. package/dist/pdfCatalog-3yMIhJtt.mjs +0 -138
  97. package/dist/pdfCatalog-CYy4NXEY.cjs +0 -173
  98. package/dist/pdfDocument-BgvEP5Po.d.mts +0 -4673
  99. package/dist/pdfDocument-BgvEP5Po.d.mts.map +0 -1
  100. package/dist/pdfDocument-CbU-2TjT.d.cts +0 -4673
  101. package/dist/pdfDocument-CbU-2TjT.d.cts.map +0 -1
  102. package/dist/pdfForm-BiyNtYem.d.mts +0 -905
  103. package/dist/pdfForm-BiyNtYem.d.mts.map +0 -1
  104. package/dist/pdfForm-SOXJ72LW.d.cts +0 -905
  105. package/dist/pdfForm-SOXJ72LW.d.cts.map +0 -1
  106. package/dist/pdfPage-B_d9HmkG.mjs +0 -8015
  107. package/dist/pdfPage-Cd8jOJp6.cjs +0 -8728
  108. package/dist/pngEmbed-BWAbEUKF.mjs +0 -552
  109. package/dist/pngEmbed-D4X4ZN-3.cjs +0 -563
  110. package/dist/rolldown-runtime-CKhH4XqG.cjs +0 -24
package/README.md CHANGED
@@ -15,7 +15,7 @@ Create, parse, fill, merge, sign, and manipulate PDF documents<br />in Node, Den
15
15
 
16
16
  [![npm version](https://img.shields.io/npm/v/modern-pdf-lib?style=flat-square&color=cb3837)](https://www.npmjs.com/package/modern-pdf-lib)
17
17
  [![bundle size](https://img.shields.io/badge/gzip-36kb_core-blue?style=flat-square)](https://bundlephobia.com/package/modern-pdf-lib)
18
- [![tests](https://img.shields.io/badge/tests-4%2C549_passing-brightgreen?style=flat-square)](#)
18
+ [![tests](https://img.shields.io/badge/tests-5%2C904_passing-brightgreen?style=flat-square)](#)
19
19
  [![TypeScript](https://img.shields.io/badge/TypeScript-6.0-3178c6?style=flat-square&logo=typescript&logoColor=white)](#)
20
20
  [![License: MIT](https://img.shields.io/badge/license-MIT-yellow?style=flat-square)](LICENSE)
21
21
 
@@ -107,9 +107,11 @@ For environments without ES module support, use the IIFE bundle which exposes a
107
107
  - Automatic font subsetting
108
108
  - JPEG / PNG image embedding
109
109
  - Image optimization (JPEG recompression, dedup, grayscale)
110
- - RGB, CMYK, grayscale colors
110
+ - RGB, CMYK, grayscale, spot, DeviceN colors
111
111
  - Linear & radial gradients, tiling patterns
112
112
  - Text layout (multiline, combed, auto-size)
113
+ - Header/footer engine with templates
114
+ - Advanced text layout (Knuth-Plass, hyphenation)
113
115
 
114
116
  </td>
115
117
  <td width="50%" valign="top">
@@ -137,7 +139,8 @@ For environments without ES module support, use the IIFE bundle which exposes a
137
139
  - PDF/A-1b through PDF/A-3u validation
138
140
  - Tagged PDF / PDF/UA accessibility
139
141
  - Structure tree & marked content
140
- - Redaction with content removal
142
+ - Redaction with content removal & overlay
143
+ - PDF/UA validation & auto-enforcement
141
144
 
142
145
  </td>
143
146
  <td width="50%" valign="top">
@@ -156,6 +159,8 @@ For environments without ES module support, use the IIFE bundle which exposes a
156
159
  - Linearization (fast web view)
157
160
  - Browser helpers (download, blob, data URL)
158
161
  - Service Worker & Web Worker support
162
+ - Batch processing with memory pressure handling
163
+ - Spot colors (Separation) & DeviceN
159
164
  - CLI: `npx modern-pdf optimize`
160
165
 
161
166
  </td>
@@ -269,6 +274,14 @@ For environments without ES module support, use the IIFE bundle which exposes a
269
274
  <td align="center">9 formats (QR, EAN, Code 128, PDF417…)</td>
270
275
  <td align="center">No</td></tr>
271
276
 
277
+ <tr><td><strong>Spot / DeviceN colors</strong></td>
278
+ <td align="center">Separation, multi-ink, conversion</td>
279
+ <td align="center">No</td></tr>
280
+
281
+ <tr><td><strong>Header / footer engine</strong></td>
282
+ <td align="center">Templates, page numbers, dates</td>
283
+ <td align="center">No</td></tr>
284
+
272
285
  <tr><td><strong>Table layout</strong></td>
273
286
  <td align="center">Spanning, pagination, presets, overflow</td>
274
287
  <td align="center">No</td></tr>
@@ -1,8 +1,7 @@
1
- const require_rolldown_runtime = require('./rolldown-runtime-CKhH4XqG.cjs');
2
- const require_pdfObjects = require('./pdfObjects-1veop1_d.cjs');
3
- const require_imageExtract = require('./imageExtract-zEb1gnkb.cjs');
4
- const require_grayscaleDetect = require('./grayscaleDetect-C2m-eEXR.cjs');
5
-
1
+ const require_rolldown_runtime = require("./rolldown-runtime-ak5kbic3.cjs");
2
+ const require_pdfObjects = require("./pdfObjects-BcPlSI0a.cjs");
3
+ const require_imageExtract = require("./imageExtract-DT50Hp_g.cjs");
4
+ const require_grayscaleDetect = require("./grayscaleDetect-DAUqxjgR.cjs");
6
5
  //#region src/assets/image/iccProfile.ts
7
6
  /**
8
7
  * @module assets/image/iccProfile
@@ -90,13 +89,14 @@ function parseIccDescription(data) {
90
89
  if (descLen === 0) return void 0;
91
90
  const strEnd = Math.min(tagOffset + 12 + descLen - 1, tagOffset + tagSize);
92
91
  if (strEnd <= tagOffset + 12) return void 0;
93
- const chars = [];
94
- for (let j = tagOffset + 12; j < strEnd; j++) {
95
- const c = data[j];
96
- if (c === 0) break;
97
- chars.push(String.fromCharCode(c));
92
+ let nullIdx = strEnd;
93
+ for (let j = tagOffset + 12; j < strEnd; j++) if (data[j] === 0) {
94
+ nullIdx = j;
95
+ break;
98
96
  }
99
- return chars.length > 0 ? chars.join("") : void 0;
97
+ const strBytes = data.subarray(tagOffset + 12, nullIdx);
98
+ if (strBytes.length === 0) return void 0;
99
+ return new TextDecoder("ascii").decode(strBytes);
100
100
  }
101
101
  }
102
102
  /**
@@ -197,7 +197,6 @@ function embedIccProfile(profile, registry) {
197
197
  const stream = new require_pdfObjects.PdfStream(dict, profile.data);
198
198
  return registry.register(stream);
199
199
  }
200
-
201
200
  //#endregion
202
201
  //#region src/assets/image/batchOptimize.ts
203
202
  var batchOptimize_exports = /* @__PURE__ */ require_rolldown_runtime.__exportAll({ optimizeAllImages: () => optimizeAllImages });
@@ -255,8 +254,8 @@ async function optimizeAllImages(doc, options = {}) {
255
254
  const chromaSubsampling = options.chromaSubsampling ?? "4:2:0";
256
255
  const concurrency = Math.max(1, options.concurrency ?? 1);
257
256
  const { pageRange, minImageSize, colorSpaces, namePattern } = options;
258
- const { encodeJpegWasm, isJpegWasmReady } = await Promise.resolve().then(() => require("./bridge-DYCQzxF7.cjs")).then((n) => n.bridge_exports);
259
- const { decodeJpegWasm } = await Promise.resolve().then(() => require("./bridge-DYCQzxF7.cjs")).then((n) => n.bridge_exports);
257
+ const { encodeJpegWasm, isJpegWasmReady } = await Promise.resolve().then(() => require("./bridge-ByvzPu5h.cjs")).then((n) => n.bridge_exports);
258
+ const { decodeJpegWasm } = await Promise.resolve().then(() => require("./bridge-ByvzPu5h.cjs")).then((n) => n.bridge_exports);
260
259
  const images = require_imageExtract.extractImages(doc);
261
260
  const registry = doc.getRegistry();
262
261
  const results = new Array(images.length);
@@ -302,15 +301,16 @@ async function optimizeAllImages(doc, options = {}) {
302
301
  const expectedLen = img.width * img.height * channels;
303
302
  if (pixels.length !== expectedLen) return skip(false, `Pixel data length mismatch: got ${pixels.length}, expected ${expectedLen}`);
304
303
  if (channels === 4 && img.colorSpace === "DeviceCMYK") {
305
- const rgb = new Uint8Array(img.width * img.height * 3);
306
- for (let i = 0; i < img.width * img.height; i++) {
307
- const c = pixels[i * 4] / 255;
308
- const m = pixels[i * 4 + 1] / 255;
309
- const y = pixels[i * 4 + 2] / 255;
310
- const k = pixels[i * 4 + 3] / 255;
311
- rgb[i * 3] = Math.round(255 * (1 - c) * (1 - k));
312
- rgb[i * 3 + 1] = Math.round(255 * (1 - m) * (1 - k));
313
- rgb[i * 3 + 2] = Math.round(255 * (1 - y) * (1 - k));
304
+ const pixelCount = img.width * img.height;
305
+ const rgb = new Uint8Array(pixelCount * 3);
306
+ for (let i = 0; i < pixelCount; i++) {
307
+ const ci = 255 - pixels[i * 4];
308
+ const mi = 255 - pixels[i * 4 + 1];
309
+ const yi = 255 - pixels[i * 4 + 2];
310
+ const ki = 255 - pixels[i * 4 + 3];
311
+ rgb[i * 3] = (ci * ki + 127) / 255 | 0;
312
+ rgb[i * 3 + 1] = (mi * ki + 127) / 255 | 0;
313
+ rgb[i * 3 + 2] = (yi * ki + 127) / 255 | 0;
314
314
  }
315
315
  pixels = rgb;
316
316
  channels = 3;
@@ -386,42 +386,42 @@ async function optimizeAllImages(doc, options = {}) {
386
386
  perImage: results
387
387
  };
388
388
  }
389
-
390
389
  //#endregion
391
- Object.defineProperty(exports, 'batchOptimize_exports', {
392
- enumerable: true,
393
- get: function () {
394
- return batchOptimize_exports;
395
- }
390
+ Object.defineProperty(exports, "batchOptimize_exports", {
391
+ enumerable: true,
392
+ get: function() {
393
+ return batchOptimize_exports;
394
+ }
396
395
  });
397
- Object.defineProperty(exports, 'embedIccProfile', {
398
- enumerable: true,
399
- get: function () {
400
- return embedIccProfile;
401
- }
396
+ Object.defineProperty(exports, "embedIccProfile", {
397
+ enumerable: true,
398
+ get: function() {
399
+ return embedIccProfile;
400
+ }
402
401
  });
403
- Object.defineProperty(exports, 'extractIccProfile', {
404
- enumerable: true,
405
- get: function () {
406
- return extractIccProfile;
407
- }
402
+ Object.defineProperty(exports, "extractIccProfile", {
403
+ enumerable: true,
404
+ get: function() {
405
+ return extractIccProfile;
406
+ }
408
407
  });
409
- Object.defineProperty(exports, 'optimizeAllImages', {
410
- enumerable: true,
411
- get: function () {
412
- return optimizeAllImages;
413
- }
408
+ Object.defineProperty(exports, "optimizeAllImages", {
409
+ enumerable: true,
410
+ get: function() {
411
+ return optimizeAllImages;
412
+ }
414
413
  });
415
- Object.defineProperty(exports, 'parseIccColorSpace', {
416
- enumerable: true,
417
- get: function () {
418
- return parseIccColorSpace;
419
- }
414
+ Object.defineProperty(exports, "parseIccColorSpace", {
415
+ enumerable: true,
416
+ get: function() {
417
+ return parseIccColorSpace;
418
+ }
420
419
  });
421
- Object.defineProperty(exports, 'parseIccDescription', {
422
- enumerable: true,
423
- get: function () {
424
- return parseIccDescription;
425
- }
420
+ Object.defineProperty(exports, "parseIccDescription", {
421
+ enumerable: true,
422
+ get: function() {
423
+ return parseIccDescription;
424
+ }
426
425
  });
427
- //# sourceMappingURL=batchOptimize-Ba_pWw71.cjs.map
426
+
427
+ //# sourceMappingURL=batchOptimize-CXC9gNqD.cjs.map
@@ -1,8 +1,7 @@
1
- import { os as __exportAll } from "./index-DCSbmXWh.d.mts";
2
- import { i as PdfName, l as PdfStream, o as PdfNumber, r as PdfDict, t as PdfArray } from "./pdfObjects-uEsWlfzU.mjs";
3
- import { n as extractImages, t as decodeImageStream } from "./imageExtract-Dnk_Ssv7.mjs";
4
- import { n as isGrayscaleImage, t as convertToGrayscale } from "./grayscaleDetect-C6kFF3dk.mjs";
5
-
1
+ import { Vu as __exportAll } from "./index-C1lZe66f.d.mts";
2
+ import { i as PdfName, l as PdfStream, o as PdfNumber, r as PdfDict, t as PdfArray } from "./pdfObjects-CB7TEdbW.mjs";
3
+ import { n as extractImages, t as decodeImageStream } from "./imageExtract-Dapir-ux.mjs";
4
+ import { n as isGrayscaleImage, t as convertToGrayscale } from "./grayscaleDetect-6GJrgBRT.mjs";
6
5
  //#region src/assets/image/iccProfile.ts
7
6
  /**
8
7
  * @module assets/image/iccProfile
@@ -90,13 +89,14 @@ function parseIccDescription(data) {
90
89
  if (descLen === 0) return void 0;
91
90
  const strEnd = Math.min(tagOffset + 12 + descLen - 1, tagOffset + tagSize);
92
91
  if (strEnd <= tagOffset + 12) return void 0;
93
- const chars = [];
94
- for (let j = tagOffset + 12; j < strEnd; j++) {
95
- const c = data[j];
96
- if (c === 0) break;
97
- chars.push(String.fromCharCode(c));
92
+ let nullIdx = strEnd;
93
+ for (let j = tagOffset + 12; j < strEnd; j++) if (data[j] === 0) {
94
+ nullIdx = j;
95
+ break;
98
96
  }
99
- return chars.length > 0 ? chars.join("") : void 0;
97
+ const strBytes = data.subarray(tagOffset + 12, nullIdx);
98
+ if (strBytes.length === 0) return void 0;
99
+ return new TextDecoder("ascii").decode(strBytes);
100
100
  }
101
101
  }
102
102
  /**
@@ -197,7 +197,6 @@ function embedIccProfile(profile, registry) {
197
197
  const stream = new PdfStream(dict, profile.data);
198
198
  return registry.register(stream);
199
199
  }
200
-
201
200
  //#endregion
202
201
  //#region src/assets/image/batchOptimize.ts
203
202
  var batchOptimize_exports = /* @__PURE__ */ __exportAll({ optimizeAllImages: () => optimizeAllImages });
@@ -255,8 +254,8 @@ async function optimizeAllImages(doc, options = {}) {
255
254
  const chromaSubsampling = options.chromaSubsampling ?? "4:2:0";
256
255
  const concurrency = Math.max(1, options.concurrency ?? 1);
257
256
  const { pageRange, minImageSize, colorSpaces, namePattern } = options;
258
- const { encodeJpegWasm, isJpegWasmReady } = await import("./bridge-CcivG_Sm.mjs").then((n) => n.t);
259
- const { decodeJpegWasm } = await import("./bridge-CcivG_Sm.mjs").then((n) => n.t);
257
+ const { encodeJpegWasm, isJpegWasmReady } = await import("./bridge-ZD6O6QQa.mjs").then((n) => n.t);
258
+ const { decodeJpegWasm } = await import("./bridge-ZD6O6QQa.mjs").then((n) => n.t);
260
259
  const images = extractImages(doc);
261
260
  const registry = doc.getRegistry();
262
261
  const results = new Array(images.length);
@@ -302,15 +301,16 @@ async function optimizeAllImages(doc, options = {}) {
302
301
  const expectedLen = img.width * img.height * channels;
303
302
  if (pixels.length !== expectedLen) return skip(false, `Pixel data length mismatch: got ${pixels.length}, expected ${expectedLen}`);
304
303
  if (channels === 4 && img.colorSpace === "DeviceCMYK") {
305
- const rgb = new Uint8Array(img.width * img.height * 3);
306
- for (let i = 0; i < img.width * img.height; i++) {
307
- const c = pixels[i * 4] / 255;
308
- const m = pixels[i * 4 + 1] / 255;
309
- const y = pixels[i * 4 + 2] / 255;
310
- const k = pixels[i * 4 + 3] / 255;
311
- rgb[i * 3] = Math.round(255 * (1 - c) * (1 - k));
312
- rgb[i * 3 + 1] = Math.round(255 * (1 - m) * (1 - k));
313
- rgb[i * 3 + 2] = Math.round(255 * (1 - y) * (1 - k));
304
+ const pixelCount = img.width * img.height;
305
+ const rgb = new Uint8Array(pixelCount * 3);
306
+ for (let i = 0; i < pixelCount; i++) {
307
+ const ci = 255 - pixels[i * 4];
308
+ const mi = 255 - pixels[i * 4 + 1];
309
+ const yi = 255 - pixels[i * 4 + 2];
310
+ const ki = 255 - pixels[i * 4 + 3];
311
+ rgb[i * 3] = (ci * ki + 127) / 255 | 0;
312
+ rgb[i * 3 + 1] = (mi * ki + 127) / 255 | 0;
313
+ rgb[i * 3 + 2] = (yi * ki + 127) / 255 | 0;
314
314
  }
315
315
  pixels = rgb;
316
316
  channels = 3;
@@ -386,7 +386,7 @@ async function optimizeAllImages(doc, options = {}) {
386
386
  perImage: results
387
387
  };
388
388
  }
389
-
390
389
  //#endregion
391
390
  export { parseIccColorSpace as a, extractIccProfile as i, optimizeAllImages as n, parseIccDescription as o, embedIccProfile as r, batchOptimize_exports as t };
392
- //# sourceMappingURL=batchOptimize-DtRwBOqR.mjs.map
391
+
392
+ //# sourceMappingURL=batchOptimize-CjLGD5ie.mjs.map
@@ -1,7 +1,5 @@
1
- const require_rolldown_runtime = require('./rolldown-runtime-CKhH4XqG.cjs');
2
-
3
1
  //#region src/wasm/jpeg/bridge.ts
4
- var bridge_exports = /* @__PURE__ */ require_rolldown_runtime.__exportAll({
2
+ var bridge_exports = /* @__PURE__ */ require("./rolldown-runtime-ak5kbic3.cjs").__exportAll({
5
3
  decodeJpegWasm: () => decodeJpegWasm,
6
4
  encodeJpegWasm: () => encodeJpegWasm,
7
5
  initJpegWasm: () => initJpegWasm,
@@ -22,7 +20,7 @@ async function initJpegWasm(wasmSource) {
22
20
  wasmModule = wasmSource;
23
21
  return;
24
22
  }
25
- const { loadWasmModule: loadWasm } = await Promise.resolve().then(() => require("./loader-I4zdkoWc.cjs")).then((n) => n.loader_exports);
23
+ const { loadWasmModule: loadWasm } = await Promise.resolve().then(() => require("./loader-DR7H0XOf.cjs")).then((n) => n.loader_exports);
26
24
  const wasmBytes = await loadWasm("jpeg");
27
25
  wasmModule = (await WebAssembly.instantiate(wasmBytes.buffer, { env: {} })).instance.exports;
28
26
  } catch {
@@ -97,36 +95,36 @@ function decodeJpegWasm(jpegBytes) {
97
95
  return;
98
96
  }
99
97
  }
100
-
101
98
  //#endregion
102
- Object.defineProperty(exports, 'bridge_exports', {
103
- enumerable: true,
104
- get: function () {
105
- return bridge_exports;
106
- }
99
+ Object.defineProperty(exports, "bridge_exports", {
100
+ enumerable: true,
101
+ get: function() {
102
+ return bridge_exports;
103
+ }
107
104
  });
108
- Object.defineProperty(exports, 'decodeJpegWasm', {
109
- enumerable: true,
110
- get: function () {
111
- return decodeJpegWasm;
112
- }
105
+ Object.defineProperty(exports, "decodeJpegWasm", {
106
+ enumerable: true,
107
+ get: function() {
108
+ return decodeJpegWasm;
109
+ }
113
110
  });
114
- Object.defineProperty(exports, 'encodeJpegWasm', {
115
- enumerable: true,
116
- get: function () {
117
- return encodeJpegWasm;
118
- }
111
+ Object.defineProperty(exports, "encodeJpegWasm", {
112
+ enumerable: true,
113
+ get: function() {
114
+ return encodeJpegWasm;
115
+ }
119
116
  });
120
- Object.defineProperty(exports, 'initJpegWasm', {
121
- enumerable: true,
122
- get: function () {
123
- return initJpegWasm;
124
- }
117
+ Object.defineProperty(exports, "initJpegWasm", {
118
+ enumerable: true,
119
+ get: function() {
120
+ return initJpegWasm;
121
+ }
125
122
  });
126
- Object.defineProperty(exports, 'isJpegWasmReady', {
127
- enumerable: true,
128
- get: function () {
129
- return isJpegWasmReady;
130
- }
123
+ Object.defineProperty(exports, "isJpegWasmReady", {
124
+ enumerable: true,
125
+ get: function() {
126
+ return isJpegWasmReady;
127
+ }
131
128
  });
132
- //# sourceMappingURL=bridge-DYCQzxF7.cjs.map
129
+
130
+ //# sourceMappingURL=bridge-ByvzPu5h.cjs.map
@@ -1,5 +1,4 @@
1
- import { os as __exportAll } from "./index-DCSbmXWh.d.mts";
2
-
1
+ import { Vu as __exportAll } from "./index-C1lZe66f.d.mts";
3
2
  //#region src/wasm/jpeg/bridge.ts
4
3
  var bridge_exports = /* @__PURE__ */ __exportAll({
5
4
  decodeJpegWasm: () => decodeJpegWasm,
@@ -22,7 +21,7 @@ async function initJpegWasm(wasmSource) {
22
21
  wasmModule = wasmSource;
23
22
  return;
24
23
  }
25
- const { loadWasmModule: loadWasm } = await import("./loader-C7B5dVCI.mjs").then((n) => n.l);
24
+ const { loadWasmModule: loadWasm } = await import("./loader-B1Ix7ozU.mjs").then((n) => n.l);
26
25
  const wasmBytes = await loadWasm("jpeg");
27
26
  wasmModule = (await WebAssembly.instantiate(wasmBytes.buffer, { env: {} })).instance.exports;
28
27
  } catch {
@@ -97,7 +96,7 @@ function decodeJpegWasm(jpegBytes) {
97
96
  return;
98
97
  }
99
98
  }
100
-
101
99
  //#endregion
102
100
  export { isJpegWasmReady as a, initJpegWasm as i, decodeJpegWasm as n, encodeJpegWasm as r, bridge_exports as t };
103
- //# sourceMappingURL=bridge-CcivG_Sm.mjs.map
101
+
102
+ //# sourceMappingURL=bridge-ZD6O6QQa.mjs.map