pdfjs-dist 2.1.266 → 2.5.207
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.
Potentially problematic release.
This version of pdfjs-dist might be problematic. Click here for more details.
- package/CODE_OF_CONDUCT.md +15 -0
- package/README.md +4 -0
- package/bower.json +1 -1
- package/build/pdf.js +8382 -18492
- package/build/pdf.js.map +1 -1
- package/build/pdf.min.js +22 -1
- package/build/pdf.worker.entry.js +5 -3
- package/build/pdf.worker.js +20417 -29816
- package/build/pdf.worker.js.map +1 -1
- package/build/pdf.worker.min.js +22 -1
- package/es5/build/pdf.js +25688 -0
- package/es5/build/pdf.js.map +1 -0
- package/{lib/shared/global_scope.js → es5/build/pdf.worker.entry.js} +5 -10
- package/es5/build/pdf.worker.js +58239 -0
- package/es5/build/pdf.worker.js.map +1 -0
- package/es5/web/images/annotation-check.svg +11 -0
- package/es5/web/images/annotation-comment.svg +16 -0
- package/es5/web/images/annotation-help.svg +26 -0
- package/es5/web/images/annotation-insert.svg +10 -0
- package/es5/web/images/annotation-key.svg +11 -0
- package/es5/web/images/annotation-newparagraph.svg +11 -0
- package/es5/web/images/annotation-noicon.svg +7 -0
- package/es5/web/images/annotation-note.svg +42 -0
- package/es5/web/images/annotation-paragraph.svg +16 -0
- package/es5/web/images/loading-icon.gif +0 -0
- package/es5/web/images/shadow.png +0 -0
- package/es5/web/images/texture.png +0 -0
- package/es5/web/pdf_viewer.css +403 -0
- package/es5/web/pdf_viewer.js +7742 -0
- package/es5/web/pdf_viewer.js.map +1 -0
- package/image_decoders/pdf.image_decoders.js +1475 -4897
- package/image_decoders/pdf.image_decoders.js.map +1 -1
- package/image_decoders/pdf.image_decoders.min.js +22 -1
- package/lib/README.md +7 -0
- package/lib/core/annotation.js +750 -899
- package/lib/core/arithmetic_decoder.js +81 -97
- package/lib/core/bidi.js +54 -46
- package/lib/core/ccitt.js +88 -81
- package/lib/core/ccitt_stream.js +15 -14
- package/lib/core/cff_parser.js +235 -183
- package/lib/core/charsets.js +4 -4
- package/lib/core/chunked_stream.js +447 -542
- package/lib/core/cmap.js +222 -264
- package/lib/core/colorspace.js +699 -863
- package/lib/core/core_utils.js +152 -0
- package/lib/core/crypto.js +379 -437
- package/lib/core/document.js +573 -660
- package/lib/core/encodings.js +15 -15
- package/lib/core/evaluator.js +1103 -868
- package/lib/core/font_renderer.js +135 -178
- package/lib/core/fonts.js +570 -491
- package/lib/core/function.js +291 -288
- package/lib/core/glyphlist.js +4527 -4526
- package/lib/core/image.js +145 -149
- package/lib/core/image_utils.js +170 -0
- package/lib/core/jbig2.js +325 -316
- package/lib/core/jbig2_stream.js +18 -17
- package/lib/core/jpeg_stream.js +21 -26
- package/lib/core/jpg.js +284 -232
- package/lib/core/jpx.js +161 -143
- package/lib/core/jpx_stream.js +28 -28
- package/lib/core/metrics.js +2929 -2929
- package/lib/core/murmurhash3.js +90 -101
- package/lib/core/obj.js +1183 -1157
- package/lib/core/operator_list.js +99 -67
- package/lib/core/parser.js +972 -911
- package/lib/core/pattern.js +87 -70
- package/lib/core/pdf_manager.js +150 -315
- package/lib/core/primitives.js +83 -56
- package/lib/core/ps_parser.js +175 -214
- package/lib/core/standard_fonts.js +237 -236
- package/lib/core/stream.js +94 -74
- package/lib/core/type1_parser.js +87 -69
- package/lib/core/unicode.js +1654 -1654
- package/lib/core/worker.js +193 -390
- package/lib/core/worker_stream.js +168 -0
- package/lib/display/annotation_layer.js +741 -972
- package/lib/display/api.js +1500 -1791
- package/lib/display/api_compatibility.js +12 -17
- package/lib/display/canvas.js +165 -165
- package/lib/display/content_disposition.js +40 -59
- package/lib/display/display_utils.js +515 -0
- package/lib/display/fetch_stream.js +183 -298
- package/lib/display/font_loader.js +273 -413
- package/lib/display/metadata.js +86 -98
- package/lib/display/network.js +266 -359
- package/lib/display/network_utils.js +25 -18
- package/lib/display/node_stream.js +285 -458
- package/lib/display/pattern_helper.js +113 -65
- package/lib/display/svg.js +1166 -901
- package/lib/display/text_layer.js +156 -132
- package/lib/display/transport_stream.js +262 -278
- package/lib/display/webgl.js +70 -83
- package/lib/display/worker_options.js +3 -3
- package/lib/display/xml_parser.js +303 -392
- package/lib/examples/node/domstubs.js +40 -37
- package/lib/pdf.js +226 -59
- package/lib/pdf.worker.js +14 -6
- package/lib/shared/compatibility.js +3 -246
- package/lib/shared/is_node.js +7 -6
- package/lib/shared/message_handler.js +327 -332
- package/lib/shared/util.js +266 -416
- package/lib/test/unit/annotation_spec.js +1555 -701
- package/lib/test/unit/api_spec.js +802 -604
- package/lib/test/unit/bidi_spec.js +7 -7
- package/lib/test/unit/cff_parser_spec.js +84 -69
- package/lib/test/unit/clitests_helper.js +7 -9
- package/lib/test/unit/cmap_spec.js +74 -76
- package/lib/test/unit/colorspace_spec.js +166 -161
- package/lib/test/unit/core_utils_spec.js +211 -0
- package/lib/test/unit/crypto_spec.js +181 -181
- package/lib/test/unit/custom_spec.js +20 -22
- package/lib/test/unit/display_svg_spec.js +34 -39
- package/lib/test/unit/display_utils_spec.js +263 -0
- package/lib/test/unit/document_spec.js +16 -21
- package/lib/test/unit/encodings_spec.js +12 -34
- package/lib/test/unit/evaluator_spec.js +83 -83
- package/lib/test/unit/fetch_stream_spec.js +111 -0
- package/lib/test/unit/function_spec.js +206 -204
- package/lib/test/unit/jasmine-boot.js +46 -30
- package/lib/test/unit/message_handler_spec.js +173 -159
- package/lib/test/unit/metadata_spec.js +69 -69
- package/lib/test/unit/murmurhash3_spec.js +12 -12
- package/lib/test/unit/network_spec.js +13 -61
- package/lib/test/unit/network_utils_spec.js +183 -119
- package/lib/test/unit/node_stream_spec.js +78 -92
- package/lib/test/unit/parser_spec.js +172 -114
- package/lib/test/unit/pdf_find_controller_spec.js +55 -86
- package/lib/test/unit/pdf_find_utils_spec.js +32 -32
- package/lib/test/unit/pdf_history_spec.js +32 -32
- package/lib/test/unit/primitives_spec.js +140 -125
- package/lib/test/unit/stream_spec.js +16 -14
- package/lib/test/unit/test_utils.js +131 -143
- package/lib/test/unit/testreporter.js +19 -19
- package/lib/test/unit/type1_parser_spec.js +42 -42
- package/lib/test/unit/ui_utils_spec.js +297 -459
- package/lib/test/unit/unicode_spec.js +38 -38
- package/lib/test/unit/util_spec.js +121 -305
- package/lib/web/annotation_layer_builder.js +66 -103
- package/lib/web/app.js +1328 -1214
- package/lib/web/app_options.js +105 -107
- package/lib/web/base_viewer.js +824 -838
- package/lib/web/chromecom.js +165 -252
- package/lib/web/debugger.js +149 -205
- package/lib/web/download_manager.js +39 -55
- package/lib/web/firefox_print_service.js +37 -27
- package/lib/web/firefoxcom.js +212 -363
- package/lib/web/genericcom.js +26 -108
- package/lib/web/genericl10n.js +24 -153
- package/lib/web/grab_to_pan.js +32 -30
- package/lib/web/interfaces.js +80 -254
- package/lib/web/overlay_manager.js +70 -246
- package/lib/web/password_prompt.js +38 -64
- package/lib/web/pdf_attachment_viewer.js +113 -131
- package/lib/web/pdf_cursor_tools.js +75 -102
- package/lib/web/pdf_document_properties.js +221 -306
- package/lib/web/pdf_find_bar.js +136 -170
- package/lib/web/pdf_find_controller.js +491 -548
- package/lib/web/pdf_find_utils.js +13 -13
- package/lib/web/pdf_history.js +397 -406
- package/lib/web/pdf_link_service.js +304 -348
- package/lib/web/pdf_outline_viewer.js +140 -175
- package/lib/web/pdf_page_view.js +452 -523
- package/lib/web/pdf_presentation_mode.js +308 -357
- package/lib/web/pdf_print_service.js +90 -104
- package/lib/web/pdf_rendering_queue.js +84 -108
- package/lib/web/pdf_sidebar.js +276 -306
- package/lib/web/pdf_sidebar_resizer.js +92 -119
- package/lib/web/pdf_single_page_viewer.js +77 -126
- package/lib/web/pdf_thumbnail_view.js +276 -297
- package/lib/web/pdf_thumbnail_viewer.js +186 -206
- package/lib/web/pdf_viewer.component.js +20 -21
- package/lib/web/pdf_viewer.js +55 -115
- package/lib/web/preferences.js +82 -286
- package/lib/web/secondary_toolbar.js +164 -196
- package/lib/web/text_layer_builder.js +282 -339
- package/lib/web/toolbar.js +217 -210
- package/lib/web/ui_utils.js +267 -420
- package/lib/web/view_history.js +52 -226
- package/lib/web/viewer_compatibility.js +21 -6
- package/package.json +2 -9
- package/web/pdf_viewer.css +35 -25
- package/web/pdf_viewer.js +3489 -4855
- package/web/pdf_viewer.js.map +1 -1
- package/webpack.js +14 -5
- package/external/streams/streams-lib.js +0 -3962
- package/external/url/url-lib.js +0 -627
- package/lib/display/dom_utils.js +0 -494
- package/lib/shared/streams_polyfill.js +0 -43
- package/lib/shared/url_polyfill.js +0 -56
- package/lib/test/unit/dom_utils_spec.js +0 -89
package/lib/core/jpg.js
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
* @licstart The following is the entire license notice for the
|
3
3
|
* Javascript code in this page
|
4
4
|
*
|
5
|
-
* Copyright
|
5
|
+
* Copyright 2020 Mozilla Foundation
|
6
6
|
*
|
7
7
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
8
8
|
* you may not use this file except in compliance with the License.
|
@@ -26,43 +26,26 @@ Object.defineProperty(exports, "__esModule", {
|
|
26
26
|
});
|
27
27
|
exports.JpegImage = void 0;
|
28
28
|
|
29
|
-
var _util = require("../shared/util");
|
29
|
+
var _util = require("../shared/util.js");
|
30
30
|
|
31
|
-
|
31
|
+
var _core_utils = require("./core_utils.js");
|
32
32
|
|
33
|
-
|
34
|
-
|
35
|
-
|
33
|
+
class JpegError extends _util.BaseException {
|
34
|
+
constructor(msg) {
|
35
|
+
super(`JPEG error: ${msg}`);
|
36
36
|
}
|
37
37
|
|
38
|
-
|
39
|
-
JpegError.prototype.name = 'JpegError';
|
40
|
-
JpegError.constructor = JpegError;
|
41
|
-
return JpegError;
|
42
|
-
}();
|
38
|
+
}
|
43
39
|
|
44
|
-
|
45
|
-
|
46
|
-
|
40
|
+
class DNLMarkerError extends _util.BaseException {
|
41
|
+
constructor(message, scanLines) {
|
42
|
+
super(message);
|
47
43
|
this.scanLines = scanLines;
|
48
44
|
}
|
49
45
|
|
50
|
-
|
51
|
-
DNLMarkerError.prototype.name = 'DNLMarkerError';
|
52
|
-
DNLMarkerError.constructor = DNLMarkerError;
|
53
|
-
return DNLMarkerError;
|
54
|
-
}();
|
55
|
-
|
56
|
-
var EOIMarkerError = function EOIMarkerErrorClosure() {
|
57
|
-
function EOIMarkerError(message) {
|
58
|
-
this.message = message;
|
59
|
-
}
|
46
|
+
}
|
60
47
|
|
61
|
-
|
62
|
-
EOIMarkerError.prototype.name = 'EOIMarkerError';
|
63
|
-
EOIMarkerError.constructor = EOIMarkerError;
|
64
|
-
return EOIMarkerError;
|
65
|
-
}();
|
48
|
+
class EOIMarkerError extends _util.BaseException {}
|
66
49
|
|
67
50
|
var JpegImage = function JpegImageClosure() {
|
68
51
|
var dctZigZag = new Uint8Array([0, 1, 8, 16, 9, 2, 3, 10, 17, 24, 32, 25, 18, 11, 4, 5, 12, 19, 26, 33, 40, 48, 41, 34, 27, 20, 13, 6, 7, 14, 21, 28, 35, 42, 49, 56, 57, 50, 43, 36, 29, 22, 15, 23, 30, 37, 44, 51, 58, 59, 52, 45, 38, 31, 39, 46, 53, 60, 61, 54, 47, 55, 62, 63]);
|
@@ -75,13 +58,10 @@ var JpegImage = function JpegImageClosure() {
|
|
75
58
|
var dctSqrt2 = 5793;
|
76
59
|
var dctSqrt1d2 = 2896;
|
77
60
|
|
78
|
-
function JpegImage(
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
_ref$colorTransform = _ref.colorTransform,
|
83
|
-
colorTransform = _ref$colorTransform === void 0 ? -1 : _ref$colorTransform;
|
84
|
-
|
61
|
+
function JpegImage({
|
62
|
+
decodeTransform = null,
|
63
|
+
colorTransform = -1
|
64
|
+
} = {}) {
|
85
65
|
this._decodeTransform = decodeTransform;
|
86
66
|
this._colorTransform = colorTransform;
|
87
67
|
}
|
@@ -145,12 +125,11 @@ var JpegImage = function JpegImageClosure() {
|
|
145
125
|
return 64 * ((component.blocksPerLine + 1) * row + col);
|
146
126
|
}
|
147
127
|
|
148
|
-
function decodeScan(data, offset, frame, components, resetInterval, spectralStart, spectralEnd, successivePrev, successive) {
|
149
|
-
var parseDNLMarker = arguments.length > 9 && arguments[9] !== undefined ? arguments[9] : false;
|
128
|
+
function decodeScan(data, offset, frame, components, resetInterval, spectralStart, spectralEnd, successivePrev, successive, parseDNLMarker = false) {
|
150
129
|
var mcusPerLine = frame.mcusPerLine;
|
151
130
|
var progressive = frame.progressive;
|
152
|
-
|
153
|
-
|
131
|
+
const startOffset = offset;
|
132
|
+
let bitsData = 0,
|
154
133
|
bitsCount = 0;
|
155
134
|
|
156
135
|
function readBit() {
|
@@ -161,22 +140,31 @@ var JpegImage = function JpegImageClosure() {
|
|
161
140
|
|
162
141
|
bitsData = data[offset++];
|
163
142
|
|
164
|
-
if (bitsData ===
|
143
|
+
if (bitsData === 0xff) {
|
165
144
|
var nextByte = data[offset++];
|
166
145
|
|
167
146
|
if (nextByte) {
|
168
|
-
if (nextByte ===
|
147
|
+
if (nextByte === 0xdc && parseDNLMarker) {
|
148
|
+
offset += 2;
|
149
|
+
const scanLines = (0, _core_utils.readUint16)(data, offset);
|
169
150
|
offset += 2;
|
170
|
-
var scanLines = data[offset++] << 8 | data[offset++];
|
171
151
|
|
172
152
|
if (scanLines > 0 && scanLines !== frame.scanLines) {
|
173
|
-
throw new DNLMarkerError(
|
153
|
+
throw new DNLMarkerError("Found DNL marker (0xFFDC) while parsing scan data", scanLines);
|
174
154
|
}
|
175
|
-
} else if (nextByte ===
|
176
|
-
|
155
|
+
} else if (nextByte === 0xd9) {
|
156
|
+
if (parseDNLMarker) {
|
157
|
+
const maybeScanLines = blockRow * 8;
|
158
|
+
|
159
|
+
if (maybeScanLines > 0 && maybeScanLines < frame.scanLines / 10) {
|
160
|
+
throw new DNLMarkerError("Found EOI marker (0xFFD9) while parsing scan data, " + "possibly caused by incorrect `scanLines` parameter", maybeScanLines);
|
161
|
+
}
|
162
|
+
}
|
163
|
+
|
164
|
+
throw new EOIMarkerError("Found EOI marker (0xFFD9) while parsing scan data");
|
177
165
|
}
|
178
166
|
|
179
|
-
throw new JpegError(
|
167
|
+
throw new JpegError(`unexpected marker ${(bitsData << 8 | nextByte).toString(16)}`);
|
180
168
|
}
|
181
169
|
}
|
182
170
|
|
@@ -190,13 +178,15 @@ var JpegImage = function JpegImageClosure() {
|
|
190
178
|
while (true) {
|
191
179
|
node = node[readBit()];
|
192
180
|
|
193
|
-
|
194
|
-
|
195
|
-
|
181
|
+
switch (typeof node) {
|
182
|
+
case "number":
|
183
|
+
return node;
|
196
184
|
|
197
|
-
|
198
|
-
|
185
|
+
case "object":
|
186
|
+
continue;
|
199
187
|
}
|
188
|
+
|
189
|
+
throw new JpegError("invalid huffman sequence");
|
200
190
|
}
|
201
191
|
}
|
202
192
|
|
@@ -225,10 +215,10 @@ var JpegImage = function JpegImageClosure() {
|
|
225
215
|
return n + (-1 << length) + 1;
|
226
216
|
}
|
227
217
|
|
228
|
-
function decodeBaseline(component,
|
218
|
+
function decodeBaseline(component, blockOffset) {
|
229
219
|
var t = decodeHuffman(component.huffmanTableDC);
|
230
220
|
var diff = t === 0 ? 0 : receiveAndExtend(t);
|
231
|
-
component.blockData[
|
221
|
+
component.blockData[blockOffset] = component.pred += diff;
|
232
222
|
var k = 1;
|
233
223
|
|
234
224
|
while (k < 64) {
|
@@ -247,24 +237,24 @@ var JpegImage = function JpegImageClosure() {
|
|
247
237
|
|
248
238
|
k += r;
|
249
239
|
var z = dctZigZag[k];
|
250
|
-
component.blockData[
|
240
|
+
component.blockData[blockOffset + z] = receiveAndExtend(s);
|
251
241
|
k++;
|
252
242
|
}
|
253
243
|
}
|
254
244
|
|
255
|
-
function decodeDCFirst(component,
|
245
|
+
function decodeDCFirst(component, blockOffset) {
|
256
246
|
var t = decodeHuffman(component.huffmanTableDC);
|
257
247
|
var diff = t === 0 ? 0 : receiveAndExtend(t) << successive;
|
258
|
-
component.blockData[
|
248
|
+
component.blockData[blockOffset] = component.pred += diff;
|
259
249
|
}
|
260
250
|
|
261
|
-
function decodeDCSuccessive(component,
|
262
|
-
component.blockData[
|
251
|
+
function decodeDCSuccessive(component, blockOffset) {
|
252
|
+
component.blockData[blockOffset] |= readBit() << successive;
|
263
253
|
}
|
264
254
|
|
265
255
|
var eobrun = 0;
|
266
256
|
|
267
|
-
function decodeACFirst(component,
|
257
|
+
function decodeACFirst(component, blockOffset) {
|
268
258
|
if (eobrun > 0) {
|
269
259
|
eobrun--;
|
270
260
|
return;
|
@@ -290,7 +280,7 @@ var JpegImage = function JpegImageClosure() {
|
|
290
280
|
|
291
281
|
k += r;
|
292
282
|
var z = dctZigZag[k];
|
293
|
-
component.blockData[
|
283
|
+
component.blockData[blockOffset + z] = receiveAndExtend(s) * (1 << successive);
|
294
284
|
k++;
|
295
285
|
}
|
296
286
|
}
|
@@ -298,7 +288,7 @@ var JpegImage = function JpegImageClosure() {
|
|
298
288
|
var successiveACState = 0,
|
299
289
|
successiveACNextValue;
|
300
290
|
|
301
|
-
function decodeACSuccessive(component,
|
291
|
+
function decodeACSuccessive(component, blockOffset) {
|
302
292
|
var k = spectralStart;
|
303
293
|
var e = spectralEnd;
|
304
294
|
var r = 0;
|
@@ -306,8 +296,8 @@ var JpegImage = function JpegImageClosure() {
|
|
306
296
|
var rs;
|
307
297
|
|
308
298
|
while (k <= e) {
|
309
|
-
|
310
|
-
|
299
|
+
const offsetZ = blockOffset + dctZigZag[k];
|
300
|
+
const sign = component.blockData[offsetZ] < 0 ? -1 : 1;
|
311
301
|
|
312
302
|
switch (successiveACState) {
|
313
303
|
case 0:
|
@@ -325,7 +315,7 @@ var JpegImage = function JpegImageClosure() {
|
|
325
315
|
}
|
326
316
|
} else {
|
327
317
|
if (s !== 1) {
|
328
|
-
throw new JpegError(
|
318
|
+
throw new JpegError("invalid ACn encoding");
|
329
319
|
}
|
330
320
|
|
331
321
|
successiveACNextValue = receiveAndExtend(s);
|
@@ -378,20 +368,22 @@ var JpegImage = function JpegImageClosure() {
|
|
378
368
|
}
|
379
369
|
}
|
380
370
|
|
371
|
+
let blockRow = 0;
|
372
|
+
|
381
373
|
function decodeMcu(component, decode, mcu, row, col) {
|
382
374
|
var mcuRow = mcu / mcusPerLine | 0;
|
383
375
|
var mcuCol = mcu % mcusPerLine;
|
384
|
-
|
376
|
+
blockRow = mcuRow * component.v + row;
|
385
377
|
var blockCol = mcuCol * component.h + col;
|
386
|
-
|
387
|
-
decode(component,
|
378
|
+
const blockOffset = getBlockBufferOffset(component, blockRow, blockCol);
|
379
|
+
decode(component, blockOffset);
|
388
380
|
}
|
389
381
|
|
390
382
|
function decodeBlock(component, decode, mcu) {
|
391
|
-
|
383
|
+
blockRow = mcu / component.blocksPerLine | 0;
|
392
384
|
var blockCol = mcu % component.blocksPerLine;
|
393
|
-
|
394
|
-
decode(component,
|
385
|
+
const blockOffset = getBlockBufferOffset(component, blockRow, blockCol);
|
386
|
+
decode(component, blockOffset);
|
395
387
|
}
|
396
388
|
|
397
389
|
var componentsLength = components.length;
|
@@ -420,68 +412,62 @@ var JpegImage = function JpegImageClosure() {
|
|
420
412
|
|
421
413
|
var h, v;
|
422
414
|
|
423
|
-
while (mcu
|
415
|
+
while (mcu <= mcuExpected) {
|
424
416
|
var mcuToRead = resetInterval ? Math.min(mcuExpected - mcu, resetInterval) : mcuExpected;
|
425
417
|
|
426
|
-
|
427
|
-
|
428
|
-
|
418
|
+
if (mcuToRead > 0) {
|
419
|
+
for (i = 0; i < componentsLength; i++) {
|
420
|
+
components[i].pred = 0;
|
421
|
+
}
|
429
422
|
|
430
|
-
|
423
|
+
eobrun = 0;
|
431
424
|
|
432
|
-
|
433
|
-
|
425
|
+
if (componentsLength === 1) {
|
426
|
+
component = components[0];
|
434
427
|
|
435
|
-
|
436
|
-
|
437
|
-
|
438
|
-
|
439
|
-
|
440
|
-
|
441
|
-
|
442
|
-
|
443
|
-
|
444
|
-
|
445
|
-
|
446
|
-
|
447
|
-
|
448
|
-
|
428
|
+
for (n = 0; n < mcuToRead; n++) {
|
429
|
+
decodeBlock(component, decodeFn, mcu);
|
430
|
+
mcu++;
|
431
|
+
}
|
432
|
+
} else {
|
433
|
+
for (n = 0; n < mcuToRead; n++) {
|
434
|
+
for (i = 0; i < componentsLength; i++) {
|
435
|
+
component = components[i];
|
436
|
+
h = component.h;
|
437
|
+
v = component.v;
|
438
|
+
|
439
|
+
for (j = 0; j < v; j++) {
|
440
|
+
for (k = 0; k < h; k++) {
|
441
|
+
decodeMcu(component, decodeFn, mcu, j, k);
|
442
|
+
}
|
449
443
|
}
|
450
444
|
}
|
451
|
-
}
|
452
445
|
|
453
|
-
|
446
|
+
mcu++;
|
447
|
+
}
|
454
448
|
}
|
455
449
|
}
|
456
450
|
|
457
451
|
bitsCount = 0;
|
458
452
|
fileMarker = findNextFileMarker(data, offset);
|
459
453
|
|
460
|
-
if (fileMarker
|
461
|
-
|
462
|
-
offset = fileMarker.offset;
|
454
|
+
if (!fileMarker) {
|
455
|
+
break;
|
463
456
|
}
|
464
457
|
|
465
|
-
|
466
|
-
|
467
|
-
|
468
|
-
|
458
|
+
if (fileMarker.invalid) {
|
459
|
+
const partialMsg = mcuToRead > 0 ? "unexpected" : "excessive";
|
460
|
+
(0, _util.warn)(`decodeScan - ${partialMsg} MCU data, current marker is: ${fileMarker.invalid}`);
|
461
|
+
offset = fileMarker.offset;
|
469
462
|
}
|
470
463
|
|
471
|
-
if (marker >=
|
464
|
+
if (fileMarker.marker >= 0xffd0 && fileMarker.marker <= 0xffd7) {
|
472
465
|
offset += 2;
|
473
466
|
} else {
|
474
467
|
break;
|
475
468
|
}
|
476
469
|
}
|
477
470
|
|
478
|
-
fileMarker = findNextFileMarker(data, offset);
|
479
|
-
|
480
|
-
if (fileMarker && fileMarker.invalid) {
|
481
|
-
(0, _util.warn)('decodeScan - unexpected Scan data, current marker is: ' + fileMarker.invalid);
|
482
|
-
offset = fileMarker.offset;
|
483
|
-
}
|
484
|
-
|
485
471
|
return offset - startOffset;
|
486
472
|
}
|
487
473
|
|
@@ -493,7 +479,7 @@ var JpegImage = function JpegImageClosure() {
|
|
493
479
|
var t;
|
494
480
|
|
495
481
|
if (!qt) {
|
496
|
-
throw new JpegError(
|
482
|
+
throw new JpegError("missing required Quantization Table.");
|
497
483
|
}
|
498
484
|
|
499
485
|
for (var row = 0; row < 64; row += 8) {
|
@@ -576,7 +562,15 @@ var JpegImage = function JpegImageClosure() {
|
|
576
562
|
|
577
563
|
if ((p1 | p2 | p3 | p4 | p5 | p6 | p7) === 0) {
|
578
564
|
t = dctSqrt2 * p0 + 8192 >> 14;
|
579
|
-
|
565
|
+
|
566
|
+
if (t < -2040) {
|
567
|
+
t = 0;
|
568
|
+
} else if (t >= 2024) {
|
569
|
+
t = 255;
|
570
|
+
} else {
|
571
|
+
t = t + 2056 >> 4;
|
572
|
+
}
|
573
|
+
|
580
574
|
blockData[blockBufferOffset + col] = t;
|
581
575
|
blockData[blockBufferOffset + col + 8] = t;
|
582
576
|
blockData[blockBufferOffset + col + 16] = t;
|
@@ -623,14 +617,71 @@ var JpegImage = function JpegImageClosure() {
|
|
623
617
|
p5 = v2 - v5;
|
624
618
|
p3 = v3 + v4;
|
625
619
|
p4 = v3 - v4;
|
626
|
-
|
627
|
-
|
628
|
-
|
629
|
-
|
630
|
-
|
631
|
-
|
632
|
-
|
633
|
-
|
620
|
+
|
621
|
+
if (p0 < 16) {
|
622
|
+
p0 = 0;
|
623
|
+
} else if (p0 >= 4080) {
|
624
|
+
p0 = 255;
|
625
|
+
} else {
|
626
|
+
p0 >>= 4;
|
627
|
+
}
|
628
|
+
|
629
|
+
if (p1 < 16) {
|
630
|
+
p1 = 0;
|
631
|
+
} else if (p1 >= 4080) {
|
632
|
+
p1 = 255;
|
633
|
+
} else {
|
634
|
+
p1 >>= 4;
|
635
|
+
}
|
636
|
+
|
637
|
+
if (p2 < 16) {
|
638
|
+
p2 = 0;
|
639
|
+
} else if (p2 >= 4080) {
|
640
|
+
p2 = 255;
|
641
|
+
} else {
|
642
|
+
p2 >>= 4;
|
643
|
+
}
|
644
|
+
|
645
|
+
if (p3 < 16) {
|
646
|
+
p3 = 0;
|
647
|
+
} else if (p3 >= 4080) {
|
648
|
+
p3 = 255;
|
649
|
+
} else {
|
650
|
+
p3 >>= 4;
|
651
|
+
}
|
652
|
+
|
653
|
+
if (p4 < 16) {
|
654
|
+
p4 = 0;
|
655
|
+
} else if (p4 >= 4080) {
|
656
|
+
p4 = 255;
|
657
|
+
} else {
|
658
|
+
p4 >>= 4;
|
659
|
+
}
|
660
|
+
|
661
|
+
if (p5 < 16) {
|
662
|
+
p5 = 0;
|
663
|
+
} else if (p5 >= 4080) {
|
664
|
+
p5 = 255;
|
665
|
+
} else {
|
666
|
+
p5 >>= 4;
|
667
|
+
}
|
668
|
+
|
669
|
+
if (p6 < 16) {
|
670
|
+
p6 = 0;
|
671
|
+
} else if (p6 >= 4080) {
|
672
|
+
p6 = 255;
|
673
|
+
} else {
|
674
|
+
p6 >>= 4;
|
675
|
+
}
|
676
|
+
|
677
|
+
if (p7 < 16) {
|
678
|
+
p7 = 0;
|
679
|
+
} else if (p7 >= 4080) {
|
680
|
+
p7 = 255;
|
681
|
+
} else {
|
682
|
+
p7 >>= 4;
|
683
|
+
}
|
684
|
+
|
634
685
|
blockData[blockBufferOffset + col] = p0;
|
635
686
|
blockData[blockBufferOffset + col + 8] = p1;
|
636
687
|
blockData[blockBufferOffset + col + 16] = p2;
|
@@ -657,23 +708,17 @@ var JpegImage = function JpegImageClosure() {
|
|
657
708
|
return component.blockData;
|
658
709
|
}
|
659
710
|
|
660
|
-
function findNextFileMarker(data, currentPos) {
|
661
|
-
|
662
|
-
|
663
|
-
function peekUint16(pos) {
|
664
|
-
return data[pos] << 8 | data[pos + 1];
|
665
|
-
}
|
666
|
-
|
667
|
-
var maxPos = data.length - 1;
|
711
|
+
function findNextFileMarker(data, currentPos, startPos = currentPos) {
|
712
|
+
const maxPos = data.length - 1;
|
668
713
|
var newPos = startPos < currentPos ? startPos : currentPos;
|
669
714
|
|
670
715
|
if (currentPos >= maxPos) {
|
671
716
|
return null;
|
672
717
|
}
|
673
718
|
|
674
|
-
var currentMarker =
|
719
|
+
var currentMarker = (0, _core_utils.readUint16)(data, currentPos);
|
675
720
|
|
676
|
-
if (currentMarker >=
|
721
|
+
if (currentMarker >= 0xffc0 && currentMarker <= 0xfffe) {
|
677
722
|
return {
|
678
723
|
invalid: null,
|
679
724
|
marker: currentMarker,
|
@@ -681,14 +726,14 @@ var JpegImage = function JpegImageClosure() {
|
|
681
726
|
};
|
682
727
|
}
|
683
728
|
|
684
|
-
var newMarker =
|
729
|
+
var newMarker = (0, _core_utils.readUint16)(data, newPos);
|
685
730
|
|
686
|
-
while (!(newMarker >=
|
731
|
+
while (!(newMarker >= 0xffc0 && newMarker <= 0xfffe)) {
|
687
732
|
if (++newPos >= maxPos) {
|
688
733
|
return null;
|
689
734
|
}
|
690
735
|
|
691
|
-
newMarker =
|
736
|
+
newMarker = (0, _core_utils.readUint16)(data, newPos);
|
692
737
|
}
|
693
738
|
|
694
739
|
return {
|
@@ -699,24 +744,17 @@ var JpegImage = function JpegImageClosure() {
|
|
699
744
|
}
|
700
745
|
|
701
746
|
JpegImage.prototype = {
|
702
|
-
parse
|
703
|
-
|
704
|
-
|
705
|
-
dnlScanLines = _ref2$dnlScanLines === void 0 ? null : _ref2$dnlScanLines;
|
706
|
-
|
707
|
-
function readUint16() {
|
708
|
-
var value = data[offset] << 8 | data[offset + 1];
|
709
|
-
offset += 2;
|
710
|
-
return value;
|
711
|
-
}
|
712
|
-
|
747
|
+
parse(data, {
|
748
|
+
dnlScanLines = null
|
749
|
+
} = {}) {
|
713
750
|
function readDataBlock() {
|
714
|
-
|
715
|
-
|
751
|
+
const length = (0, _core_utils.readUint16)(data, offset);
|
752
|
+
offset += 2;
|
753
|
+
let endOffset = offset + length - 2;
|
716
754
|
var fileMarker = findNextFileMarker(data, endOffset, offset);
|
717
755
|
|
718
756
|
if (fileMarker && fileMarker.invalid) {
|
719
|
-
(0, _util.warn)(
|
757
|
+
(0, _util.warn)("readDataBlock - incorrect length, current marker is: " + fileMarker.invalid);
|
720
758
|
endOffset = fileMarker.offset;
|
721
759
|
}
|
722
760
|
|
@@ -749,43 +787,45 @@ var JpegImage = function JpegImageClosure() {
|
|
749
787
|
var jfif = null;
|
750
788
|
var adobe = null;
|
751
789
|
var frame, resetInterval;
|
752
|
-
|
790
|
+
let numSOSMarkers = 0;
|
753
791
|
var quantizationTables = [];
|
754
792
|
var huffmanTablesAC = [],
|
755
793
|
huffmanTablesDC = [];
|
756
|
-
|
794
|
+
let fileMarker = (0, _core_utils.readUint16)(data, offset);
|
795
|
+
offset += 2;
|
757
796
|
|
758
|
-
if (fileMarker !==
|
759
|
-
throw new JpegError(
|
797
|
+
if (fileMarker !== 0xffd8) {
|
798
|
+
throw new JpegError("SOI not found");
|
760
799
|
}
|
761
800
|
|
762
|
-
fileMarker = readUint16();
|
801
|
+
fileMarker = (0, _core_utils.readUint16)(data, offset);
|
802
|
+
offset += 2;
|
763
803
|
|
764
|
-
markerLoop: while (fileMarker !==
|
804
|
+
markerLoop: while (fileMarker !== 0xffd9) {
|
765
805
|
var i, j, l;
|
766
806
|
|
767
807
|
switch (fileMarker) {
|
768
|
-
case
|
769
|
-
case
|
770
|
-
case
|
771
|
-
case
|
772
|
-
case
|
773
|
-
case
|
774
|
-
case
|
775
|
-
case
|
776
|
-
case
|
777
|
-
case
|
778
|
-
case
|
779
|
-
case
|
780
|
-
case
|
781
|
-
case
|
782
|
-
case
|
783
|
-
case
|
784
|
-
case
|
808
|
+
case 0xffe0:
|
809
|
+
case 0xffe1:
|
810
|
+
case 0xffe2:
|
811
|
+
case 0xffe3:
|
812
|
+
case 0xffe4:
|
813
|
+
case 0xffe5:
|
814
|
+
case 0xffe6:
|
815
|
+
case 0xffe7:
|
816
|
+
case 0xffe8:
|
817
|
+
case 0xffe9:
|
818
|
+
case 0xffea:
|
819
|
+
case 0xffeb:
|
820
|
+
case 0xffec:
|
821
|
+
case 0xffed:
|
822
|
+
case 0xffee:
|
823
|
+
case 0xffef:
|
824
|
+
case 0xfffe:
|
785
825
|
var appData = readDataBlock();
|
786
826
|
|
787
|
-
if (fileMarker ===
|
788
|
-
if (appData[0] ===
|
827
|
+
if (fileMarker === 0xffe0) {
|
828
|
+
if (appData[0] === 0x4a && appData[1] === 0x46 && appData[2] === 0x49 && appData[3] === 0x46 && appData[4] === 0) {
|
789
829
|
jfif = {
|
790
830
|
version: {
|
791
831
|
major: appData[5],
|
@@ -801,8 +841,8 @@ var JpegImage = function JpegImageClosure() {
|
|
801
841
|
}
|
802
842
|
}
|
803
843
|
|
804
|
-
if (fileMarker ===
|
805
|
-
if (appData[0] === 0x41 && appData[1] === 0x64 && appData[2] ===
|
844
|
+
if (fileMarker === 0xffee) {
|
845
|
+
if (appData[0] === 0x41 && appData[1] === 0x64 && appData[2] === 0x6f && appData[3] === 0x62 && appData[4] === 0x65) {
|
806
846
|
adobe = {
|
807
847
|
version: appData[5] << 8 | appData[6],
|
808
848
|
flags0: appData[7] << 8 | appData[8],
|
@@ -814,8 +854,9 @@ var JpegImage = function JpegImageClosure() {
|
|
814
854
|
|
815
855
|
break;
|
816
856
|
|
817
|
-
case
|
818
|
-
|
857
|
+
case 0xffdb:
|
858
|
+
const quantizationTablesLength = (0, _core_utils.readUint16)(data, offset);
|
859
|
+
offset += 2;
|
819
860
|
var quantizationTablesEnd = quantizationTablesLength + offset - 2;
|
820
861
|
var z;
|
821
862
|
|
@@ -831,10 +872,11 @@ var JpegImage = function JpegImageClosure() {
|
|
831
872
|
} else if (quantizationTableSpec >> 4 === 1) {
|
832
873
|
for (j = 0; j < 64; j++) {
|
833
874
|
z = dctZigZag[j];
|
834
|
-
tableData[z] = readUint16();
|
875
|
+
tableData[z] = (0, _core_utils.readUint16)(data, offset);
|
876
|
+
offset += 2;
|
835
877
|
}
|
836
878
|
} else {
|
837
|
-
throw new JpegError(
|
879
|
+
throw new JpegError("DQT - invalid table spec");
|
838
880
|
}
|
839
881
|
|
840
882
|
quantizationTables[quantizationTableSpec & 15] = tableData;
|
@@ -842,21 +884,23 @@ var JpegImage = function JpegImageClosure() {
|
|
842
884
|
|
843
885
|
break;
|
844
886
|
|
845
|
-
case
|
846
|
-
case
|
847
|
-
case
|
887
|
+
case 0xffc0:
|
888
|
+
case 0xffc1:
|
889
|
+
case 0xffc2:
|
848
890
|
if (frame) {
|
849
|
-
throw new JpegError(
|
891
|
+
throw new JpegError("Only single frame JPEGs supported");
|
850
892
|
}
|
851
893
|
|
852
|
-
|
894
|
+
offset += 2;
|
853
895
|
frame = {};
|
854
|
-
frame.extended = fileMarker ===
|
855
|
-
frame.progressive = fileMarker ===
|
896
|
+
frame.extended = fileMarker === 0xffc1;
|
897
|
+
frame.progressive = fileMarker === 0xffc2;
|
856
898
|
frame.precision = data[offset++];
|
857
|
-
|
899
|
+
const sofScanLines = (0, _core_utils.readUint16)(data, offset);
|
900
|
+
offset += 2;
|
858
901
|
frame.scanLines = dnlScanLines || sofScanLines;
|
859
|
-
frame.samplesPerLine = readUint16();
|
902
|
+
frame.samplesPerLine = (0, _core_utils.readUint16)(data, offset);
|
903
|
+
offset += 2;
|
860
904
|
frame.components = [];
|
861
905
|
frame.componentIds = {};
|
862
906
|
var componentsCount = data[offset++],
|
@@ -879,8 +923,8 @@ var JpegImage = function JpegImageClosure() {
|
|
879
923
|
|
880
924
|
var qId = data[offset + 2];
|
881
925
|
l = frame.components.push({
|
882
|
-
h
|
883
|
-
v
|
926
|
+
h,
|
927
|
+
v,
|
884
928
|
quantizationId: qId,
|
885
929
|
quantizationTable: null
|
886
930
|
});
|
@@ -893,8 +937,9 @@ var JpegImage = function JpegImageClosure() {
|
|
893
937
|
prepareComponents(frame);
|
894
938
|
break;
|
895
939
|
|
896
|
-
case
|
897
|
-
|
940
|
+
case 0xffc4:
|
941
|
+
const huffmanLength = (0, _core_utils.readUint16)(data, offset);
|
942
|
+
offset += 2;
|
898
943
|
|
899
944
|
for (i = 2; i < huffmanLength;) {
|
900
945
|
var huffmanTableSpec = data[offset++];
|
@@ -917,14 +962,15 @@ var JpegImage = function JpegImageClosure() {
|
|
917
962
|
|
918
963
|
break;
|
919
964
|
|
920
|
-
case
|
921
|
-
|
922
|
-
resetInterval = readUint16();
|
965
|
+
case 0xffdd:
|
966
|
+
offset += 2;
|
967
|
+
resetInterval = (0, _core_utils.readUint16)(data, offset);
|
968
|
+
offset += 2;
|
923
969
|
break;
|
924
970
|
|
925
|
-
case
|
926
|
-
|
927
|
-
|
971
|
+
case 0xffda:
|
972
|
+
const parseDNLMarker = ++numSOSMarkers === 1 && !dnlScanLines;
|
973
|
+
offset += 2;
|
928
974
|
var selectorsCount = data[offset++];
|
929
975
|
var components = [],
|
930
976
|
component;
|
@@ -947,12 +993,12 @@ var JpegImage = function JpegImageClosure() {
|
|
947
993
|
offset += processed;
|
948
994
|
} catch (ex) {
|
949
995
|
if (ex instanceof DNLMarkerError) {
|
950
|
-
(0, _util.warn)(
|
996
|
+
(0, _util.warn)(`${ex.message} -- attempting to re-parse the JPEG image.`);
|
951
997
|
return this.parse(data, {
|
952
998
|
dnlScanLines: ex.scanLines
|
953
999
|
});
|
954
1000
|
} else if (ex instanceof EOIMarkerError) {
|
955
|
-
(0, _util.warn)(
|
1001
|
+
(0, _util.warn)(`${ex.message} -- ignoring the rest of the image data.`);
|
956
1002
|
break markerLoop;
|
957
1003
|
}
|
958
1004
|
|
@@ -961,35 +1007,36 @@ var JpegImage = function JpegImageClosure() {
|
|
961
1007
|
|
962
1008
|
break;
|
963
1009
|
|
964
|
-
case
|
1010
|
+
case 0xffdc:
|
965
1011
|
offset += 4;
|
966
1012
|
break;
|
967
1013
|
|
968
|
-
case
|
969
|
-
if (data[offset] !==
|
1014
|
+
case 0xffff:
|
1015
|
+
if (data[offset] !== 0xff) {
|
970
1016
|
offset--;
|
971
1017
|
}
|
972
1018
|
|
973
1019
|
break;
|
974
1020
|
|
975
1021
|
default:
|
976
|
-
|
977
|
-
offset -= 3;
|
978
|
-
break;
|
979
|
-
}
|
980
|
-
|
981
|
-
var nextFileMarker = findNextFileMarker(data, offset - 2);
|
1022
|
+
const nextFileMarker = findNextFileMarker(data, offset - 2, offset - 3);
|
982
1023
|
|
983
1024
|
if (nextFileMarker && nextFileMarker.invalid) {
|
984
|
-
(0, _util.warn)(
|
1025
|
+
(0, _util.warn)("JpegImage.parse - unexpected data, current marker is: " + nextFileMarker.invalid);
|
985
1026
|
offset = nextFileMarker.offset;
|
986
1027
|
break;
|
987
1028
|
}
|
988
1029
|
|
989
|
-
|
1030
|
+
if (offset >= data.length - 1) {
|
1031
|
+
(0, _util.warn)("JpegImage.parse - reached the end of the image data " + "without finding an EOI marker (0xFFD9).");
|
1032
|
+
break markerLoop;
|
1033
|
+
}
|
1034
|
+
|
1035
|
+
throw new JpegError("JpegImage.parse - unknown marker: " + fileMarker.toString(16));
|
990
1036
|
}
|
991
1037
|
|
992
|
-
fileMarker = readUint16();
|
1038
|
+
fileMarker = (0, _core_utils.readUint16)(data, offset);
|
1039
|
+
offset += 2;
|
993
1040
|
}
|
994
1041
|
|
995
1042
|
this.width = frame.samplesPerLine;
|
@@ -1016,9 +1063,10 @@ var JpegImage = function JpegImageClosure() {
|
|
1016
1063
|
}
|
1017
1064
|
|
1018
1065
|
this.numComponents = this.components.length;
|
1066
|
+
return undefined;
|
1019
1067
|
},
|
1020
|
-
|
1021
|
-
|
1068
|
+
|
1069
|
+
_getLinearizedBlockData(width, height, isSourcePDF = false) {
|
1022
1070
|
var scaleX = this.width / width,
|
1023
1071
|
scaleY = this.height / height;
|
1024
1072
|
var component, componentScaleX, componentScaleY, blocksPerScanline;
|
@@ -1031,6 +1079,7 @@ var JpegImage = function JpegImageClosure() {
|
|
1031
1079
|
var data = new Uint8ClampedArray(dataLength);
|
1032
1080
|
var xScaleBlockOffset = new Uint32Array(width);
|
1033
1081
|
var mask3LSB = 0xfffffff8;
|
1082
|
+
let lastComponentScaleX;
|
1034
1083
|
|
1035
1084
|
for (i = 0; i < numComponents; i++) {
|
1036
1085
|
component = this.components[i];
|
@@ -1040,9 +1089,13 @@ var JpegImage = function JpegImageClosure() {
|
|
1040
1089
|
output = component.output;
|
1041
1090
|
blocksPerScanline = component.blocksPerLine + 1 << 3;
|
1042
1091
|
|
1043
|
-
|
1044
|
-
|
1045
|
-
|
1092
|
+
if (componentScaleX !== lastComponentScaleX) {
|
1093
|
+
for (x = 0; x < width; x++) {
|
1094
|
+
j = 0 | x * componentScaleX;
|
1095
|
+
xScaleBlockOffset[x] = (j & mask3LSB) << 3 | j & 7;
|
1096
|
+
}
|
1097
|
+
|
1098
|
+
lastComponentScaleX = componentScaleX;
|
1046
1099
|
}
|
1047
1100
|
|
1048
1101
|
for (y = 0; y < height; y++) {
|
@@ -1056,7 +1109,7 @@ var JpegImage = function JpegImageClosure() {
|
|
1056
1109
|
}
|
1057
1110
|
}
|
1058
1111
|
|
1059
|
-
|
1112
|
+
let transform = this._decodeTransform;
|
1060
1113
|
|
1061
1114
|
if (!isSourcePDF && numComponents === 4 && !transform) {
|
1062
1115
|
transform = new Int32Array([-256, 255, -256, 255, -256, 255, -256, 255]);
|
@@ -1140,30 +1193,28 @@ var JpegImage = function JpegImageClosure() {
|
|
1140
1193
|
_convertCmykToRgb: function convertCmykToRgb(data) {
|
1141
1194
|
var c, m, y, k;
|
1142
1195
|
var offset = 0;
|
1143
|
-
var scale = 1 / 255;
|
1144
1196
|
|
1145
1197
|
for (var i = 0, length = data.length; i < length; i += 4) {
|
1146
|
-
c = data[i]
|
1147
|
-
m = data[i + 1]
|
1148
|
-
y = data[i + 2]
|
1149
|
-
k = data[i + 3]
|
1150
|
-
data[offset++] = 255 + c * (-
|
1151
|
-
data[offset++] = 255 + c * (
|
1152
|
-
data[offset++] = 255 + c * (0.
|
1198
|
+
c = data[i];
|
1199
|
+
m = data[i + 1];
|
1200
|
+
y = data[i + 2];
|
1201
|
+
k = data[i + 3];
|
1202
|
+
data[offset++] = 255 + c * (-0.00006747147073602441 * c + 0.0008379262121013727 * m + 0.0002894718188643294 * y + 0.003264231057537806 * k - 1.1185611867203937) + m * (0.000026374107616089405 * m - 0.00008626949158638572 * y - 0.0002748769067499491 * k - 0.02155688794978967) + y * (-0.00003878099212869363 * y - 0.0003267808279485286 * k + 0.0686742238595345) - k * (0.0003361971776183937 * k + 0.7430659151342254);
|
1203
|
+
data[offset++] = 255 + c * (0.00013596372813588848 * c + 0.000924537132573585 * m + 0.00010567359618683593 * y + 0.0004791864687436512 * k - 0.3109689587515875) + m * (-0.00023545346108370344 * m + 0.0002702845253534714 * y + 0.0020200308977307156 * k - 0.7488052167015494) + y * (0.00006834815998235662 * y + 0.00015168452363460973 * k - 0.09751927774728933) - k * (0.00031891311758832814 * k + 0.7364883807733168);
|
1204
|
+
data[offset++] = 255 + c * (0.000013598650411385307 * c + 0.00012423956175490851 * m + 0.0004751985097583589 * y - 0.0000036729317476630422 * k - 0.05562186980264034) + m * (0.00016141380598724676 * m + 0.0009692239130725186 * y + 0.0007782692450036253 * k - 0.44015232367526463) + y * (5.068882914068769e-7 * y + 0.0017778369011375071 * k - 0.7591454649749609) - k * (0.0003435319965105553 * k + 0.7063770186160144);
|
1153
1205
|
}
|
1154
1206
|
|
1155
1207
|
return data.subarray(0, offset);
|
1156
1208
|
},
|
1157
|
-
getData: function getData(_ref3) {
|
1158
|
-
var width = _ref3.width,
|
1159
|
-
height = _ref3.height,
|
1160
|
-
_ref3$forceRGB = _ref3.forceRGB,
|
1161
|
-
forceRGB = _ref3$forceRGB === void 0 ? false : _ref3$forceRGB,
|
1162
|
-
_ref3$isSourcePDF = _ref3.isSourcePDF,
|
1163
|
-
isSourcePDF = _ref3$isSourcePDF === void 0 ? false : _ref3$isSourcePDF;
|
1164
1209
|
|
1210
|
+
getData({
|
1211
|
+
width,
|
1212
|
+
height,
|
1213
|
+
forceRGB = false,
|
1214
|
+
isSourcePDF = false
|
1215
|
+
}) {
|
1165
1216
|
if (this.numComponents > 4) {
|
1166
|
-
throw new JpegError(
|
1217
|
+
throw new JpegError("Unsupported color mode");
|
1167
1218
|
}
|
1168
1219
|
|
1169
1220
|
var data = this._getLinearizedBlockData(width, height, isSourcePDF);
|
@@ -1197,6 +1248,7 @@ var JpegImage = function JpegImageClosure() {
|
|
1197
1248
|
|
1198
1249
|
return data;
|
1199
1250
|
}
|
1251
|
+
|
1200
1252
|
};
|
1201
1253
|
return JpegImage;
|
1202
1254
|
}();
|