pdfjs-dist 2.0.489 → 2.2.228

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.

Files changed (169) hide show
  1. package/CODE_OF_CONDUCT.md +15 -0
  2. package/bower.json +1 -1
  3. package/build/pdf.js +18515 -11402
  4. package/build/pdf.js.map +1 -1
  5. package/build/pdf.min.js +1 -1
  6. package/build/pdf.worker.js +48266 -37137
  7. package/build/pdf.worker.js.map +1 -1
  8. package/build/pdf.worker.min.js +1 -1
  9. package/external/url/url-lib.js +627 -0
  10. package/image_decoders/pdf.image_decoders.js +11350 -0
  11. package/image_decoders/pdf.image_decoders.js.map +1 -0
  12. package/image_decoders/pdf.image_decoders.min.js +1 -0
  13. package/lib/core/annotation.js +587 -242
  14. package/lib/core/arithmetic_decoder.js +275 -245
  15. package/lib/core/bidi.js +65 -6
  16. package/lib/core/ccitt.js +173 -18
  17. package/lib/core/ccitt_stream.js +15 -6
  18. package/lib/core/cff_parser.js +433 -61
  19. package/lib/core/charsets.js +5 -4
  20. package/lib/core/chunked_stream.js +400 -152
  21. package/lib/core/cmap.js +326 -87
  22. package/lib/core/colorspace.js +874 -594
  23. package/lib/core/core_utils.js +147 -0
  24. package/lib/core/crypto.js +290 -45
  25. package/lib/core/document.js +560 -268
  26. package/lib/core/encodings.js +19 -10
  27. package/lib/core/evaluator.js +1005 -360
  28. package/lib/core/font_renderer.js +331 -97
  29. package/lib/core/fonts.js +812 -195
  30. package/lib/core/function.js +284 -71
  31. package/lib/core/glyphlist.js +4 -3
  32. package/lib/core/image.js +169 -62
  33. package/lib/core/image_utils.js +111 -0
  34. package/lib/core/jbig2.js +479 -66
  35. package/lib/core/jbig2_stream.js +19 -8
  36. package/lib/core/jpeg_stream.js +38 -13
  37. package/lib/core/jpg.js +253 -29
  38. package/lib/core/jpx.js +396 -6
  39. package/lib/core/jpx_stream.js +18 -6
  40. package/lib/core/metrics.js +15 -15
  41. package/lib/core/murmurhash3.js +56 -34
  42. package/lib/core/obj.js +1354 -488
  43. package/lib/core/operator_list.js +144 -31
  44. package/lib/core/parser.js +539 -191
  45. package/lib/core/pattern.js +148 -14
  46. package/lib/core/pdf_manager.js +323 -133
  47. package/lib/core/primitives.js +111 -24
  48. package/lib/core/ps_parser.js +134 -45
  49. package/lib/core/standard_fonts.js +17 -17
  50. package/lib/core/stream.js +313 -34
  51. package/lib/core/type1_parser.js +143 -13
  52. package/lib/core/unicode.js +32 -5
  53. package/lib/core/worker.js +217 -190
  54. package/lib/core/worker_stream.js +277 -0
  55. package/lib/display/annotation_layer.js +450 -133
  56. package/lib/display/api.js +1597 -784
  57. package/lib/display/api_compatibility.js +11 -13
  58. package/lib/display/canvas.js +360 -44
  59. package/lib/display/content_disposition.js +83 -32
  60. package/lib/display/display_utils.js +747 -0
  61. package/lib/display/fetch_stream.js +221 -90
  62. package/lib/display/font_loader.js +468 -236
  63. package/lib/display/metadata.js +38 -16
  64. package/lib/display/network.js +635 -428
  65. package/lib/display/network_utils.js +32 -19
  66. package/lib/display/node_stream.js +367 -175
  67. package/lib/display/pattern_helper.js +81 -31
  68. package/lib/display/svg.js +1235 -519
  69. package/lib/display/text_layer.js +153 -29
  70. package/lib/display/transport_stream.js +345 -94
  71. package/lib/display/webgl.js +64 -18
  72. package/lib/display/worker_options.js +5 -4
  73. package/lib/display/xml_parser.js +166 -53
  74. package/lib/examples/node/domstubs.js +60 -4
  75. package/lib/pdf.js +36 -14
  76. package/lib/pdf.worker.js +5 -3
  77. package/lib/shared/compatibility.js +158 -564
  78. package/lib/shared/global_scope.js +2 -2
  79. package/lib/shared/is_node.js +4 -4
  80. package/lib/shared/message_handler.js +521 -0
  81. package/lib/shared/streams_polyfill.js +21 -17
  82. package/lib/shared/url_polyfill.js +56 -0
  83. package/lib/shared/util.js +243 -710
  84. package/lib/test/unit/annotation_spec.js +870 -401
  85. package/lib/test/unit/api_spec.js +657 -345
  86. package/lib/test/unit/bidi_spec.js +7 -7
  87. package/lib/test/unit/cff_parser_spec.js +54 -11
  88. package/lib/test/unit/clitests_helper.js +10 -8
  89. package/lib/test/unit/cmap_spec.js +95 -41
  90. package/lib/test/unit/colorspace_spec.js +115 -63
  91. package/lib/test/unit/core_utils_spec.js +191 -0
  92. package/lib/test/unit/crypto_spec.js +17 -5
  93. package/lib/test/unit/custom_spec.js +43 -55
  94. package/lib/test/unit/display_svg_spec.js +34 -18
  95. package/lib/test/unit/display_utils_spec.js +273 -0
  96. package/lib/test/unit/document_spec.js +8 -13
  97. package/lib/test/unit/encodings_spec.js +25 -45
  98. package/lib/test/unit/evaluator_spec.js +38 -15
  99. package/lib/test/unit/fetch_stream_spec.js +109 -0
  100. package/lib/test/unit/function_spec.js +17 -5
  101. package/lib/test/unit/jasmine-boot.js +33 -20
  102. package/lib/test/unit/{util_stream_spec.js → message_handler_spec.js} +41 -69
  103. package/lib/test/unit/metadata_spec.js +71 -11
  104. package/lib/test/unit/murmurhash3_spec.js +3 -3
  105. package/lib/test/unit/network_spec.js +19 -54
  106. package/lib/test/unit/network_utils_spec.js +91 -14
  107. package/lib/test/unit/node_stream_spec.js +56 -32
  108. package/lib/test/unit/parser_spec.js +162 -71
  109. package/lib/test/unit/pdf_find_controller_spec.js +230 -0
  110. package/lib/test/unit/pdf_find_utils_spec.js +63 -0
  111. package/lib/test/unit/pdf_history_spec.js +21 -9
  112. package/lib/test/unit/primitives_spec.js +53 -20
  113. package/lib/test/unit/stream_spec.js +12 -4
  114. package/lib/test/unit/test_utils.js +273 -56
  115. package/lib/test/unit/testreporter.js +21 -3
  116. package/lib/test/unit/type1_parser_spec.js +8 -6
  117. package/lib/test/unit/ui_utils_spec.js +454 -16
  118. package/lib/test/unit/unicode_spec.js +18 -15
  119. package/lib/test/unit/util_spec.js +87 -128
  120. package/lib/web/annotation_layer_builder.js +39 -22
  121. package/lib/web/app.js +1290 -588
  122. package/lib/web/app_options.js +100 -62
  123. package/lib/web/base_viewer.js +511 -182
  124. package/lib/web/chromecom.js +261 -117
  125. package/lib/web/debugger.js +166 -22
  126. package/lib/web/download_manager.js +32 -13
  127. package/lib/web/firefox_print_service.js +20 -10
  128. package/lib/web/firefoxcom.js +315 -80
  129. package/lib/web/genericcom.js +89 -30
  130. package/lib/web/genericl10n.js +142 -30
  131. package/lib/web/grab_to_pan.js +28 -4
  132. package/lib/web/interfaces.js +170 -47
  133. package/lib/web/overlay_manager.js +235 -85
  134. package/lib/web/password_prompt.js +22 -14
  135. package/lib/web/pdf_attachment_viewer.js +38 -18
  136. package/lib/web/pdf_cursor_tools.js +39 -16
  137. package/lib/web/pdf_document_properties.js +255 -136
  138. package/lib/web/pdf_find_bar.js +84 -40
  139. package/lib/web/pdf_find_controller.js +495 -184
  140. package/lib/web/pdf_find_utils.js +111 -0
  141. package/lib/web/pdf_history.js +190 -53
  142. package/lib/web/pdf_link_service.js +138 -77
  143. package/lib/web/pdf_outline_viewer.js +122 -46
  144. package/lib/web/pdf_page_view.js +191 -67
  145. package/lib/web/pdf_presentation_mode.js +99 -34
  146. package/lib/web/pdf_print_service.js +61 -13
  147. package/lib/web/pdf_rendering_queue.js +28 -9
  148. package/lib/web/pdf_sidebar.js +141 -81
  149. package/lib/web/pdf_sidebar_resizer.js +42 -16
  150. package/lib/web/pdf_single_page_viewer.js +74 -66
  151. package/lib/web/pdf_thumbnail_view.js +104 -33
  152. package/lib/web/pdf_thumbnail_viewer.js +66 -26
  153. package/lib/web/pdf_viewer.component.js +112 -32
  154. package/lib/web/pdf_viewer.js +91 -52
  155. package/lib/web/preferences.js +284 -89
  156. package/lib/web/secondary_toolbar.js +165 -40
  157. package/lib/web/text_layer_builder.js +134 -59
  158. package/lib/web/toolbar.js +78 -43
  159. package/lib/web/ui_utils.js +462 -136
  160. package/lib/web/view_history.js +215 -67
  161. package/lib/web/viewer_compatibility.js +4 -13
  162. package/package.json +5 -4
  163. package/web/pdf_viewer.css +79 -11
  164. package/web/pdf_viewer.js +6107 -3748
  165. package/web/pdf_viewer.js.map +1 -1
  166. package/lib/display/dom_utils.js +0 -309
  167. package/lib/test/unit/dom_utils_spec.js +0 -89
  168. package/lib/test/unit/fonts_spec.js +0 -81
  169. package/lib/web/dom_events.js +0 -137
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 2017 Mozilla Foundation
5
+ * Copyright 2019 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.
@@ -19,36 +19,51 @@
19
19
  * @licend The above is the entire license notice for the
20
20
  * Javascript code in this page
21
21
  */
22
- 'use strict';
22
+ "use strict";
23
23
 
24
24
  Object.defineProperty(exports, "__esModule", {
25
25
  value: true
26
26
  });
27
- exports.JpegImage = undefined;
27
+ exports.JpegImage = void 0;
28
28
 
29
- var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
29
+ var _util = require("../shared/util");
30
30
 
31
- var _util = require('../shared/util');
31
+ function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
32
32
 
33
33
  var JpegError = function JpegErrorClosure() {
34
34
  function JpegError(msg) {
35
35
  this.message = 'JPEG error: ' + msg;
36
36
  }
37
+
37
38
  JpegError.prototype = new Error();
38
39
  JpegError.prototype.name = 'JpegError';
39
40
  JpegError.constructor = JpegError;
40
41
  return JpegError;
41
42
  }();
43
+
42
44
  var DNLMarkerError = function DNLMarkerErrorClosure() {
43
45
  function DNLMarkerError(message, scanLines) {
44
46
  this.message = message;
45
47
  this.scanLines = scanLines;
46
48
  }
49
+
47
50
  DNLMarkerError.prototype = new Error();
48
51
  DNLMarkerError.prototype.name = 'DNLMarkerError';
49
52
  DNLMarkerError.constructor = DNLMarkerError;
50
53
  return DNLMarkerError;
51
54
  }();
55
+
56
+ var EOIMarkerError = function EOIMarkerErrorClosure() {
57
+ function EOIMarkerError(message) {
58
+ this.message = message;
59
+ }
60
+
61
+ EOIMarkerError.prototype = new Error();
62
+ EOIMarkerError.prototype.name = 'EOIMarkerError';
63
+ EOIMarkerError.constructor = EOIMarkerError;
64
+ return EOIMarkerError;
65
+ }();
66
+
52
67
  var JpegImage = function JpegImageClosure() {
53
68
  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]);
54
69
  var dctCos1 = 4017;
@@ -59,34 +74,48 @@ var JpegImage = function JpegImageClosure() {
59
74
  var dctSin6 = 3784;
60
75
  var dctSqrt2 = 5793;
61
76
  var dctSqrt1d2 = 2896;
77
+
62
78
  function JpegImage() {
63
- this.decodeTransform = null;
64
- this.colorTransform = -1;
79
+ var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
80
+ _ref$decodeTransform = _ref.decodeTransform,
81
+ decodeTransform = _ref$decodeTransform === void 0 ? null : _ref$decodeTransform,
82
+ _ref$colorTransform = _ref.colorTransform,
83
+ colorTransform = _ref$colorTransform === void 0 ? -1 : _ref$colorTransform;
84
+
85
+ this._decodeTransform = decodeTransform;
86
+ this._colorTransform = colorTransform;
65
87
  }
88
+
66
89
  function buildHuffmanTable(codeLengths, values) {
67
90
  var k = 0,
68
91
  code = [],
69
92
  i,
70
93
  j,
71
94
  length = 16;
95
+
72
96
  while (length > 0 && !codeLengths[length - 1]) {
73
97
  length--;
74
98
  }
99
+
75
100
  code.push({
76
101
  children: [],
77
102
  index: 0
78
103
  });
79
104
  var p = code[0],
80
105
  q;
106
+
81
107
  for (i = 0; i < length; i++) {
82
108
  for (j = 0; j < codeLengths[i]; j++) {
83
109
  p = code.pop();
84
110
  p.children[p.index] = values[k];
111
+
85
112
  while (p.index > 0) {
86
113
  p = code.pop();
87
114
  }
115
+
88
116
  p.index++;
89
117
  code.push(p);
118
+
90
119
  while (code.length <= i) {
91
120
  code.push(q = {
92
121
  children: [],
@@ -95,8 +124,10 @@ var JpegImage = function JpegImageClosure() {
95
124
  p.children[p.index] = q.children;
96
125
  p = q;
97
126
  }
127
+
98
128
  k++;
99
129
  }
130
+
100
131
  if (i + 1 < length) {
101
132
  code.push(q = {
102
133
  children: [],
@@ -106,143 +137,184 @@ var JpegImage = function JpegImageClosure() {
106
137
  p = q;
107
138
  }
108
139
  }
140
+
109
141
  return code[0].children;
110
142
  }
143
+
111
144
  function getBlockBufferOffset(component, row, col) {
112
145
  return 64 * ((component.blocksPerLine + 1) * row + col);
113
146
  }
147
+
114
148
  function decodeScan(data, offset, frame, components, resetInterval, spectralStart, spectralEnd, successivePrev, successive) {
115
149
  var parseDNLMarker = arguments.length > 9 && arguments[9] !== undefined ? arguments[9] : false;
116
-
117
150
  var mcusPerLine = frame.mcusPerLine;
118
151
  var progressive = frame.progressive;
119
152
  var startOffset = offset,
120
153
  bitsData = 0,
121
154
  bitsCount = 0;
155
+
122
156
  function readBit() {
123
157
  if (bitsCount > 0) {
124
158
  bitsCount--;
125
159
  return bitsData >> bitsCount & 1;
126
160
  }
161
+
127
162
  bitsData = data[offset++];
163
+
128
164
  if (bitsData === 0xFF) {
129
165
  var nextByte = data[offset++];
166
+
130
167
  if (nextByte) {
131
168
  if (nextByte === 0xDC && parseDNLMarker) {
132
169
  offset += 2;
133
170
  var scanLines = data[offset++] << 8 | data[offset++];
171
+
134
172
  if (scanLines > 0 && scanLines !== frame.scanLines) {
135
173
  throw new DNLMarkerError('Found DNL marker (0xFFDC) while parsing scan data', scanLines);
136
174
  }
175
+ } else if (nextByte === 0xD9) {
176
+ throw new EOIMarkerError('Found EOI marker (0xFFD9) while parsing scan data');
137
177
  }
138
- throw new JpegError('unexpected marker ' + (bitsData << 8 | nextByte).toString(16));
178
+
179
+ throw new JpegError("unexpected marker ".concat((bitsData << 8 | nextByte).toString(16)));
139
180
  }
140
181
  }
182
+
141
183
  bitsCount = 7;
142
184
  return bitsData >>> 7;
143
185
  }
186
+
144
187
  function decodeHuffman(tree) {
145
188
  var node = tree;
189
+
146
190
  while (true) {
147
191
  node = node[readBit()];
192
+
148
193
  if (typeof node === 'number') {
149
194
  return node;
150
195
  }
151
- if ((typeof node === 'undefined' ? 'undefined' : _typeof(node)) !== 'object') {
196
+
197
+ if (_typeof(node) !== 'object') {
152
198
  throw new JpegError('invalid huffman sequence');
153
199
  }
154
200
  }
155
201
  }
202
+
156
203
  function receive(length) {
157
204
  var n = 0;
205
+
158
206
  while (length > 0) {
159
207
  n = n << 1 | readBit();
160
208
  length--;
161
209
  }
210
+
162
211
  return n;
163
212
  }
213
+
164
214
  function receiveAndExtend(length) {
165
215
  if (length === 1) {
166
216
  return readBit() === 1 ? 1 : -1;
167
217
  }
218
+
168
219
  var n = receive(length);
220
+
169
221
  if (n >= 1 << length - 1) {
170
222
  return n;
171
223
  }
224
+
172
225
  return n + (-1 << length) + 1;
173
226
  }
227
+
174
228
  function decodeBaseline(component, offset) {
175
229
  var t = decodeHuffman(component.huffmanTableDC);
176
230
  var diff = t === 0 ? 0 : receiveAndExtend(t);
177
231
  component.blockData[offset] = component.pred += diff;
178
232
  var k = 1;
233
+
179
234
  while (k < 64) {
180
235
  var rs = decodeHuffman(component.huffmanTableAC);
181
236
  var s = rs & 15,
182
237
  r = rs >> 4;
238
+
183
239
  if (s === 0) {
184
240
  if (r < 15) {
185
241
  break;
186
242
  }
243
+
187
244
  k += 16;
188
245
  continue;
189
246
  }
247
+
190
248
  k += r;
191
249
  var z = dctZigZag[k];
192
250
  component.blockData[offset + z] = receiveAndExtend(s);
193
251
  k++;
194
252
  }
195
253
  }
254
+
196
255
  function decodeDCFirst(component, offset) {
197
256
  var t = decodeHuffman(component.huffmanTableDC);
198
257
  var diff = t === 0 ? 0 : receiveAndExtend(t) << successive;
199
258
  component.blockData[offset] = component.pred += diff;
200
259
  }
260
+
201
261
  function decodeDCSuccessive(component, offset) {
202
262
  component.blockData[offset] |= readBit() << successive;
203
263
  }
264
+
204
265
  var eobrun = 0;
266
+
205
267
  function decodeACFirst(component, offset) {
206
268
  if (eobrun > 0) {
207
269
  eobrun--;
208
270
  return;
209
271
  }
272
+
210
273
  var k = spectralStart,
211
274
  e = spectralEnd;
275
+
212
276
  while (k <= e) {
213
277
  var rs = decodeHuffman(component.huffmanTableAC);
214
278
  var s = rs & 15,
215
279
  r = rs >> 4;
280
+
216
281
  if (s === 0) {
217
282
  if (r < 15) {
218
283
  eobrun = receive(r) + (1 << r) - 1;
219
284
  break;
220
285
  }
286
+
221
287
  k += 16;
222
288
  continue;
223
289
  }
290
+
224
291
  k += r;
225
292
  var z = dctZigZag[k];
226
293
  component.blockData[offset + z] = receiveAndExtend(s) * (1 << successive);
227
294
  k++;
228
295
  }
229
296
  }
297
+
230
298
  var successiveACState = 0,
231
299
  successiveACNextValue;
300
+
232
301
  function decodeACSuccessive(component, offset) {
233
302
  var k = spectralStart;
234
303
  var e = spectralEnd;
235
304
  var r = 0;
236
305
  var s;
237
306
  var rs;
307
+
238
308
  while (k <= e) {
239
309
  var offsetZ = offset + dctZigZag[k];
240
310
  var sign = component.blockData[offsetZ] < 0 ? -1 : 1;
311
+
241
312
  switch (successiveACState) {
242
313
  case 0:
243
314
  rs = decodeHuffman(component.huffmanTableAC);
244
315
  s = rs & 15;
245
316
  r = rs >> 4;
317
+
246
318
  if (s === 0) {
247
319
  if (r < 15) {
248
320
  eobrun = receive(r) + (1 << r);
@@ -255,21 +327,27 @@ var JpegImage = function JpegImageClosure() {
255
327
  if (s !== 1) {
256
328
  throw new JpegError('invalid ACn encoding');
257
329
  }
330
+
258
331
  successiveACNextValue = receiveAndExtend(s);
259
332
  successiveACState = r ? 2 : 3;
260
333
  }
334
+
261
335
  continue;
336
+
262
337
  case 1:
263
338
  case 2:
264
339
  if (component.blockData[offsetZ]) {
265
340
  component.blockData[offsetZ] += sign * (readBit() << successive);
266
341
  } else {
267
342
  r--;
343
+
268
344
  if (r === 0) {
269
345
  successiveACState = successiveACState === 2 ? 3 : 0;
270
346
  }
271
347
  }
348
+
272
349
  break;
350
+
273
351
  case 3:
274
352
  if (component.blockData[offsetZ]) {
275
353
  component.blockData[offsetZ] += sign * (readBit() << successive);
@@ -277,22 +355,29 @@ var JpegImage = function JpegImageClosure() {
277
355
  component.blockData[offsetZ] = successiveACNextValue << successive;
278
356
  successiveACState = 0;
279
357
  }
358
+
280
359
  break;
360
+
281
361
  case 4:
282
362
  if (component.blockData[offsetZ]) {
283
363
  component.blockData[offsetZ] += sign * (readBit() << successive);
284
364
  }
365
+
285
366
  break;
286
367
  }
368
+
287
369
  k++;
288
370
  }
371
+
289
372
  if (successiveACState === 4) {
290
373
  eobrun--;
374
+
291
375
  if (eobrun === 0) {
292
376
  successiveACState = 0;
293
377
  }
294
378
  }
295
379
  }
380
+
296
381
  function decodeMcu(component, decode, mcu, row, col) {
297
382
  var mcuRow = mcu / mcusPerLine | 0;
298
383
  var mcuCol = mcu % mcusPerLine;
@@ -301,15 +386,18 @@ var JpegImage = function JpegImageClosure() {
301
386
  var offset = getBlockBufferOffset(component, blockRow, blockCol);
302
387
  decode(component, offset);
303
388
  }
389
+
304
390
  function decodeBlock(component, decode, mcu) {
305
391
  var blockRow = mcu / component.blocksPerLine | 0;
306
392
  var blockCol = mcu % component.blocksPerLine;
307
393
  var offset = getBlockBufferOffset(component, blockRow, blockCol);
308
394
  decode(component, offset);
309
395
  }
396
+
310
397
  var componentsLength = components.length;
311
398
  var component, i, j, k, n;
312
399
  var decodeFn;
400
+
313
401
  if (progressive) {
314
402
  if (spectralStart === 0) {
315
403
  decodeFn = successivePrev === 0 ? decodeDCFirst : decodeDCSuccessive;
@@ -319,23 +407,31 @@ var JpegImage = function JpegImageClosure() {
319
407
  } else {
320
408
  decodeFn = decodeBaseline;
321
409
  }
410
+
322
411
  var mcu = 0,
323
412
  fileMarker;
324
413
  var mcuExpected;
414
+
325
415
  if (componentsLength === 1) {
326
416
  mcuExpected = components[0].blocksPerLine * components[0].blocksPerColumn;
327
417
  } else {
328
418
  mcuExpected = mcusPerLine * frame.mcusPerColumn;
329
419
  }
420
+
330
421
  var h, v;
422
+
331
423
  while (mcu < mcuExpected) {
332
424
  var mcuToRead = resetInterval ? Math.min(mcuExpected - mcu, resetInterval) : mcuExpected;
425
+
333
426
  for (i = 0; i < componentsLength; i++) {
334
427
  components[i].pred = 0;
335
428
  }
429
+
336
430
  eobrun = 0;
431
+
337
432
  if (componentsLength === 1) {
338
433
  component = components[0];
434
+
339
435
  for (n = 0; n < mcuToRead; n++) {
340
436
  decodeBlock(component, decodeFn, mcu);
341
437
  mcu++;
@@ -346,47 +442,60 @@ var JpegImage = function JpegImageClosure() {
346
442
  component = components[i];
347
443
  h = component.h;
348
444
  v = component.v;
445
+
349
446
  for (j = 0; j < v; j++) {
350
447
  for (k = 0; k < h; k++) {
351
448
  decodeMcu(component, decodeFn, mcu, j, k);
352
449
  }
353
450
  }
354
451
  }
452
+
355
453
  mcu++;
356
454
  }
357
455
  }
456
+
358
457
  bitsCount = 0;
359
458
  fileMarker = findNextFileMarker(data, offset);
459
+
360
460
  if (fileMarker && fileMarker.invalid) {
361
461
  (0, _util.warn)('decodeScan - unexpected MCU data, current marker is: ' + fileMarker.invalid);
362
462
  offset = fileMarker.offset;
363
463
  }
464
+
364
465
  var marker = fileMarker && fileMarker.marker;
466
+
365
467
  if (!marker || marker <= 0xFF00) {
366
468
  throw new JpegError('marker was not found');
367
469
  }
470
+
368
471
  if (marker >= 0xFFD0 && marker <= 0xFFD7) {
369
472
  offset += 2;
370
473
  } else {
371
474
  break;
372
475
  }
373
476
  }
477
+
374
478
  fileMarker = findNextFileMarker(data, offset);
479
+
375
480
  if (fileMarker && fileMarker.invalid) {
376
481
  (0, _util.warn)('decodeScan - unexpected Scan data, current marker is: ' + fileMarker.invalid);
377
482
  offset = fileMarker.offset;
378
483
  }
484
+
379
485
  return offset - startOffset;
380
486
  }
487
+
381
488
  function quantizeAndInverse(component, blockBufferOffset, p) {
382
489
  var qt = component.quantizationTable,
383
490
  blockData = component.blockData;
384
491
  var v0, v1, v2, v3, v4, v5, v6, v7;
385
492
  var p0, p1, p2, p3, p4, p5, p6, p7;
386
493
  var t;
494
+
387
495
  if (!qt) {
388
496
  throw new JpegError('missing required Quantization Table.');
389
497
  }
498
+
390
499
  for (var row = 0; row < 64; row += 8) {
391
500
  p0 = blockData[blockBufferOffset + row];
392
501
  p1 = blockData[blockBufferOffset + row + 1];
@@ -397,6 +506,7 @@ var JpegImage = function JpegImageClosure() {
397
506
  p6 = blockData[blockBufferOffset + row + 6];
398
507
  p7 = blockData[blockBufferOffset + row + 7];
399
508
  p0 *= qt[row];
509
+
400
510
  if ((p1 | p2 | p3 | p4 | p5 | p6 | p7) === 0) {
401
511
  t = dctSqrt2 * p0 + 512 >> 10;
402
512
  p[row] = t;
@@ -409,6 +519,7 @@ var JpegImage = function JpegImageClosure() {
409
519
  p[row + 7] = t;
410
520
  continue;
411
521
  }
522
+
412
523
  p1 *= qt[row + 1];
413
524
  p2 *= qt[row + 2];
414
525
  p3 *= qt[row + 3];
@@ -452,6 +563,7 @@ var JpegImage = function JpegImageClosure() {
452
563
  p[row + 3] = v3 + v4;
453
564
  p[row + 4] = v3 - v4;
454
565
  }
566
+
455
567
  for (var col = 0; col < 8; ++col) {
456
568
  p0 = p[col];
457
569
  p1 = p[col + 8];
@@ -461,6 +573,7 @@ var JpegImage = function JpegImageClosure() {
461
573
  p5 = p[col + 40];
462
574
  p6 = p[col + 48];
463
575
  p7 = p[col + 56];
576
+
464
577
  if ((p1 | p2 | p3 | p4 | p5 | p6 | p7) === 0) {
465
578
  t = dctSqrt2 * p0 + 8192 >> 14;
466
579
  t = t < -2040 ? 0 : t >= 2024 ? 255 : t + 2056 >> 4;
@@ -474,6 +587,7 @@ var JpegImage = function JpegImageClosure() {
474
587
  blockData[blockBufferOffset + col + 56] = t;
475
588
  continue;
476
589
  }
590
+
477
591
  v0 = dctSqrt2 * p0 + 2048 >> 12;
478
592
  v1 = dctSqrt2 * p4 + 2048 >> 12;
479
593
  v2 = p2;
@@ -527,30 +641,38 @@ var JpegImage = function JpegImageClosure() {
527
641
  blockData[blockBufferOffset + col + 56] = p7;
528
642
  }
529
643
  }
644
+
530
645
  function buildComponentData(frame, component) {
531
646
  var blocksPerLine = component.blocksPerLine;
532
647
  var blocksPerColumn = component.blocksPerColumn;
533
648
  var computationBuffer = new Int16Array(64);
649
+
534
650
  for (var blockRow = 0; blockRow < blocksPerColumn; blockRow++) {
535
651
  for (var blockCol = 0; blockCol < blocksPerLine; blockCol++) {
536
652
  var offset = getBlockBufferOffset(component, blockRow, blockCol);
537
653
  quantizeAndInverse(component, offset, computationBuffer);
538
654
  }
539
655
  }
656
+
540
657
  return component.blockData;
541
658
  }
659
+
542
660
  function findNextFileMarker(data, currentPos) {
543
661
  var startPos = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : currentPos;
544
662
 
545
663
  function peekUint16(pos) {
546
664
  return data[pos] << 8 | data[pos + 1];
547
665
  }
666
+
548
667
  var maxPos = data.length - 1;
549
668
  var newPos = startPos < currentPos ? startPos : currentPos;
669
+
550
670
  if (currentPos >= maxPos) {
551
671
  return null;
552
672
  }
673
+
553
674
  var currentMarker = peekUint16(currentPos);
675
+
554
676
  if (currentMarker >= 0xFFC0 && currentMarker <= 0xFFFE) {
555
677
  return {
556
678
  invalid: null,
@@ -558,45 +680,55 @@ var JpegImage = function JpegImageClosure() {
558
680
  offset: currentPos
559
681
  };
560
682
  }
683
+
561
684
  var newMarker = peekUint16(newPos);
685
+
562
686
  while (!(newMarker >= 0xFFC0 && newMarker <= 0xFFFE)) {
563
687
  if (++newPos >= maxPos) {
564
688
  return null;
565
689
  }
690
+
566
691
  newMarker = peekUint16(newPos);
567
692
  }
693
+
568
694
  return {
569
695
  invalid: currentMarker.toString(16),
570
696
  marker: newMarker,
571
697
  offset: newPos
572
698
  };
573
699
  }
700
+
574
701
  JpegImage.prototype = {
575
702
  parse: function parse(data) {
576
- var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
577
- _ref$dnlScanLines = _ref.dnlScanLines,
578
- dnlScanLines = _ref$dnlScanLines === undefined ? null : _ref$dnlScanLines;
703
+ var _ref2 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
704
+ _ref2$dnlScanLines = _ref2.dnlScanLines,
705
+ dnlScanLines = _ref2$dnlScanLines === void 0 ? null : _ref2$dnlScanLines;
579
706
 
580
707
  function readUint16() {
581
708
  var value = data[offset] << 8 | data[offset + 1];
582
709
  offset += 2;
583
710
  return value;
584
711
  }
712
+
585
713
  function readDataBlock() {
586
714
  var length = readUint16();
587
715
  var endOffset = offset + length - 2;
588
716
  var fileMarker = findNextFileMarker(data, endOffset, offset);
717
+
589
718
  if (fileMarker && fileMarker.invalid) {
590
719
  (0, _util.warn)('readDataBlock - incorrect length, current marker is: ' + fileMarker.invalid);
591
720
  endOffset = fileMarker.offset;
592
721
  }
722
+
593
723
  var array = data.subarray(offset, endOffset);
594
724
  offset += array.length;
595
725
  return array;
596
726
  }
727
+
597
728
  function prepareComponents(frame) {
598
729
  var mcusPerLine = Math.ceil(frame.samplesPerLine / 8 / frame.maxH);
599
730
  var mcusPerColumn = Math.ceil(frame.scanLines / 8 / frame.maxV);
731
+
600
732
  for (var i = 0; i < frame.components.length; i++) {
601
733
  component = frame.components[i];
602
734
  var blocksPerLine = Math.ceil(Math.ceil(frame.samplesPerLine / 8) * component.h / frame.maxH);
@@ -608,9 +740,11 @@ var JpegImage = function JpegImageClosure() {
608
740
  component.blocksPerLine = blocksPerLine;
609
741
  component.blocksPerColumn = blocksPerColumn;
610
742
  }
743
+
611
744
  frame.mcusPerLine = mcusPerLine;
612
745
  frame.mcusPerColumn = mcusPerColumn;
613
746
  }
747
+
614
748
  var offset = 0;
615
749
  var jfif = null;
616
750
  var adobe = null;
@@ -620,12 +754,16 @@ var JpegImage = function JpegImageClosure() {
620
754
  var huffmanTablesAC = [],
621
755
  huffmanTablesDC = [];
622
756
  var fileMarker = readUint16();
757
+
623
758
  if (fileMarker !== 0xFFD8) {
624
759
  throw new JpegError('SOI not found');
625
760
  }
761
+
626
762
  fileMarker = readUint16();
627
- while (fileMarker !== 0xFFD9) {
763
+
764
+ markerLoop: while (fileMarker !== 0xFFD9) {
628
765
  var i, j, l;
766
+
629
767
  switch (fileMarker) {
630
768
  case 0xFFE0:
631
769
  case 0xFFE1:
@@ -645,6 +783,7 @@ var JpegImage = function JpegImageClosure() {
645
783
  case 0xFFEF:
646
784
  case 0xFFFE:
647
785
  var appData = readDataBlock();
786
+
648
787
  if (fileMarker === 0xFFE0) {
649
788
  if (appData[0] === 0x4A && appData[1] === 0x46 && appData[2] === 0x49 && appData[3] === 0x46 && appData[4] === 0) {
650
789
  jfif = {
@@ -661,6 +800,7 @@ var JpegImage = function JpegImageClosure() {
661
800
  };
662
801
  }
663
802
  }
803
+
664
804
  if (fileMarker === 0xFFEE) {
665
805
  if (appData[0] === 0x41 && appData[1] === 0x64 && appData[2] === 0x6F && appData[3] === 0x62 && appData[4] === 0x65) {
666
806
  adobe = {
@@ -671,14 +811,18 @@ var JpegImage = function JpegImageClosure() {
671
811
  };
672
812
  }
673
813
  }
814
+
674
815
  break;
816
+
675
817
  case 0xFFDB:
676
818
  var quantizationTablesLength = readUint16();
677
819
  var quantizationTablesEnd = quantizationTablesLength + offset - 2;
678
820
  var z;
821
+
679
822
  while (offset < quantizationTablesEnd) {
680
823
  var quantizationTableSpec = data[offset++];
681
824
  var tableData = new Uint16Array(64);
825
+
682
826
  if (quantizationTableSpec >> 4 === 0) {
683
827
  for (j = 0; j < 64; j++) {
684
828
  z = dctZigZag[j];
@@ -692,15 +836,19 @@ var JpegImage = function JpegImageClosure() {
692
836
  } else {
693
837
  throw new JpegError('DQT - invalid table spec');
694
838
  }
839
+
695
840
  quantizationTables[quantizationTableSpec & 15] = tableData;
696
841
  }
842
+
697
843
  break;
844
+
698
845
  case 0xFFC0:
699
846
  case 0xFFC1:
700
847
  case 0xFFC2:
701
848
  if (frame) {
702
849
  throw new JpegError('Only single frame JPEGs supported');
703
850
  }
851
+
704
852
  readUint16();
705
853
  frame = {};
706
854
  frame.extended = fileMarker === 0xFFC1;
@@ -715,16 +863,20 @@ var JpegImage = function JpegImageClosure() {
715
863
  componentId;
716
864
  var maxH = 0,
717
865
  maxV = 0;
866
+
718
867
  for (i = 0; i < componentsCount; i++) {
719
868
  componentId = data[offset];
720
869
  var h = data[offset + 1] >> 4;
721
870
  var v = data[offset + 1] & 15;
871
+
722
872
  if (maxH < h) {
723
873
  maxH = h;
724
874
  }
875
+
725
876
  if (maxV < v) {
726
877
  maxV = v;
727
878
  }
879
+
728
880
  var qId = data[offset + 2];
729
881
  l = frame.components.push({
730
882
  h: h,
@@ -735,37 +887,48 @@ var JpegImage = function JpegImageClosure() {
735
887
  frame.componentIds[componentId] = l - 1;
736
888
  offset += 3;
737
889
  }
890
+
738
891
  frame.maxH = maxH;
739
892
  frame.maxV = maxV;
740
893
  prepareComponents(frame);
741
894
  break;
895
+
742
896
  case 0xFFC4:
743
897
  var huffmanLength = readUint16();
898
+
744
899
  for (i = 2; i < huffmanLength;) {
745
900
  var huffmanTableSpec = data[offset++];
746
901
  var codeLengths = new Uint8Array(16);
747
902
  var codeLengthSum = 0;
903
+
748
904
  for (j = 0; j < 16; j++, offset++) {
749
905
  codeLengthSum += codeLengths[j] = data[offset];
750
906
  }
907
+
751
908
  var huffmanValues = new Uint8Array(codeLengthSum);
909
+
752
910
  for (j = 0; j < codeLengthSum; j++, offset++) {
753
911
  huffmanValues[j] = data[offset];
754
912
  }
913
+
755
914
  i += 17 + codeLengthSum;
756
915
  (huffmanTableSpec >> 4 === 0 ? huffmanTablesDC : huffmanTablesAC)[huffmanTableSpec & 15] = buildHuffmanTable(codeLengths, huffmanValues);
757
916
  }
917
+
758
918
  break;
919
+
759
920
  case 0xFFDD:
760
921
  readUint16();
761
922
  resetInterval = readUint16();
762
923
  break;
924
+
763
925
  case 0xFFDA:
764
926
  var parseDNLMarker = ++numSOSMarkers === 1 && !dnlScanLines;
765
927
  readUint16();
766
928
  var selectorsCount = data[offset++];
767
929
  var components = [],
768
930
  component;
931
+
769
932
  for (i = 0; i < selectorsCount; i++) {
770
933
  var componentIndex = frame.componentIds[data[offset++]];
771
934
  component = frame.components[componentIndex];
@@ -774,54 +937,75 @@ var JpegImage = function JpegImageClosure() {
774
937
  component.huffmanTableAC = huffmanTablesAC[tableSpec & 15];
775
938
  components.push(component);
776
939
  }
940
+
777
941
  var spectralStart = data[offset++];
778
942
  var spectralEnd = data[offset++];
779
943
  var successiveApproximation = data[offset++];
944
+
780
945
  try {
781
946
  var processed = decodeScan(data, offset, frame, components, resetInterval, spectralStart, spectralEnd, successiveApproximation >> 4, successiveApproximation & 15, parseDNLMarker);
782
947
  offset += processed;
783
948
  } catch (ex) {
784
949
  if (ex instanceof DNLMarkerError) {
785
- (0, _util.warn)('Attempting to re-parse JPEG image using "scanLines" ' + 'parameter found in DNL marker (0xFFDC) segment.');
786
- return this.parse(data, { dnlScanLines: ex.scanLines });
950
+ (0, _util.warn)("".concat(ex.message, " -- attempting to re-parse the JPEG image."));
951
+ return this.parse(data, {
952
+ dnlScanLines: ex.scanLines
953
+ });
954
+ } else if (ex instanceof EOIMarkerError) {
955
+ (0, _util.warn)("".concat(ex.message, " -- ignoring the rest of the image data."));
956
+ break markerLoop;
787
957
  }
958
+
788
959
  throw ex;
789
960
  }
961
+
790
962
  break;
963
+
791
964
  case 0xFFDC:
792
965
  offset += 4;
793
966
  break;
967
+
794
968
  case 0xFFFF:
795
969
  if (data[offset] !== 0xFF) {
796
970
  offset--;
797
971
  }
972
+
798
973
  break;
974
+
799
975
  default:
800
976
  if (data[offset - 3] === 0xFF && data[offset - 2] >= 0xC0 && data[offset - 2] <= 0xFE) {
801
977
  offset -= 3;
802
978
  break;
803
979
  }
980
+
804
981
  var nextFileMarker = findNextFileMarker(data, offset - 2);
982
+
805
983
  if (nextFileMarker && nextFileMarker.invalid) {
806
984
  (0, _util.warn)('JpegImage.parse - unexpected data, current marker is: ' + nextFileMarker.invalid);
807
985
  offset = nextFileMarker.offset;
808
986
  break;
809
987
  }
988
+
810
989
  throw new JpegError('unknown marker ' + fileMarker.toString(16));
811
990
  }
991
+
812
992
  fileMarker = readUint16();
813
993
  }
994
+
814
995
  this.width = frame.samplesPerLine;
815
996
  this.height = frame.scanLines;
816
997
  this.jfif = jfif;
817
998
  this.adobe = adobe;
818
999
  this.components = [];
1000
+
819
1001
  for (i = 0; i < frame.components.length; i++) {
820
1002
  component = frame.components[i];
821
1003
  var quantizationTable = quantizationTables[component.quantizationId];
1004
+
822
1005
  if (quantizationTable) {
823
1006
  component.quantizationTable = quantizationTable;
824
1007
  }
1008
+
825
1009
  this.components.push({
826
1010
  output: buildComponentData(frame, component),
827
1011
  scaleX: component.h / frame.maxH,
@@ -830,10 +1014,12 @@ var JpegImage = function JpegImageClosure() {
830
1014
  blocksPerColumn: component.blocksPerColumn
831
1015
  });
832
1016
  }
1017
+
833
1018
  this.numComponents = this.components.length;
1019
+ return undefined;
834
1020
  },
835
-
836
- _getLinearizedBlockData: function getLinearizedBlockData(width, height) {
1021
+ _getLinearizedBlockData: function _getLinearizedBlockData(width, height) {
1022
+ var isSourcePDF = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
837
1023
  var scaleX = this.width / width,
838
1024
  scaleY = this.height / height;
839
1025
  var component, componentScaleX, componentScaleY, blocksPerScanline;
@@ -846,6 +1032,7 @@ var JpegImage = function JpegImageClosure() {
846
1032
  var data = new Uint8ClampedArray(dataLength);
847
1033
  var xScaleBlockOffset = new Uint32Array(width);
848
1034
  var mask3LSB = 0xfffffff8;
1035
+
849
1036
  for (i = 0; i < numComponents; i++) {
850
1037
  component = this.components[i];
851
1038
  componentScaleX = component.scaleX * scaleX;
@@ -853,20 +1040,29 @@ var JpegImage = function JpegImageClosure() {
853
1040
  offset = i;
854
1041
  output = component.output;
855
1042
  blocksPerScanline = component.blocksPerLine + 1 << 3;
1043
+
856
1044
  for (x = 0; x < width; x++) {
857
1045
  j = 0 | x * componentScaleX;
858
1046
  xScaleBlockOffset[x] = (j & mask3LSB) << 3 | j & 7;
859
1047
  }
1048
+
860
1049
  for (y = 0; y < height; y++) {
861
1050
  j = 0 | y * componentScaleY;
862
1051
  index = blocksPerScanline * (j & mask3LSB) | (j & 7) << 3;
1052
+
863
1053
  for (x = 0; x < width; x++) {
864
1054
  data[offset] = output[index + xScaleBlockOffset[x]];
865
1055
  offset += numComponents;
866
1056
  }
867
1057
  }
868
1058
  }
869
- var transform = this.decodeTransform;
1059
+
1060
+ var transform = this._decodeTransform;
1061
+
1062
+ if (!isSourcePDF && numComponents === 4 && !transform) {
1063
+ transform = new Int32Array([-256, 255, -256, 255, -256, 255, -256, 255]);
1064
+ }
1065
+
870
1066
  if (transform) {
871
1067
  for (i = 0; i < dataLength;) {
872
1068
  for (j = 0, k = 0; j < numComponents; j++, i++, k += 2) {
@@ -874,26 +1070,33 @@ var JpegImage = function JpegImageClosure() {
874
1070
  }
875
1071
  }
876
1072
  }
1073
+
877
1074
  return data;
878
1075
  },
879
- _isColorConversionNeeded: function _isColorConversionNeeded() {
1076
+
1077
+ get _isColorConversionNeeded() {
880
1078
  if (this.adobe) {
881
1079
  return !!this.adobe.transformCode;
882
1080
  }
1081
+
883
1082
  if (this.numComponents === 3) {
884
- if (this.colorTransform === 0) {
1083
+ if (this._colorTransform === 0) {
885
1084
  return false;
886
1085
  }
1086
+
887
1087
  return true;
888
1088
  }
889
- if (this.colorTransform === 1) {
1089
+
1090
+ if (this._colorTransform === 1) {
890
1091
  return true;
891
1092
  }
1093
+
892
1094
  return false;
893
1095
  },
894
1096
 
895
1097
  _convertYccToRgb: function convertYccToRgb(data) {
896
1098
  var Y, Cb, Cr;
1099
+
897
1100
  for (var i = 0, length = data.length; i < length; i += 3) {
898
1101
  Y = data[i];
899
1102
  Cb = data[i + 1];
@@ -902,11 +1105,13 @@ var JpegImage = function JpegImageClosure() {
902
1105
  data[i + 1] = Y + 135.459 - 0.344 * Cb - 0.714 * Cr;
903
1106
  data[i + 2] = Y - 226.816 + 1.772 * Cb;
904
1107
  }
1108
+
905
1109
  return data;
906
1110
  },
907
1111
  _convertYcckToRgb: function convertYcckToRgb(data) {
908
1112
  var Y, Cb, Cr, k;
909
1113
  var offset = 0;
1114
+
910
1115
  for (var i = 0, length = data.length; i < length; i += 4) {
911
1116
  Y = data[i];
912
1117
  Cb = data[i + 1];
@@ -916,10 +1121,12 @@ var JpegImage = function JpegImageClosure() {
916
1121
  data[offset++] = 107.268039397724 + Cb * (2.19927104525741e-5 * Cb - 0.000640992018297945 * Cr + 0.000659397001245577 * Y + 0.000426105652938837 * k - 0.176491792462875) + Cr * (-0.000778269941513683 * Cr + 0.00130872261408275 * Y + 0.000770482631801132 * k - 0.151051492775562) + Y * (0.00126935368114843 * Y - 0.00265090189010898 * k + 0.25802910206845) + k * (-0.000318913117588328 * k - 0.213742400323665);
917
1122
  data[offset++] = -20.810012546947 + Cb * (-0.000570115196973677 * Cb - 2.63409051004589e-5 * Cr + 0.0020741088115012 * Y - 0.00288260236853442 * k + 0.814272968359295) + Cr * (-1.53496057440975e-5 * Cr - 0.000132689043961446 * Y + 0.000560833691242812 * k - 0.195152027534049) + Y * (0.00174418132927582 * Y - 0.00255243321439347 * k + 0.116935020465145) + k * (-0.000343531996510555 * k + 0.24165260232407);
918
1123
  }
1124
+
919
1125
  return data.subarray(0, offset);
920
1126
  },
921
1127
  _convertYcckToCmyk: function convertYcckToCmyk(data) {
922
1128
  var Y, Cb, Cr;
1129
+
923
1130
  for (var i = 0, length = data.length; i < length; i += 4) {
924
1131
  Y = data[i];
925
1132
  Cb = data[i + 1];
@@ -928,12 +1135,14 @@ var JpegImage = function JpegImageClosure() {
928
1135
  data[i + 1] = 119.541 - Y + 0.344 * Cb + 0.714 * Cr;
929
1136
  data[i + 2] = 481.816 - Y - 1.772 * Cb;
930
1137
  }
1138
+
931
1139
  return data;
932
1140
  },
933
1141
  _convertCmykToRgb: function convertCmykToRgb(data) {
934
1142
  var c, m, y, k;
935
1143
  var offset = 0;
936
1144
  var scale = 1 / 255;
1145
+
937
1146
  for (var i = 0, length = data.length; i < length; i += 4) {
938
1147
  c = data[i] * scale;
939
1148
  m = data[i + 1] * scale;
@@ -943,39 +1152,54 @@ var JpegImage = function JpegImageClosure() {
943
1152
  data[offset++] = 255 + c * (8.841041422036149 * c + 60.118027045597366 * m + 6.871425592049007 * y + 31.159100130055922 * k - 79.2970844816548) + m * (-15.310361306967817 * m + 17.575251261109482 * y + 131.35250912493976 * k - 190.9453302588951) + y * (4.444339102852739 * y + 9.8632861493405 * k - 24.86741582555878) - k * (20.737325471181034 * k + 187.80453709719578);
944
1153
  data[offset++] = 255 + c * (0.8842522430003296 * c + 8.078677503112928 * m + 30.89978309703729 * y - 0.23883238689178934 * k - 14.183576799673286) + m * (10.49593273432072 * m + 63.02378494754052 * y + 50.606957656360734 * k - 112.23884253719248) + y * (0.03296041114873217 * y + 115.60384449646641 * k - 193.58209356861505) - k * (22.33816807309886 * k + 180.12613974708367);
945
1154
  }
1155
+
946
1156
  return data.subarray(0, offset);
947
1157
  },
948
- getData: function getData(width, height, forceRGBoutput) {
1158
+ getData: function getData(_ref3) {
1159
+ var width = _ref3.width,
1160
+ height = _ref3.height,
1161
+ _ref3$forceRGB = _ref3.forceRGB,
1162
+ forceRGB = _ref3$forceRGB === void 0 ? false : _ref3$forceRGB,
1163
+ _ref3$isSourcePDF = _ref3.isSourcePDF,
1164
+ isSourcePDF = _ref3$isSourcePDF === void 0 ? false : _ref3$isSourcePDF;
1165
+
949
1166
  if (this.numComponents > 4) {
950
1167
  throw new JpegError('Unsupported color mode');
951
1168
  }
952
- var data = this._getLinearizedBlockData(width, height);
953
- if (this.numComponents === 1 && forceRGBoutput) {
1169
+
1170
+ var data = this._getLinearizedBlockData(width, height, isSourcePDF);
1171
+
1172
+ if (this.numComponents === 1 && forceRGB) {
954
1173
  var dataLength = data.length;
955
1174
  var rgbData = new Uint8ClampedArray(dataLength * 3);
956
1175
  var offset = 0;
1176
+
957
1177
  for (var i = 0; i < dataLength; i++) {
958
1178
  var grayColor = data[i];
959
1179
  rgbData[offset++] = grayColor;
960
1180
  rgbData[offset++] = grayColor;
961
1181
  rgbData[offset++] = grayColor;
962
1182
  }
1183
+
963
1184
  return rgbData;
964
- } else if (this.numComponents === 3 && this._isColorConversionNeeded()) {
1185
+ } else if (this.numComponents === 3 && this._isColorConversionNeeded) {
965
1186
  return this._convertYccToRgb(data);
966
1187
  } else if (this.numComponents === 4) {
967
- if (this._isColorConversionNeeded()) {
968
- if (forceRGBoutput) {
1188
+ if (this._isColorConversionNeeded) {
1189
+ if (forceRGB) {
969
1190
  return this._convertYcckToRgb(data);
970
1191
  }
1192
+
971
1193
  return this._convertYcckToCmyk(data);
972
- } else if (forceRGBoutput) {
1194
+ } else if (forceRGB) {
973
1195
  return this._convertCmykToRgb(data);
974
1196
  }
975
1197
  }
1198
+
976
1199
  return data;
977
1200
  }
978
1201
  };
979
1202
  return JpegImage;
980
1203
  }();
1204
+
981
1205
  exports.JpegImage = JpegImage;