pdfjs-dist 2.0.550 → 2.3.200

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