@ohif/app 3.7.0-beta.10 → 3.7.0-beta.100

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (66) hide show
  1. package/dist/{917.bundle.5ba88c26be5d6da4a0c2.js → 12.bundle.34050abb042540a90a3a.js} +6 -6
  2. package/dist/{295.bundle.957b1159fec14b9199a1.js → 125.bundle.253395f320b72180da63.js} +6 -6
  3. package/dist/{351.bundle.0742237651aef9694a65.js → 181.bundle.169383e9b1a0358b44e8.js} +226 -204
  4. package/dist/{351.css → 181.css} +1 -1
  5. package/dist/{744.bundle.c8ae026860dde82c9e1b.js → 19.bundle.eef637102334f1832ba9.js} +240 -375
  6. package/dist/{606.bundle.5d876f5f3dd8287f0a28.js → 202.bundle.96bbb4547a346fe3921f.js} +1420 -750
  7. package/dist/{926.bundle.dbc9d0e591cb9217fda2.js → 220.bundle.f7e1c96c94245e70f2be.js} +990 -400
  8. package/dist/221.bundle.0b9f7401294213262852.js +1723 -0
  9. package/dist/221.css +2 -0
  10. package/dist/{664.bundle.09abae984223969d1bde.js → 23.bundle.e008ad788170f2ed5569.js} +5 -6
  11. package/dist/{976.bundle.2f01873fd8d59fe756e1.js → 236.bundle.7768b3e29b1fd618b9ec.js} +89 -105
  12. package/dist/{55.bundle.550a823e75eb608e8d5e.js → 250.bundle.8084960e3318cda37317.js} +52 -36
  13. package/dist/{973.bundle.528e2b42f4a218b2524c.js → 281.bundle.39cb630582cf8114fd5e.js} +18 -14
  14. package/dist/{82.bundle.3ac52bd40e60cdfee60a.js → 342.bundle.6edc7ac022b4218ec99f.js} +1772 -477
  15. package/dist/{404.bundle.ef4f5f0697573d138bf1.js → 359.bundle.a8f6cf2f90fe05fc346d.js} +46 -131
  16. package/dist/{192.bundle.26466954184a0ae830e0.js → 370.bundle.4e1276530ba7757347f5.js} +113 -99
  17. package/dist/{790.bundle.4ed6048f4998cbdd9149.js → 410.bundle.5a330214c0c31cbf2551.js} +11 -9
  18. package/dist/{151.bundle.31ea35044218837bf73f.js → 417.bundle.af0a207c29b109f84159.js} +49 -17
  19. package/dist/{569.bundle.c8e771a8d28e237b32be.js → 451.bundle.9fd36f52ff69594f0669.js} +86 -106
  20. package/dist/{581.bundle.dc6197189f7c88c27d4c.js → 471.bundle.b3d77b83b1593c09a504.js} +78 -99
  21. package/dist/{199.bundle.5abeeb99615ff32ed827.js → 506.bundle.ac385e382f79bbf4f306.js} +11 -9
  22. package/dist/{531.bundle.2a82fb1d69e5b57cc72b.js → 530.bundle.a03b6f942ace3e1baa1e.js} +726 -447
  23. package/dist/579.css +1 -0
  24. package/dist/{935.bundle.deeffff0e4f7b528e3c3.js → 604.bundle.a51f83e64004bca5f497.js} +2 -3
  25. package/dist/613.bundle.f75fd669ddfe4ecf9c1b.js +532 -0
  26. package/dist/{984.bundle.75811ab1b046b004305c.js → 663.bundle.3863ac49f85320c8ca96.js} +68 -38
  27. package/dist/{205.bundle.b5a473c200dcf2bbcdb4.js → 686.bundle.dccef1f36e4bc79bcc48.js} +6 -6
  28. package/dist/{50.bundle.f1439664aa8deca8c0bb.js → 687.bundle.ebd1260565c31ab9ad08.js} +218 -9
  29. package/dist/{331.bundle.bd0c13931a21d53086c9.js → 743.bundle.4bfe6e562ffb2c22708f.js} +26281 -21326
  30. package/dist/{728.bundle.d13856835357400fef82.js → 774.bundle.7528cba56a1407357144.js} +95 -64
  31. package/dist/{381.bundle.0905e683605fcbc0895f.js → 775.bundle.2285e7e0e67878948c0d.js} +16 -16
  32. package/dist/{283.bundle.f547f85681d875f9e2e3.js → 782.bundle.8c17030f76b75035564c.js} +117 -67
  33. package/dist/{642.bundle.2d1065b66fd7f8531dd2.js → 814.bundle.cc0ed4fc75cb16e34f02.js} +6 -6
  34. package/dist/{707.bundle.ed1d145de922570db0d2.js → 82.bundle.7a89cd8b81eb7e1e5c66.js} +1147 -768
  35. package/dist/{799.bundle.758558e64147e5aad612.js → 822.bundle.0545d6dbb49515aa04ee.js} +81 -34
  36. package/dist/831.bundle.83658f62fcc769043605.js +16700 -0
  37. package/dist/{953.bundle.3b0189ebc11cf0946f18.js → 886.bundle.4b3a7f2079d085fdbcb3.js} +34 -29
  38. package/dist/945.min.worker.js +1 -1
  39. package/dist/945.min.worker.js.map +1 -1
  40. package/dist/{270.bundle.4564621556b0f963a004.js → 957.bundle.71558794566041f37a92.js} +7110 -997
  41. package/dist/{208.bundle.b1d53f6cc253c3cbc5b3.js → 99.bundle.c6876aaaa3ff2f1b08a1.js} +86 -105
  42. package/dist/_redirects +1 -1
  43. package/dist/app-config.js +35 -17
  44. package/dist/app.bundle.css +13 -12
  45. package/dist/{app.bundle.1a4a0577bf5f2ab8b76d.js → app.bundle.dc0e89948c4f4568fe20.js} +73483 -68064
  46. package/dist/assets/yandex-browser-manifest.json +1 -1
  47. package/dist/cornerstoneDICOMImageLoader.min.js +1 -1
  48. package/dist/cornerstoneDICOMImageLoader.min.js.map +1 -1
  49. package/dist/{dicom-microscopy-viewer.bundle.aa60bdf008c32c39cfd7.js → dicom-microscopy-viewer.bundle.2c146384eb9466d02ff8.js} +5 -4
  50. package/dist/es6-shim.min.js +3569 -2
  51. package/dist/google.js +8 -7
  52. package/dist/index.html +2 -1
  53. package/dist/{index.worker.1c69152d710fa7b84bce.worker.js → index.worker.e62ecca63f1a2e124230.worker.js} +2 -2
  54. package/dist/index.worker.e62ecca63f1a2e124230.worker.js.map +1 -0
  55. package/dist/init-service-worker.js +3 -5
  56. package/dist/oidc-client.min.js +10857 -39
  57. package/dist/polyfill.min.js +184 -1
  58. package/dist/silent-refresh.html +18 -9
  59. package/dist/sw.js +1 -1
  60. package/package.json +20 -22
  61. package/dist/616.bundle.07fe93ec26097c150193.js +0 -685
  62. package/dist/780.bundle.fd0f13dc92e9caa0581e.js +0 -4769
  63. package/dist/index.worker.1c69152d710fa7b84bce.worker.js.map +0 -1
  64. /package/dist/{806.css → 19.css} +0 -0
  65. /package/dist/{55.css → 250.css} +0 -0
  66. /package/dist/{707.css → 82.css} +0 -0
@@ -1,21 +1,22 @@
1
1
  "use strict";
2
- (globalThis["webpackChunk"] = globalThis["webpackChunk"] || []).push([[953],{
2
+ (self["webpackChunk"] = self["webpackChunk"] || []).push([[886],{
3
3
 
4
- /***/ 27953:
4
+ /***/ 48886:
5
5
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
6
6
 
7
7
  __webpack_require__.r(__webpack_exports__);
8
8
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
9
9
  /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
10
10
  /* harmony export */ });
11
- /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(60216);
11
+ /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(3827);
12
12
  /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_0__);
13
- /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(32735);
14
- /* harmony import */ var react_i18next__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(21572);
15
- /* harmony import */ var _ohif_core__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(48501);
16
- /* harmony import */ var _tools_modules_dicomSRModule__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(94709);
17
- /* harmony import */ var _ohif_ui__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(28619);
18
- /* harmony import */ var _utils_hydrateStructuredReport__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(68525);
13
+ /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(43001);
14
+ /* harmony import */ var react_i18next__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(69190);
15
+ /* harmony import */ var _ohif_core__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(71771);
16
+ /* harmony import */ var _tools_modules_dicomSRModule__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(64035);
17
+ /* harmony import */ var _ohif_ui__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(71783);
18
+ /* harmony import */ var _utils_hydrateStructuredReport__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(38965);
19
+ /* harmony import */ var _state__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(62657);
19
20
  function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
20
21
 
21
22
 
@@ -24,6 +25,7 @@ function _extends() { _extends = Object.assign ? Object.assign.bind() : function
24
25
 
25
26
 
26
27
 
28
+
27
29
  const {
28
30
  formatDate
29
31
  } = _ohif_core__WEBPACK_IMPORTED_MODULE_3__.utils;
@@ -34,17 +36,18 @@ function OHIFCornerstoneSRViewport(props) {
34
36
  children,
35
37
  dataSource,
36
38
  displaySets,
37
- viewportIndex,
38
39
  viewportLabel,
39
40
  viewportOptions,
40
41
  servicesManager,
41
42
  extensionManager
42
43
  } = props;
44
+ const [appConfig] = (0,_state__WEBPACK_IMPORTED_MODULE_7__/* .useAppConfig */ .M)();
43
45
  const {
44
46
  displaySetService,
45
47
  cornerstoneViewportService,
46
48
  measurementService
47
49
  } = servicesManager.services;
50
+ const viewportId = viewportOptions.viewportId;
48
51
 
49
52
  // SR viewport will always have a single display set
50
53
  if (displaySets.length > 1) {
@@ -59,7 +62,7 @@ function OHIFCornerstoneSRViewport(props) {
59
62
  const [element, setElement] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);
60
63
  const {
61
64
  viewports,
62
- activeViewportIndex
65
+ activeViewportId
63
66
  } = viewportGrid;
64
67
 
65
68
  // Optional hook into tracking extension, if present.
@@ -84,12 +87,13 @@ function OHIFCornerstoneSRViewport(props) {
84
87
  SeriesInstanceUIDs
85
88
  } = (0,_utils_hydrateStructuredReport__WEBPACK_IMPORTED_MODULE_6__/* ["default"] */ .Z)({
86
89
  servicesManager,
87
- extensionManager
90
+ extensionManager,
91
+ appConfig
88
92
  }, displaySetInstanceUID);
89
93
  const displaySets = displaySetService.getDisplaySetsForSeries(SeriesInstanceUIDs[0]);
90
94
  if (displaySets.length) {
91
95
  viewportGridService.setDisplaySetsForViewports([{
92
- viewportIndex: activeViewportIndex,
96
+ viewportId: activeViewportId,
93
97
  displaySetInstanceUIDs: [displaySets[0].displaySetInstanceUID]
94
98
  }]);
95
99
  }
@@ -148,8 +152,7 @@ function OHIFCornerstoneSRViewport(props) {
148
152
  // imageIdIndex will handle it by updating the viewport, but if they
149
153
  // are the same we just need to use measurementService to jump to the
150
154
  // new measurement
151
- const viewportInfo = cornerstoneViewportService.getViewportInfoByIndex(viewportIndex);
152
- const csViewport = cornerstoneViewportService.getCornerstoneViewport(viewportInfo.getViewportId());
155
+ const csViewport = cornerstoneViewportService.getCornerstoneViewport(viewportId);
153
156
  const imageIds = csViewport.getImageIds();
154
157
  const imageIdIndex = imageIds.indexOf(measurements[newMeasurementSelected].imageId);
155
158
  if (imageIdIndex !== -1) {
@@ -157,7 +160,7 @@ function OHIFCornerstoneSRViewport(props) {
157
160
  }
158
161
  }
159
162
  });
160
- }, [dataSource, srDisplaySet, activeImageDisplaySetData, viewportIndex]);
163
+ }, [dataSource, srDisplaySet, activeImageDisplaySetData, viewportId]);
161
164
  const getCornerstoneViewport = (0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)(() => {
162
165
  if (!activeImageDisplaySetData) {
163
166
  return null;
@@ -193,9 +196,10 @@ function OHIFCornerstoneSRViewport(props) {
193
196
  positionIds: null
194
197
  },
195
198
  onElementEnabled: onElementEnabled,
196
- initialImageIndex: initialImageIndex
199
+ initialImageIndex: initialImageIndex,
200
+ isJumpToMeasurementDisabled: true
197
201
  }));
198
- }, [activeImageDisplaySetData, viewportIndex, measurementSelected]);
202
+ }, [activeImageDisplaySetData, viewportId, measurementSelected]);
199
203
  const onMeasurementChange = (0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)(direction => {
200
204
  let newMeasurementSelected = measurementSelected;
201
205
  if (direction === 'right') {
@@ -221,10 +225,10 @@ function OHIFCornerstoneSRViewport(props) {
221
225
  let {
222
226
  displaySetInstanceUIDs
223
227
  } = _ref3;
224
- const activeViewport = viewports[activeViewportIndex];
228
+ const activeViewport = viewports.get(activeViewportId);
225
229
  if (displaySetInstanceUIDs.includes(activeViewport.displaySetInstanceUID)) {
226
230
  viewportGridService.setDisplaySetsForViewport({
227
- viewportIndex: activeViewportIndex,
231
+ viewportId: activeViewportId,
228
232
  displaySetInstanceUIDs: []
229
233
  });
230
234
  }
@@ -285,7 +289,7 @@ function OHIFCornerstoneSRViewport(props) {
285
289
  if (children && children.length) {
286
290
  childrenWithProps = children.map((child, index) => {
287
291
  return child && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.cloneElement(child, {
288
- viewportIndex,
292
+ viewportId,
289
293
  key: index
290
294
  });
291
295
  });
@@ -312,7 +316,7 @@ function OHIFCornerstoneSRViewport(props) {
312
316
  onArrowsClick: onMeasurementChange,
313
317
  getStatusComponent: () => _getStatusComponent({
314
318
  srDisplaySet,
315
- viewportIndex,
319
+ viewportId,
316
320
  isTracked: false,
317
321
  isRehydratable: srDisplaySet.isRehydratable,
318
322
  isLocked,
@@ -335,12 +339,12 @@ function OHIFCornerstoneSRViewport(props) {
335
339
  }
336
340
  }
337
341
  }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createElement("div", {
338
- className: "relative flex flex-row w-full h-full overflow-hidden"
342
+ className: "relative flex h-full w-full flex-row overflow-hidden"
339
343
  }, getCornerstoneViewport(), childrenWithProps));
340
344
  }
341
345
  OHIFCornerstoneSRViewport.propTypes = {
342
346
  displaySets: prop_types__WEBPACK_IMPORTED_MODULE_0___default().arrayOf((prop_types__WEBPACK_IMPORTED_MODULE_0___default().object)),
343
- viewportIndex: (prop_types__WEBPACK_IMPORTED_MODULE_0___default().number).isRequired,
347
+ viewportId: (prop_types__WEBPACK_IMPORTED_MODULE_0___default().string).isRequired,
344
348
  dataSource: (prop_types__WEBPACK_IMPORTED_MODULE_0___default().object),
345
349
  children: (prop_types__WEBPACK_IMPORTED_MODULE_0___default().node),
346
350
  viewportLabel: (prop_types__WEBPACK_IMPORTED_MODULE_0___default().string),
@@ -384,7 +388,7 @@ async function _getViewportReferencedDisplaySetData(displaySet, measurementSelec
384
388
  function _getStatusComponent(_ref4) {
385
389
  let {
386
390
  srDisplaySet,
387
- viewportIndex,
391
+ viewportId,
388
392
  isRehydratable,
389
393
  isLocked,
390
394
  sendTrackedMeasurementsEvent
@@ -392,7 +396,7 @@ function _getStatusComponent(_ref4) {
392
396
  const handleMouseUp = () => {
393
397
  sendTrackedMeasurementsEvent('HYDRATE_SR', {
394
398
  displaySetInstanceUID: srDisplaySet.displaySetInstanceUID,
395
- viewportIndex
399
+ viewportId
396
400
  });
397
401
  };
398
402
  const {
@@ -421,18 +425,19 @@ function _getStatusComponent(_ref4) {
421
425
  break;
422
426
  case 3:
423
427
  StatusIcon = () => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createElement(_ohif_ui__WEBPACK_IMPORTED_MODULE_5__/* .Icon */ .JO, {
428
+ className: "text-aqua-pale",
424
429
  name: "status-untracked"
425
430
  });
426
431
  ToolTipMessage = () => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createElement("div", null, `Click ${loadStr} to restore measurements.`);
427
432
  }
428
433
  const StatusArea = () => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createElement("div", {
429
- className: "flex h-6 leading-6 cursor-default text-sm text-white"
434
+ className: "flex h-6 cursor-default text-sm leading-6 text-white"
430
435
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createElement("div", {
431
- className: "min-w-[45px] flex items-center p-1 rounded-l-xl rounded-r bg-customgray-100"
436
+ className: "bg-customgray-100 flex min-w-[45px] items-center rounded-l-xl rounded-r p-1"
432
437
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createElement(StatusIcon, null), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createElement("span", {
433
438
  className: "ml-1"
434
439
  }, "SR")), state === 3 && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createElement("div", {
435
- className: "ml-1 px-1.5 rounded cursor-pointer hover:text-black bg-primary-main hover:bg-primary-light"
440
+ className: "bg-primary-main hover:bg-primary-light ml-1 cursor-pointer rounded px-1.5 hover:text-black"
436
441
  // Using onMouseUp here because onClick is not working when the viewport is not active and is styled with pointer-events:none
437
442
  ,
438
443
  onMouseUp: handleMouseUp
@@ -1,2 +1,2 @@
1
- (self.webpackChunk=self.webpackChunk||[]).push([[945],{945:function(e,r){var n={Unkown:0,Grayscale:1,AdobeRGB:2,RGB:3,CYMK:4},o=function(){"use strict";var e=new Int32Array([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]),r=4017,o=799,a=3406,t=2276,s=1567,i=3784,c=5793,l=2896;function f(e,r){for(var n,o,a=0,t=[],s=16;s>0&&!e[s-1];)s--;t.push({children:[],index:0});var i,c=t[0];for(n=0;n<s;n++){for(o=0;o<e[n];o++){for((c=t.pop()).children[c.index]=r[a];c.index>0;)c=t.pop();for(c.index++,t.push(c);t.length<=n;)t.push(i={children:[],index:0}),c.children[c.index]=i.children,c=i;a++}n+1<s&&(t.push(i={children:[],index:0}),c.children[c.index]=i.children,c=i)}return t[0].children}function u(e,r,n){return 64*((e.blocksPerLine+1)*r+n)}function h(r,n,o,a,t,s,i,c,l){o.precision,o.samplesPerLine,o.scanLines;var f=o.mcusPerLine,h=o.progressive,b=(o.maxH,o.maxV,n),v=0,m=0;function p(){if(m>0)return m--,v>>m&1;if(255==(v=r[n++])){var e=r[n++];if(e)throw"unexpected marker: "+(v<<8|e).toString(16)}return m=7,v>>>7}function d(e){for(var r,n=e;null!==(r=p());){if("number"==typeof(n=n[r]))return n;if("object"!=typeof n)throw"invalid huffman sequence"}return null}function k(e){for(var r=0;e>0;){var n=p();if(null===n)return;r=r<<1|n,e--}return r}function w(e){var r=k(e);return r>=1<<e-1?r:r+(-1<<e)+1}var C=0;var P,g=0;function y(e,r,n,o,a){var t=n%f;r(e,u(e,(n/f|0)*e.v+o,t*e.h+a))}function D(e,r,n){r(e,u(e,n/e.blocksPerLine|0,n%e.blocksPerLine))}var L,x,T,A,U,I,q=a.length;I=h?0===s?0===c?function(e,r){var n=d(e.huffmanTableDC),o=0===n?0:w(n)<<l;e.blockData[r]=e.pred+=o}:function(e,r){e.blockData[r]|=p()<<l}:0===c?function(r,n){if(C>0)C--;else for(var o=s,a=i;o<=a;){var t=d(r.huffmanTableAC),c=15&t,f=t>>4;if(0!==c){var u=e[o+=f];r.blockData[n+u]=w(c)*(1<<l),o++}else{if(f<15){C=k(f)+(1<<f)-1;break}o+=16}}}:function(r,n){for(var o=s,a=i,t=0;o<=a;){var c=e[o];switch(g){case 0:var f=d(r.huffmanTableAC),u=15&f;if(t=f>>4,0===u)t<15?(C=k(t)+(1<<t),g=4):(t=16,g=1);else{if(1!==u)throw"invalid ACn encoding";P=w(u),g=t?2:3}continue;case 1:case 2:r.blockData[n+c]?r.blockData[n+c]+=p()<<l:0==--t&&(g=2==g?3:0);break;case 3:r.blockData[n+c]?r.blockData[n+c]+=p()<<l:(r.blockData[n+c]=P<<l,g=0);break;case 4:r.blockData[n+c]&&(r.blockData[n+c]+=p()<<l)}o++}4===g&&0==--C&&(g=0)}:function(r,n){var o=d(r.huffmanTableDC),a=0===o?0:w(o);r.blockData[n]=r.pred+=a;for(var t=1;t<64;){var s=d(r.huffmanTableAC),i=15&s,c=s>>4;if(0!==i){var l=e[t+=c];r.blockData[n+l]=w(i),t++}else{if(c<15)break;t+=16}}};var G,M,z,H,R=0;for(M=1==q?a[0].blocksPerLine*a[0].blocksPerColumn:f*o.mcusPerColumn,t||(t=M);R<M;){for(x=0;x<q;x++)a[x].pred=0;if(C=0,1==q)for(L=a[0],U=0;U<t;U++)D(L,I,R),R++;else for(U=0;U<t;U++){for(x=0;x<q;x++)for(z=(L=a[x]).h,H=L.v,T=0;T<H;T++)for(A=0;A<z;A++)y(L,I,R,T,A);R++}if(m=0,(G=r[n]<<8|r[n+1])<=65280)throw"marker was not found";if(!(G>=65488&&G<=65495))break;n+=2}return n-b}function b(e,n,f){var u,h,b,v,m,p,d,k,w,C,P=e.quantizationTable;for(C=0;C<64;C++)f[C]=e.blockData[n+C]*P[C];for(C=0;C<8;++C){var g=8*C;0!==f[1+g]||0!==f[2+g]||0!==f[3+g]||0!==f[4+g]||0!==f[5+g]||0!==f[6+g]||0!==f[7+g]?(u=c*f[0+g]+128>>8,h=c*f[4+g]+128>>8,b=f[2+g],v=f[6+g],m=l*(f[1+g]-f[7+g])+128>>8,k=l*(f[1+g]+f[7+g])+128>>8,p=f[3+g]<<4,d=f[5+g]<<4,w=u-h+1>>1,u=u+h+1>>1,h=w,w=b*i+v*s+128>>8,b=b*s-v*i+128>>8,v=w,w=m-d+1>>1,m=m+d+1>>1,d=w,w=k+p+1>>1,p=k-p+1>>1,k=w,w=u-v+1>>1,u=u+v+1>>1,v=w,w=h-b+1>>1,h=h+b+1>>1,b=w,w=m*t+k*a+2048>>12,m=m*a-k*t+2048>>12,k=w,w=p*o+d*r+2048>>12,p=p*r-d*o+2048>>12,d=w,f[0+g]=u+k,f[7+g]=u-k,f[1+g]=h+d,f[6+g]=h-d,f[2+g]=b+p,f[5+g]=b-p,f[3+g]=v+m,f[4+g]=v-m):(w=c*f[0+g]+512>>10,f[0+g]=w,f[1+g]=w,f[2+g]=w,f[3+g]=w,f[4+g]=w,f[5+g]=w,f[6+g]=w,f[7+g]=w)}for(C=0;C<8;++C){var y=C;0!==f[8+y]||0!==f[16+y]||0!==f[24+y]||0!==f[32+y]||0!==f[40+y]||0!==f[48+y]||0!==f[56+y]?(u=c*f[0+y]+2048>>12,h=c*f[32+y]+2048>>12,b=f[16+y],v=f[48+y],m=l*(f[8+y]-f[56+y])+2048>>12,k=l*(f[8+y]+f[56+y])+2048>>12,p=f[24+y],d=f[40+y],w=u-h+1>>1,u=u+h+1>>1,h=w,w=b*i+v*s+2048>>12,b=b*s-v*i+2048>>12,v=w,w=m-d+1>>1,m=m+d+1>>1,d=w,w=k+p+1>>1,p=k-p+1>>1,k=w,w=u-v+1>>1,u=u+v+1>>1,v=w,w=h-b+1>>1,h=h+b+1>>1,b=w,w=m*t+k*a+2048>>12,m=m*a-k*t+2048>>12,k=w,w=p*o+d*r+2048>>12,p=p*r-d*o+2048>>12,d=w,f[0+y]=u+k,f[56+y]=u-k,f[8+y]=h+d,f[48+y]=h-d,f[16+y]=b+p,f[40+y]=b-p,f[24+y]=v+m,f[32+y]=v-m):(w=c*f[C+0]+8192>>14,f[0+y]=w,f[8+y]=w,f[16+y]=w,f[24+y]=w,f[32+y]=w,f[40+y]=w,f[48+y]=w,f[56+y]=w)}for(C=0;C<64;++C){var D=n+C,L=f[C];L=L<=-2056/e.bitConversion?0:L>=2024/e.bitConversion?255/e.bitConversion:L+2056/e.bitConversion>>4,e.blockData[D]=L}}function v(e,r){for(var n=r.blocksPerLine,o=r.blocksPerColumn,a=new Int32Array(64),t=0;t<o;t++)for(var s=0;s<n;s++){b(r,u(r,t,s),a)}return r.blockData}function m(e){return e<=0?0:e>=255?255:0|e}return constructor.prototype={load:function(e){var r=function(e){this.parse(e),this.onload&&this.onload()}.bind(this);if(e.indexOf("data:")>-1){for(var n=e.indexOf("base64,")+7,o=atob(e.substring(n)),a=new Uint8Array(o.length),t=o.length-1;t>=0;t--)a[t]=o.charCodeAt(t);r(o)}else{var s=new XMLHttpRequest;s.open("GET",e,!0),s.responseType="arraybuffer",s.onload=function(){var e=new Uint8Array(s.response);r(e)}.bind(this),s.send(null)}},parse:function(r){function o(){var e=r[c]<<8|r[c+1];return c+=2,e}function a(){var e=o(),n=r.subarray(c,c+e-2);return c+=n.length,n}function t(e){for(var r=Math.ceil(e.samplesPerLine/8/e.maxH),n=Math.ceil(e.scanLines/8/e.maxV),o=0;o<e.components.length;o++){S=e.components[o];var a=Math.ceil(Math.ceil(e.samplesPerLine/8)*S.h/e.maxH),t=Math.ceil(Math.ceil(e.scanLines/8)*S.v/e.maxV),s=r*S.h,i=64*(n*S.v)*(s+1);S.blockData=new Int16Array(i),S.blocksPerLine=a,S.blocksPerColumn=t}e.mcusPerLine=r,e.mcusPerColumn=n}var s,i,c=0,l=(r.length,null),u=null,b=[],m=[],p=[],d=o();if(65496!=d)throw"SOI not found";for(d=o();65497!=d;){var k,w;switch(d){case 65504:case 65505:case 65506:case 65507:case 65508:case 65509:case 65510:case 65511:case 65512:case 65513:case 65514:case 65515:case 65516:case 65517:case 65518:case 65519:case 65534:var C=a();65504===d&&74===C[0]&&70===C[1]&&73===C[2]&&70===C[3]&&0===C[4]&&(l={version:{major:C[5],minor:C[6]},densityUnits:C[7],xDensity:C[8]<<8|C[9],yDensity:C[10]<<8|C[11],thumbWidth:C[12],thumbHeight:C[13],thumbData:C.subarray(14,14+3*C[12]*C[13])}),65518===d&&65===C[0]&&100===C[1]&&111===C[2]&&98===C[3]&&101===C[4]&&0===C[5]&&(u={version:C[6],flags0:C[7]<<8|C[8],flags1:C[9]<<8|C[10],transformCode:C[11]});break;case 65499:for(var P=o()+c-2;c<P;){var g=r[c++],y=new Int32Array(64);if(g>>4==0)for(k=0;k<64;k++){y[e[k]]=r[c++]}else{if(g>>4!=1)throw"DQT: invalid table spec";for(k=0;k<64;k++){y[e[k]]=o()}}b[15&g]=y}break;case 65472:case 65473:case 65474:if(s)throw"Only single frame JPEGs supported";o(),(s={}).extended=65473===d,s.progressive=65474===d,s.precision=r[c++],s.scanLines=o(),s.samplesPerLine=o(),s.components=[],s.componentIds={};var D,L=r[c++],x=0,T=0;for(J=0;J<L;J++){D=r[c];var A=r[c+1]>>4,U=15&r[c+1];x<A&&(x=A),T<U&&(T=U);var I=r[c+2];w=s.components.push({h:A,v:U,quantizationTable:b[I],quantizationTableId:I,bitConversion:255/((1<<s.precision)-1)}),s.componentIds[D]=w-1,c+=3}s.maxH=x,s.maxV=T,t(s);break;case 65476:var q=o();for(J=2;J<q;){var G=r[c++],M=new Uint8Array(16),z=0;for(k=0;k<16;k++,c++)z+=M[k]=r[c];var H=new Uint8Array(z);for(k=0;k<z;k++,c++)H[k]=r[c];J+=17+z,(G>>4==0?p:m)[15&G]=f(M,H)}break;case 65501:o(),i=o();break;case 65498:o();var R=r[c++],V=[];for(J=0;J<R;J++){var Y=s.componentIds[r[c++]];S=s.components[Y];var B=r[c++];S.huffmanTableDC=p[B>>4],S.huffmanTableAC=m[15&B],V.push(S)}var O=r[c++],X=r[c++],j=r[c++],E=h(r,c,s,V,i,O,X,j>>4,15&j);c+=E;break;case 65535:255!==r[c]&&c--;break;default:if(255==r[c-3]&&r[c-2]>=192&&r[c-2]<=254){c-=3;break}throw"unknown JPEG marker "+d.toString(16)}d=o()}switch(this.width=s.samplesPerLine,this.height=s.scanLines,this.jfif=l,this.adobe=u,this.components=[],s.components.length){case 1:this.colorspace=n.Grayscale;break;case 3:this.adobe?this.colorspace=n.AdobeRGB:this.colorspace=n.RGB;break;case 4:this.colorspace=n.CYMK;break;default:this.colorspace=n.Unknown}for(var J=0;J<s.components.length;J++){var S;(S=s.components[J]).quantizationTable||null===S.quantizationTableId||(S.quantizationTable=b[S.quantizationTableId]),this.components.push({output:v(0,S),scaleX:S.h/s.maxH,scaleY:S.v/s.maxV,blocksPerLine:S.blocksPerLine,blocksPerColumn:S.blocksPerColumn,bitConversion:S.bitConversion})}},getData16:function(e,r){if(1!==this.components.length)throw"Unsupported color mode";var n,o,a,t,s,i,c=this.width/e,l=this.height/r,f=0,h=this.components.length,b=new Uint16Array(e*r*h),v=new Uint16Array((this.components[0].blocksPerLine<<3)*this.components[0].blocksPerColumn*8);for(i=0;i<h;i++){for(var m,p,d,k=(n=this.components[i]).blocksPerLine,w=n.blocksPerColumn,C=k<<3,P=0,g=0;g<w;g++)for(var y=g<<3,D=0;D<k;D++){var L=u(n,g,D),x=(f=0,D<<3);for(m=0;m<8;m++){P=(y+m)*C;for(p=0;p<8;p++)v[P+x+p]=n.output[L+f++]}}for(o=n.scaleX*c,a=n.scaleY*l,f=i,s=0;s<r;s++)for(t=0;t<e;t++)d=(0|s*a)*C+(0|t*o),b[f]=v[d],f+=h}return b},getData:function(e,r){var n,o,a,t,s,i,c,l,f,h,b,v,p,d,k,w=this.width/e,C=this.height/r,P=0,g=this.components.length,y=e*r*g,D=new Uint8Array(y),L=new Uint8Array((this.components[0].blocksPerLine<<3)*this.components[0].blocksPerColumn*8);for(i=0;i<g;i++){for(var x,T,A,U=(n=this.components[i]).blocksPerLine,I=n.blocksPerColumn,q=U<<3,G=0,M=0;M<I;M++)for(var z=M<<3,H=0;H<U;H++){var R=u(n,M,H),V=(P=0,H<<3);for(x=0;x<8;x++){G=(z+x)*q;for(T=0;T<8;T++)L[G+V+T]=n.output[R+P++]*n.bitConversion}}for(o=n.scaleX*w,a=n.scaleY*C,P=i,s=0;s<r;s++)for(t=0;t<e;t++)A=(0|s*a)*q+(0|t*o),D[P]=L[A],P+=g}switch(g){case 1:case 2:break;case 3:if(k=!0,this.adobe&&this.adobe.transformCode?k=!0:void 0!==this.colorTransform&&(k=!!this.colorTransform),k)for(i=0;i<y;i+=g)c=D[i],l=D[i+1],v=m(c-179.456+1.402*(f=D[i+2])),p=m(c+135.459-.344*l-.714*f),d=m(c-226.816+1.772*l),D[i]=v,D[i+1]=p,D[i+2]=d;break;case 4:if(!this.adobe)throw"Unsupported color mode (4 components)";if(k=!1,this.adobe&&this.adobe.transformCode?k=!0:void 0!==this.colorTransform&&(k=!!this.colorTransform),k)for(i=0;i<y;i+=g)c=D[i],l=D[i+1],h=m(434.456-c-1.402*(f=D[i+2])),b=m(119.541-c+.344*l+.714*f),c=m(481.816-c-1.772*l),D[i]=h,D[i+1]=b,D[i+2]=c;break;default:throw"Unsupported color mode"}return D}},constructor}();e.exports={JpegImage:o}}}]);
1
+ (self.webpackChunk=self.webpackChunk||[]).push([[945],{945:function(e,r){var n={Unkown:0,Grayscale:1,AdobeRGB:2,RGB:3,CYMK:4},o=function(){"use strict";var e=new Int32Array([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]),r=4017,o=799,a=3406,t=2276,s=1567,i=3784,c=5793,l=2896;function f(e,r){for(var n,o,a=0,t=[],s=16;s>0&&!e[s-1];)s--;t.push({children:[],index:0});var i,c=t[0];for(n=0;n<s;n++){for(o=0;o<e[n];o++){for((c=t.pop()).children[c.index]=r[a];c.index>0;)c=t.pop();for(c.index++,t.push(c);t.length<=n;)t.push(i={children:[],index:0}),c.children[c.index]=i.children,c=i;a++}n+1<s&&(t.push(i={children:[],index:0}),c.children[c.index]=i.children,c=i)}return t[0].children}function u(e,r,n){return 64*((e.blocksPerLine+1)*r+n)}function h(r,n,o,a,t,s,i,c,l){o.precision,o.samplesPerLine,o.scanLines;var f=o.mcusPerLine,h=o.progressive,b=(o.maxH,o.maxV,n),v=0,m=0;function p(){if(m>0)return m--,v>>m&1;if(255==(v=r[n++])){var e=r[n++];if(e)throw"unexpected marker: "+(v<<8|e).toString(16)}return m=7,v>>>7}function d(e){for(var r,n=e;null!==(r=p());){if("number"==typeof(n=n[r]))return n;if("object"!=typeof n)throw"invalid huffman sequence"}return null}function k(e){for(var r=0;e>0;){var n=p();if(null===n)return;r=r<<1|n,e--}return r}function w(e){var r=k(e);return r>=1<<e-1?r:r+(-1<<e)+1}var C=0;var P,g=0;function y(e,r,n,o,a){var t=n%f;r(e,u(e,(n/f|0)*e.v+o,t*e.h+a))}function D(e,r,n){r(e,u(e,n/e.blocksPerLine|0,n%e.blocksPerLine))}var L,x,T,A,U,I,q=a.length;I=h?0===s?0===c?function(e,r){var n=d(e.huffmanTableDC),o=0===n?0:w(n)<<l;e.blockData[r]=e.pred+=o}:function(e,r){e.blockData[r]|=p()<<l}:0===c?function(r,n){if(C>0)C--;else for(var o=s,a=i;o<=a;){var t=d(r.huffmanTableAC),c=15&t,f=t>>4;if(0!==c){var u=e[o+=f];r.blockData[n+u]=w(c)*(1<<l),o++}else{if(f<15){C=k(f)+(1<<f)-1;break}o+=16}}}:function(r,n){for(var o=s,a=i,t=0;o<=a;){var c=e[o];switch(g){case 0:var f=d(r.huffmanTableAC),u=15&f;if(t=f>>4,0===u)t<15?(C=k(t)+(1<<t),g=4):(t=16,g=1);else{if(1!==u)throw"invalid ACn encoding";P=w(u),g=t?2:3}continue;case 1:case 2:r.blockData[n+c]?r.blockData[n+c]+=p()<<l:0==--t&&(g=2==g?3:0);break;case 3:r.blockData[n+c]?r.blockData[n+c]+=p()<<l:(r.blockData[n+c]=P<<l,g=0);break;case 4:r.blockData[n+c]&&(r.blockData[n+c]+=p()<<l)}o++}4===g&&0==--C&&(g=0)}:function(r,n){var o=d(r.huffmanTableDC),a=0===o?0:w(o);r.blockData[n]=r.pred+=a;for(var t=1;t<64;){var s=d(r.huffmanTableAC),i=15&s,c=s>>4;if(0!==i){var l=e[t+=c];r.blockData[n+l]=w(i),t++}else{if(c<15)break;t+=16}}};var G,M,z,H,O=0;for(M=1==q?a[0].blocksPerLine*a[0].blocksPerColumn:f*o.mcusPerColumn,t||(t=M);O<M;){for(x=0;x<q;x++)a[x].pred=0;if(C=0,1==q)for(L=a[0],U=0;U<t;U++)D(L,I,O),O++;else for(U=0;U<t;U++){for(x=0;x<q;x++)for(z=(L=a[x]).h,H=L.v,T=0;T<H;T++)for(A=0;A<z;A++)y(L,I,O,T,A);O++}if(m=0,(G=r[n]<<8|r[n+1])<=65280)throw"marker was not found";if(!(G>=65488&&G<=65495))break;n+=2}return n-b}function b(e,n,f){var u,h,b,v,m,p,d,k,w,C,P=e.quantizationTable;for(C=0;C<64;C++)f[C]=e.blockData[n+C]*P[C];for(C=0;C<8;++C){var g=8*C;0!==f[1+g]||0!==f[2+g]||0!==f[3+g]||0!==f[4+g]||0!==f[5+g]||0!==f[6+g]||0!==f[7+g]?(u=c*f[0+g]+128>>8,h=c*f[4+g]+128>>8,b=f[2+g],v=f[6+g],m=l*(f[1+g]-f[7+g])+128>>8,k=l*(f[1+g]+f[7+g])+128>>8,p=f[3+g]<<4,d=f[5+g]<<4,w=u-h+1>>1,u=u+h+1>>1,h=w,w=b*i+v*s+128>>8,b=b*s-v*i+128>>8,v=w,w=m-d+1>>1,m=m+d+1>>1,d=w,w=k+p+1>>1,p=k-p+1>>1,k=w,w=u-v+1>>1,u=u+v+1>>1,v=w,w=h-b+1>>1,h=h+b+1>>1,b=w,w=m*t+k*a+2048>>12,m=m*a-k*t+2048>>12,k=w,w=p*o+d*r+2048>>12,p=p*r-d*o+2048>>12,d=w,f[0+g]=u+k,f[7+g]=u-k,f[1+g]=h+d,f[6+g]=h-d,f[2+g]=b+p,f[5+g]=b-p,f[3+g]=v+m,f[4+g]=v-m):(w=c*f[0+g]+512>>10,f[0+g]=w,f[1+g]=w,f[2+g]=w,f[3+g]=w,f[4+g]=w,f[5+g]=w,f[6+g]=w,f[7+g]=w)}for(C=0;C<8;++C){var y=C;0!==f[8+y]||0!==f[16+y]||0!==f[24+y]||0!==f[32+y]||0!==f[40+y]||0!==f[48+y]||0!==f[56+y]?(u=c*f[0+y]+2048>>12,h=c*f[32+y]+2048>>12,b=f[16+y],v=f[48+y],m=l*(f[8+y]-f[56+y])+2048>>12,k=l*(f[8+y]+f[56+y])+2048>>12,p=f[24+y],d=f[40+y],w=u-h+1>>1,u=u+h+1>>1,h=w,w=b*i+v*s+2048>>12,b=b*s-v*i+2048>>12,v=w,w=m-d+1>>1,m=m+d+1>>1,d=w,w=k+p+1>>1,p=k-p+1>>1,k=w,w=u-v+1>>1,u=u+v+1>>1,v=w,w=h-b+1>>1,h=h+b+1>>1,b=w,w=m*t+k*a+2048>>12,m=m*a-k*t+2048>>12,k=w,w=p*o+d*r+2048>>12,p=p*r-d*o+2048>>12,d=w,f[0+y]=u+k,f[56+y]=u-k,f[8+y]=h+d,f[48+y]=h-d,f[16+y]=b+p,f[40+y]=b-p,f[24+y]=v+m,f[32+y]=v-m):(w=c*f[C+0]+8192>>14,f[0+y]=w,f[8+y]=w,f[16+y]=w,f[24+y]=w,f[32+y]=w,f[40+y]=w,f[48+y]=w,f[56+y]=w)}for(C=0;C<64;++C){var D=n+C,L=f[C];L=L<=-2056/e.bitConversion?0:L>=2024/e.bitConversion?255/e.bitConversion:L+2056/e.bitConversion>>4,e.blockData[D]=L}}function v(e,r){for(var n=r.blocksPerLine,o=r.blocksPerColumn,a=new Int32Array(64),t=0;t<o;t++)for(var s=0;s<n;s++){b(r,u(r,t,s),a)}return r.blockData}function m(e){return e<=0?0:e>=255?255:0|e}class p{}return Object.setPrototypeOf(p.prototype,{load:function(e){var r=function(e){this.parse(e),this.onload&&this.onload()}.bind(this);if(e.indexOf("data:")>-1){for(var n=e.indexOf("base64,")+7,o=atob(e.substring(n)),a=new Uint8Array(o.length),t=o.length-1;t>=0;t--)a[t]=o.charCodeAt(t);r(o)}else{var s=new XMLHttpRequest;s.open("GET",e,!0),s.responseType="arraybuffer",s.onload=function(){var e=new Uint8Array(s.response);r(e)}.bind(this),s.send(null)}},parse:function(r){function o(){var e=r[c]<<8|r[c+1];return c+=2,e}function a(){var e=o(),n=r.subarray(c,c+e-2);return c+=n.length,n}function t(e){for(var r=Math.ceil(e.samplesPerLine/8/e.maxH),n=Math.ceil(e.scanLines/8/e.maxV),o=0;o<e.components.length;o++){S=e.components[o];var a=Math.ceil(Math.ceil(e.samplesPerLine/8)*S.h/e.maxH),t=Math.ceil(Math.ceil(e.scanLines/8)*S.v/e.maxV),s=r*S.h,i=64*(n*S.v)*(s+1);S.blockData=new Int16Array(i),S.blocksPerLine=a,S.blocksPerColumn=t}e.mcusPerLine=r,e.mcusPerColumn=n}var s,i,c=0,l=(r.length,null),u=null,b=[],m=[],p=[],d=o();if(65496!=d)throw"SOI not found";for(d=o();65497!=d;){var k,w;switch(d){case 65504:case 65505:case 65506:case 65507:case 65508:case 65509:case 65510:case 65511:case 65512:case 65513:case 65514:case 65515:case 65516:case 65517:case 65518:case 65519:case 65534:var C=a();65504===d&&74===C[0]&&70===C[1]&&73===C[2]&&70===C[3]&&0===C[4]&&(l={version:{major:C[5],minor:C[6]},densityUnits:C[7],xDensity:C[8]<<8|C[9],yDensity:C[10]<<8|C[11],thumbWidth:C[12],thumbHeight:C[13],thumbData:C.subarray(14,14+3*C[12]*C[13])}),65518===d&&65===C[0]&&100===C[1]&&111===C[2]&&98===C[3]&&101===C[4]&&0===C[5]&&(u={version:C[6],flags0:C[7]<<8|C[8],flags1:C[9]<<8|C[10],transformCode:C[11]});break;case 65499:for(var P=o()+c-2;c<P;){var g=r[c++],y=new Int32Array(64);if(g>>4==0)for(k=0;k<64;k++){y[e[k]]=r[c++]}else{if(g>>4!=1)throw"DQT: invalid table spec";for(k=0;k<64;k++){y[e[k]]=o()}}b[15&g]=y}break;case 65472:case 65473:case 65474:if(s)throw"Only single frame JPEGs supported";o(),(s={}).extended=65473===d,s.progressive=65474===d,s.precision=r[c++],s.scanLines=o(),s.samplesPerLine=o(),s.components=[],s.componentIds={};var D,L=r[c++],x=0,T=0;for(J=0;J<L;J++){D=r[c];var A=r[c+1]>>4,U=15&r[c+1];x<A&&(x=A),T<U&&(T=U);var I=r[c+2];w=s.components.push({h:A,v:U,quantizationTable:b[I],quantizationTableId:I,bitConversion:255/((1<<s.precision)-1)}),s.componentIds[D]=w-1,c+=3}s.maxH=x,s.maxV=T,t(s);break;case 65476:var q=o();for(J=2;J<q;){var G=r[c++],M=new Uint8Array(16),z=0;for(k=0;k<16;k++,c++)z+=M[k]=r[c];var H=new Uint8Array(z);for(k=0;k<z;k++,c++)H[k]=r[c];J+=17+z,(G>>4==0?p:m)[15&G]=f(M,H)}break;case 65501:o(),i=o();break;case 65498:o();var O=r[c++],R=[];for(J=0;J<O;J++){var V=s.componentIds[r[c++]];S=s.components[V];var Y=r[c++];S.huffmanTableDC=p[Y>>4],S.huffmanTableAC=m[15&Y],R.push(S)}var j=r[c++],B=r[c++],X=r[c++],E=h(r,c,s,R,i,j,B,X>>4,15&X);c+=E;break;case 65535:255!==r[c]&&c--;break;default:if(255==r[c-3]&&r[c-2]>=192&&r[c-2]<=254){c-=3;break}throw"unknown JPEG marker "+d.toString(16)}d=o()}switch(this.width=s.samplesPerLine,this.height=s.scanLines,this.jfif=l,this.adobe=u,this.components=[],s.components.length){case 1:this.colorspace=n.Grayscale;break;case 3:this.adobe?this.colorspace=n.AdobeRGB:this.colorspace=n.RGB;break;case 4:this.colorspace=n.CYMK;break;default:this.colorspace=n.Unknown}for(var J=0;J<s.components.length;J++){var S;(S=s.components[J]).quantizationTable||null===S.quantizationTableId||(S.quantizationTable=b[S.quantizationTableId]),this.components.push({output:v(0,S),scaleX:S.h/s.maxH,scaleY:S.v/s.maxV,blocksPerLine:S.blocksPerLine,blocksPerColumn:S.blocksPerColumn,bitConversion:S.bitConversion})}},getData16:function(e,r){if(1!==this.components.length)throw"Unsupported color mode";var n,o,a,t,s,i,c=this.width/e,l=this.height/r,f=0,h=this.components.length,b=new Uint16Array(e*r*h),v=new Uint16Array((this.components[0].blocksPerLine<<3)*this.components[0].blocksPerColumn*8);for(i=0;i<h;i++){for(var m,p,d,k=(n=this.components[i]).blocksPerLine,w=n.blocksPerColumn,C=k<<3,P=0,g=0;g<w;g++)for(var y=g<<3,D=0;D<k;D++){var L=u(n,g,D),x=(f=0,D<<3);for(m=0;m<8;m++){P=(y+m)*C;for(p=0;p<8;p++)v[P+x+p]=n.output[L+f++]}}for(o=n.scaleX*c,a=n.scaleY*l,f=i,s=0;s<r;s++)for(t=0;t<e;t++)d=(0|s*a)*C+(0|t*o),b[f]=v[d],f+=h}return b},getData:function(e,r){var n,o,a,t,s,i,c,l,f,h,b,v,p,d,k,w=this.width/e,C=this.height/r,P=0,g=this.components.length,y=e*r*g,D=new Uint8Array(y),L=new Uint8Array((this.components[0].blocksPerLine<<3)*this.components[0].blocksPerColumn*8);for(i=0;i<g;i++){for(var x,T,A,U=(n=this.components[i]).blocksPerLine,I=n.blocksPerColumn,q=U<<3,G=0,M=0;M<I;M++)for(var z=M<<3,H=0;H<U;H++){var O=u(n,M,H),R=(P=0,H<<3);for(x=0;x<8;x++){G=(z+x)*q;for(T=0;T<8;T++)L[G+R+T]=n.output[O+P++]*n.bitConversion}}for(o=n.scaleX*w,a=n.scaleY*C,P=i,s=0;s<r;s++)for(t=0;t<e;t++)A=(0|s*a)*q+(0|t*o),D[P]=L[A],P+=g}switch(g){case 1:case 2:break;case 3:if(k=!0,this.adobe&&this.adobe.transformCode?k=!0:void 0!==this.colorTransform&&(k=!!this.colorTransform),k)for(i=0;i<y;i+=g)c=D[i],l=D[i+1],v=m(c-179.456+1.402*(f=D[i+2])),p=m(c+135.459-.344*l-.714*f),d=m(c-226.816+1.772*l),D[i]=v,D[i+1]=p,D[i+2]=d;break;case 4:if(!this.adobe)throw"Unsupported color mode (4 components)";if(k=!1,this.adobe&&this.adobe.transformCode?k=!0:void 0!==this.colorTransform&&(k=!!this.colorTransform),k)for(i=0;i<y;i+=g)c=D[i],l=D[i+1],h=m(434.456-c-1.402*(f=D[i+2])),b=m(119.541-c+.344*l+.714*f),c=m(481.816-c-1.772*l),D[i]=h,D[i+1]=b,D[i+2]=c;break;default:throw"Unsupported color mode"}return D}}),p}();e.exports={JpegImage:o}}}]);
2
2
  //# sourceMappingURL=945.min.worker.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"945.min.worker.js","mappings":"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","sources":["webpack:///../codecs/jpeg.js"],"sourcesContent":["// jshint ignore: start\n/* eslint-disable */\n\n/*\n Copyright 2011 notmasteryet\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n */\n\n// - The JPEG specification can be found in the ITU CCITT Recommendation T.81\n// (www.w3.org/Graphics/JPEG/itu-t81.pdf)\n// - The JFIF specification can be found in the JPEG File Interchange Format\n// (www.w3.org/Graphics/JPEG/jfif3.pdf)\n// - The Adobe Application-Specific JPEG markers in the Supporting the DCT Filters\n// in PostScript Level 2, Technical Note #5116\n// (partners.adobe.com/public/developer/en/ps/sdk/5116.DCT_Filter.pdf)\n\nvar ColorSpace = { Unkown: 0, Grayscale: 1, AdobeRGB: 2, RGB: 3, CYMK: 4 };\nvar JpegImage = (function jpegImage() {\n 'use strict';\n var dctZigZag = new Int32Array([\n 0, 1, 8, 16, 9, 2, 3, 10, 17, 24, 32, 25, 18, 11, 4, 5, 12, 19, 26, 33, 40,\n 48, 41, 34, 27, 20, 13, 6, 7, 14, 21, 28, 35, 42, 49, 56, 57, 50, 43, 36,\n 29, 22, 15, 23, 30, 37, 44, 51, 58, 59, 52, 45, 38, 31, 39, 46, 53, 60, 61,\n 54, 47, 55, 62, 63,\n ]);\n\n var dctCos1 = 4017; // cos(pi/16)\n var dctSin1 = 799; // sin(pi/16)\n var dctCos3 = 3406; // cos(3*pi/16)\n var dctSin3 = 2276; // sin(3*pi/16)\n var dctCos6 = 1567; // cos(6*pi/16)\n var dctSin6 = 3784; // sin(6*pi/16)\n var dctSqrt2 = 5793; // sqrt(2)\n var dctSqrt1d2 = 2896; // sqrt(2) / 2\n\n function buildHuffmanTable(codeLengths, values) {\n var k = 0,\n code = [],\n i,\n j,\n length = 16;\n while (length > 0 && !codeLengths[length - 1]) length--;\n code.push({ children: [], index: 0 });\n var p = code[0],\n q;\n for (i = 0; i < length; i++) {\n for (j = 0; j < codeLengths[i]; j++) {\n p = code.pop();\n p.children[p.index] = values[k];\n while (p.index > 0) {\n p = code.pop();\n }\n p.index++;\n code.push(p);\n while (code.length <= i) {\n code.push((q = { children: [], index: 0 }));\n p.children[p.index] = q.children;\n p = q;\n }\n k++;\n }\n if (i + 1 < length) {\n // p here points to last code\n code.push((q = { children: [], index: 0 }));\n p.children[p.index] = q.children;\n p = q;\n }\n }\n return code[0].children;\n }\n\n function getBlockBufferOffset(component, row, col) {\n return 64 * ((component.blocksPerLine + 1) * row + col);\n }\n\n function decodeScan(\n data,\n offset,\n frame,\n components,\n resetInterval,\n spectralStart,\n spectralEnd,\n successivePrev,\n successive\n ) {\n var precision = frame.precision;\n var samplesPerLine = frame.samplesPerLine;\n var scanLines = frame.scanLines;\n var mcusPerLine = frame.mcusPerLine;\n var progressive = frame.progressive;\n var maxH = frame.maxH,\n maxV = frame.maxV;\n\n var startOffset = offset,\n bitsData = 0,\n bitsCount = 0;\n\n function readBit() {\n if (bitsCount > 0) {\n bitsCount--;\n return (bitsData >> bitsCount) & 1;\n }\n bitsData = data[offset++];\n if (bitsData == 0xff) {\n var nextByte = data[offset++];\n if (nextByte) {\n throw (\n 'unexpected marker: ' + ((bitsData << 8) | nextByte).toString(16)\n );\n }\n // unstuff 0\n }\n bitsCount = 7;\n return bitsData >>> 7;\n }\n\n function decodeHuffman(tree) {\n var node = tree;\n var bit;\n while ((bit = readBit()) !== null) {\n node = node[bit];\n if (typeof node === 'number') return node;\n if (typeof node !== 'object') throw 'invalid huffman sequence';\n }\n return null;\n }\n\n function receive(length) {\n var n = 0;\n while (length > 0) {\n var bit = readBit();\n if (bit === null) return;\n n = (n << 1) | bit;\n length--;\n }\n return n;\n }\n\n function receiveAndExtend(length) {\n var n = receive(length);\n if (n >= 1 << (length - 1)) return n;\n return n + (-1 << length) + 1;\n }\n\n function decodeBaseline(component, offset) {\n var t = decodeHuffman(component.huffmanTableDC);\n var diff = t === 0 ? 0 : receiveAndExtend(t);\n component.blockData[offset] = component.pred += diff;\n var k = 1;\n while (k < 64) {\n var rs = decodeHuffman(component.huffmanTableAC);\n var s = rs & 15,\n r = rs >> 4;\n if (s === 0) {\n if (r < 15) break;\n k += 16;\n continue;\n }\n k += r;\n var z = dctZigZag[k];\n component.blockData[offset + z] = receiveAndExtend(s);\n k++;\n }\n }\n\n function decodeDCFirst(component, offset) {\n var t = decodeHuffman(component.huffmanTableDC);\n var diff = t === 0 ? 0 : receiveAndExtend(t) << successive;\n component.blockData[offset] = component.pred += diff;\n }\n\n function decodeDCSuccessive(component, offset) {\n component.blockData[offset] |= readBit() << successive;\n }\n\n var eobrun = 0;\n function decodeACFirst(component, offset) {\n if (eobrun > 0) {\n eobrun--;\n return;\n }\n var k = spectralStart,\n e = spectralEnd;\n while (k <= e) {\n var rs = decodeHuffman(component.huffmanTableAC);\n var s = rs & 15,\n r = rs >> 4;\n if (s === 0) {\n if (r < 15) {\n eobrun = receive(r) + (1 << r) - 1;\n break;\n }\n k += 16;\n continue;\n }\n k += r;\n var z = dctZigZag[k];\n component.blockData[offset + z] =\n receiveAndExtend(s) * (1 << successive);\n k++;\n }\n }\n\n var successiveACState = 0,\n successiveACNextValue;\n function decodeACSuccessive(component, offset) {\n var k = spectralStart,\n e = spectralEnd,\n r = 0;\n while (k <= e) {\n var z = dctZigZag[k];\n switch (successiveACState) {\n case 0: // initial state\n var rs = decodeHuffman(component.huffmanTableAC);\n var s = rs & 15;\n r = rs >> 4;\n if (s === 0) {\n if (r < 15) {\n eobrun = receive(r) + (1 << r);\n successiveACState = 4;\n } else {\n r = 16;\n successiveACState = 1;\n }\n } else {\n if (s !== 1) throw 'invalid ACn encoding';\n successiveACNextValue = receiveAndExtend(s);\n successiveACState = r ? 2 : 3;\n }\n continue;\n case 1: // skipping r zero items\n case 2:\n if (component.blockData[offset + z]) {\n component.blockData[offset + z] += readBit() << successive;\n } else {\n r--;\n if (r === 0) successiveACState = successiveACState == 2 ? 3 : 0;\n }\n break;\n case 3: // set value for a zero item\n if (component.blockData[offset + z]) {\n component.blockData[offset + z] += readBit() << successive;\n } else {\n component.blockData[offset + z] =\n successiveACNextValue << successive;\n successiveACState = 0;\n }\n break;\n case 4: // eob\n if (component.blockData[offset + z]) {\n component.blockData[offset + z] += readBit() << successive;\n }\n break;\n }\n k++;\n }\n if (successiveACState === 4) {\n eobrun--;\n if (eobrun === 0) successiveACState = 0;\n }\n }\n\n function decodeMcu(component, decode, mcu, row, col) {\n var mcuRow = (mcu / mcusPerLine) | 0;\n var mcuCol = mcu % mcusPerLine;\n var blockRow = mcuRow * component.v + row;\n var blockCol = mcuCol * component.h + col;\n var offset = getBlockBufferOffset(component, blockRow, blockCol);\n decode(component, offset);\n }\n\n function decodeBlock(component, decode, mcu) {\n var blockRow = (mcu / component.blocksPerLine) | 0;\n var blockCol = mcu % component.blocksPerLine;\n var offset = getBlockBufferOffset(component, blockRow, blockCol);\n decode(component, offset);\n }\n\n var componentsLength = components.length;\n var component, i, j, k, n;\n var decodeFn;\n if (progressive) {\n if (spectralStart === 0)\n decodeFn = successivePrev === 0 ? decodeDCFirst : decodeDCSuccessive;\n else decodeFn = successivePrev === 0 ? decodeACFirst : decodeACSuccessive;\n } else {\n decodeFn = decodeBaseline;\n }\n\n var mcu = 0,\n marker;\n var mcuExpected;\n if (componentsLength == 1) {\n mcuExpected = components[0].blocksPerLine * components[0].blocksPerColumn;\n } else {\n mcuExpected = mcusPerLine * frame.mcusPerColumn;\n }\n if (!resetInterval) {\n resetInterval = mcuExpected;\n }\n\n var h, v;\n while (mcu < mcuExpected) {\n // reset interval stuff\n for (i = 0; i < componentsLength; i++) {\n components[i].pred = 0;\n }\n eobrun = 0;\n\n if (componentsLength == 1) {\n component = components[0];\n for (n = 0; n < resetInterval; n++) {\n decodeBlock(component, decodeFn, mcu);\n mcu++;\n }\n } else {\n for (n = 0; n < resetInterval; n++) {\n for (i = 0; i < componentsLength; i++) {\n component = components[i];\n h = component.h;\n v = component.v;\n for (j = 0; j < v; j++) {\n for (k = 0; k < h; k++) {\n decodeMcu(component, decodeFn, mcu, j, k);\n }\n }\n }\n mcu++;\n }\n }\n\n // find marker\n bitsCount = 0;\n marker = (data[offset] << 8) | data[offset + 1];\n if (marker <= 0xff00) {\n throw 'marker was not found';\n }\n\n if (marker >= 0xffd0 && marker <= 0xffd7) {\n // RSTx\n offset += 2;\n } else {\n break;\n }\n }\n\n return offset - startOffset;\n }\n\n // A port of poppler's IDCT method which in turn is taken from:\n // Christoph Loeffler, Adriaan Ligtenberg, George S. Moschytz,\n // \"Practical Fast 1-D DCT Algorithms with 11 Multiplications\",\n // IEEE Intl. Conf. on Acoustics, Speech & Signal Processing, 1989,\n // 988-991.\n function quantizeAndInverse(component, blockBufferOffset, p) {\n var qt = component.quantizationTable;\n var v0, v1, v2, v3, v4, v5, v6, v7, t;\n var i;\n\n // dequant\n for (i = 0; i < 64; i++) {\n p[i] = component.blockData[blockBufferOffset + i] * qt[i];\n }\n\n // inverse DCT on rows\n for (i = 0; i < 8; ++i) {\n var row = 8 * i;\n\n // check for all-zero AC coefficients\n if (\n p[1 + row] === 0 &&\n p[2 + row] === 0 &&\n p[3 + row] === 0 &&\n p[4 + row] === 0 &&\n p[5 + row] === 0 &&\n p[6 + row] === 0 &&\n p[7 + row] === 0\n ) {\n t = (dctSqrt2 * p[0 + row] + 512) >> 10;\n p[0 + row] = t;\n p[1 + row] = t;\n p[2 + row] = t;\n p[3 + row] = t;\n p[4 + row] = t;\n p[5 + row] = t;\n p[6 + row] = t;\n p[7 + row] = t;\n continue;\n }\n\n // stage 4\n v0 = (dctSqrt2 * p[0 + row] + 128) >> 8;\n v1 = (dctSqrt2 * p[4 + row] + 128) >> 8;\n v2 = p[2 + row];\n v3 = p[6 + row];\n v4 = (dctSqrt1d2 * (p[1 + row] - p[7 + row]) + 128) >> 8;\n v7 = (dctSqrt1d2 * (p[1 + row] + p[7 + row]) + 128) >> 8;\n v5 = p[3 + row] << 4;\n v6 = p[5 + row] << 4;\n\n // stage 3\n t = (v0 - v1 + 1) >> 1;\n v0 = (v0 + v1 + 1) >> 1;\n v1 = t;\n t = (v2 * dctSin6 + v3 * dctCos6 + 128) >> 8;\n v2 = (v2 * dctCos6 - v3 * dctSin6 + 128) >> 8;\n v3 = t;\n t = (v4 - v6 + 1) >> 1;\n v4 = (v4 + v6 + 1) >> 1;\n v6 = t;\n t = (v7 + v5 + 1) >> 1;\n v5 = (v7 - v5 + 1) >> 1;\n v7 = t;\n\n // stage 2\n t = (v0 - v3 + 1) >> 1;\n v0 = (v0 + v3 + 1) >> 1;\n v3 = t;\n t = (v1 - v2 + 1) >> 1;\n v1 = (v1 + v2 + 1) >> 1;\n v2 = t;\n t = (v4 * dctSin3 + v7 * dctCos3 + 2048) >> 12;\n v4 = (v4 * dctCos3 - v7 * dctSin3 + 2048) >> 12;\n v7 = t;\n t = (v5 * dctSin1 + v6 * dctCos1 + 2048) >> 12;\n v5 = (v5 * dctCos1 - v6 * dctSin1 + 2048) >> 12;\n v6 = t;\n\n // stage 1\n p[0 + row] = v0 + v7;\n p[7 + row] = v0 - v7;\n p[1 + row] = v1 + v6;\n p[6 + row] = v1 - v6;\n p[2 + row] = v2 + v5;\n p[5 + row] = v2 - v5;\n p[3 + row] = v3 + v4;\n p[4 + row] = v3 - v4;\n }\n\n // inverse DCT on columns\n for (i = 0; i < 8; ++i) {\n var col = i;\n\n // check for all-zero AC coefficients\n if (\n p[1 * 8 + col] === 0 &&\n p[2 * 8 + col] === 0 &&\n p[3 * 8 + col] === 0 &&\n p[4 * 8 + col] === 0 &&\n p[5 * 8 + col] === 0 &&\n p[6 * 8 + col] === 0 &&\n p[7 * 8 + col] === 0\n ) {\n t = (dctSqrt2 * p[i + 0] + 8192) >> 14;\n p[0 * 8 + col] = t;\n p[1 * 8 + col] = t;\n p[2 * 8 + col] = t;\n p[3 * 8 + col] = t;\n p[4 * 8 + col] = t;\n p[5 * 8 + col] = t;\n p[6 * 8 + col] = t;\n p[7 * 8 + col] = t;\n continue;\n }\n\n // stage 4\n v0 = (dctSqrt2 * p[0 * 8 + col] + 2048) >> 12;\n v1 = (dctSqrt2 * p[4 * 8 + col] + 2048) >> 12;\n v2 = p[2 * 8 + col];\n v3 = p[6 * 8 + col];\n v4 = (dctSqrt1d2 * (p[1 * 8 + col] - p[7 * 8 + col]) + 2048) >> 12;\n v7 = (dctSqrt1d2 * (p[1 * 8 + col] + p[7 * 8 + col]) + 2048) >> 12;\n v5 = p[3 * 8 + col];\n v6 = p[5 * 8 + col];\n\n // stage 3\n t = (v0 - v1 + 1) >> 1;\n v0 = (v0 + v1 + 1) >> 1;\n v1 = t;\n t = (v2 * dctSin6 + v3 * dctCos6 + 2048) >> 12;\n v2 = (v2 * dctCos6 - v3 * dctSin6 + 2048) >> 12;\n v3 = t;\n t = (v4 - v6 + 1) >> 1;\n v4 = (v4 + v6 + 1) >> 1;\n v6 = t;\n t = (v7 + v5 + 1) >> 1;\n v5 = (v7 - v5 + 1) >> 1;\n v7 = t;\n\n // stage 2\n t = (v0 - v3 + 1) >> 1;\n v0 = (v0 + v3 + 1) >> 1;\n v3 = t;\n t = (v1 - v2 + 1) >> 1;\n v1 = (v1 + v2 + 1) >> 1;\n v2 = t;\n t = (v4 * dctSin3 + v7 * dctCos3 + 2048) >> 12;\n v4 = (v4 * dctCos3 - v7 * dctSin3 + 2048) >> 12;\n v7 = t;\n t = (v5 * dctSin1 + v6 * dctCos1 + 2048) >> 12;\n v5 = (v5 * dctCos1 - v6 * dctSin1 + 2048) >> 12;\n v6 = t;\n\n // stage 1\n p[0 * 8 + col] = v0 + v7;\n p[7 * 8 + col] = v0 - v7;\n p[1 * 8 + col] = v1 + v6;\n p[6 * 8 + col] = v1 - v6;\n p[2 * 8 + col] = v2 + v5;\n p[5 * 8 + col] = v2 - v5;\n p[3 * 8 + col] = v3 + v4;\n p[4 * 8 + col] = v3 - v4;\n }\n\n // convert to 8-bit integers\n for (i = 0; i < 64; ++i) {\n var index = blockBufferOffset + i;\n var q = p[i];\n q =\n q <= -2056 / component.bitConversion\n ? 0\n : q >= 2024 / component.bitConversion\n ? 255 / component.bitConversion\n : (q + 2056 / component.bitConversion) >> 4;\n component.blockData[index] = q;\n }\n }\n\n function buildComponentData(frame, component) {\n var lines = [];\n var blocksPerLine = component.blocksPerLine;\n var blocksPerColumn = component.blocksPerColumn;\n var samplesPerLine = blocksPerLine << 3;\n var computationBuffer = new Int32Array(64);\n\n var i,\n j,\n ll = 0;\n for (var blockRow = 0; blockRow < blocksPerColumn; blockRow++) {\n for (var blockCol = 0; blockCol < blocksPerLine; blockCol++) {\n var offset = getBlockBufferOffset(component, blockRow, blockCol);\n quantizeAndInverse(component, offset, computationBuffer);\n }\n }\n return component.blockData;\n }\n\n function clampToUint8(a) {\n return a <= 0 ? 0 : a >= 255 ? 255 : a | 0;\n }\n\n constructor.prototype = {\n load: function load(path) {\n var handleData = function (data) {\n this.parse(data);\n if (this.onload) this.onload();\n }.bind(this);\n\n if (path.indexOf('data:') > -1) {\n var offset = path.indexOf('base64,') + 7;\n var data = atob(path.substring(offset));\n var arr = new Uint8Array(data.length);\n for (var i = data.length - 1; i >= 0; i--) {\n arr[i] = data.charCodeAt(i);\n }\n handleData(data);\n } else {\n var xhr = new XMLHttpRequest();\n xhr.open('GET', path, true);\n xhr.responseType = 'arraybuffer';\n xhr.onload = function () {\n // TODO catch parse error\n var data = new Uint8Array(xhr.response);\n handleData(data);\n }.bind(this);\n xhr.send(null);\n }\n },\n parse: function parse(data) {\n function readUint16() {\n var value = (data[offset] << 8) | data[offset + 1];\n offset += 2;\n return value;\n }\n\n function readDataBlock() {\n var length = readUint16();\n var array = data.subarray(offset, offset + length - 2);\n offset += array.length;\n return array;\n }\n\n function prepareComponents(frame) {\n var mcusPerLine = Math.ceil(frame.samplesPerLine / 8 / frame.maxH);\n var mcusPerColumn = Math.ceil(frame.scanLines / 8 / frame.maxV);\n for (var i = 0; i < frame.components.length; i++) {\n component = frame.components[i];\n var blocksPerLine = Math.ceil(\n (Math.ceil(frame.samplesPerLine / 8) * component.h) / frame.maxH\n );\n var blocksPerColumn = Math.ceil(\n (Math.ceil(frame.scanLines / 8) * component.v) / frame.maxV\n );\n var blocksPerLineForMcu = mcusPerLine * component.h;\n var blocksPerColumnForMcu = mcusPerColumn * component.v;\n\n var blocksBufferSize =\n 64 * blocksPerColumnForMcu * (blocksPerLineForMcu + 1);\n component.blockData = new Int16Array(blocksBufferSize);\n component.blocksPerLine = blocksPerLine;\n component.blocksPerColumn = blocksPerColumn;\n }\n frame.mcusPerLine = mcusPerLine;\n frame.mcusPerColumn = mcusPerColumn;\n }\n\n var offset = 0,\n length = data.length;\n var jfif = null;\n var adobe = null;\n var pixels = null;\n var frame, resetInterval;\n var quantizationTables = [];\n var huffmanTablesAC = [],\n huffmanTablesDC = [];\n var fileMarker = readUint16();\n if (fileMarker != 0xffd8) {\n // SOI (Start of Image)\n throw 'SOI not found';\n }\n\n fileMarker = readUint16();\n while (fileMarker != 0xffd9) {\n // EOI (End of image)\n var i, j, l;\n switch (fileMarker) {\n case 0xffe0: // APP0 (Application Specific)\n case 0xffe1: // APP1\n case 0xffe2: // APP2\n case 0xffe3: // APP3\n case 0xffe4: // APP4\n case 0xffe5: // APP5\n case 0xffe6: // APP6\n case 0xffe7: // APP7\n case 0xffe8: // APP8\n case 0xffe9: // APP9\n case 0xffea: // APP10\n case 0xffeb: // APP11\n case 0xffec: // APP12\n case 0xffed: // APP13\n case 0xffee: // APP14\n case 0xffef: // APP15\n case 0xfffe: // COM (Comment)\n var appData = readDataBlock();\n\n if (fileMarker === 0xffe0) {\n if (\n appData[0] === 0x4a &&\n appData[1] === 0x46 &&\n appData[2] === 0x49 &&\n appData[3] === 0x46 &&\n appData[4] === 0\n ) {\n // 'JFIF\\x00'\n jfif = {\n version: { major: appData[5], minor: appData[6] },\n densityUnits: appData[7],\n xDensity: (appData[8] << 8) | appData[9],\n yDensity: (appData[10] << 8) | appData[11],\n thumbWidth: appData[12],\n thumbHeight: appData[13],\n thumbData: appData.subarray(\n 14,\n 14 + 3 * appData[12] * appData[13]\n ),\n };\n }\n }\n // TODO APP1 - Exif\n if (fileMarker === 0xffee) {\n if (\n appData[0] === 0x41 &&\n appData[1] === 0x64 &&\n appData[2] === 0x6f &&\n appData[3] === 0x62 &&\n appData[4] === 0x65 &&\n appData[5] === 0\n ) {\n // 'Adobe\\x00'\n adobe = {\n version: appData[6],\n flags0: (appData[7] << 8) | appData[8],\n flags1: (appData[9] << 8) | appData[10],\n transformCode: appData[11],\n };\n }\n }\n break;\n\n case 0xffdb: // DQT (Define Quantization Tables)\n var quantizationTablesLength = readUint16();\n var quantizationTablesEnd = quantizationTablesLength + offset - 2;\n while (offset < quantizationTablesEnd) {\n var quantizationTableSpec = data[offset++];\n var tableData = new Int32Array(64);\n if (quantizationTableSpec >> 4 === 0) {\n // 8 bit values\n for (j = 0; j < 64; j++) {\n var z = dctZigZag[j];\n tableData[z] = data[offset++];\n }\n } else if (quantizationTableSpec >> 4 === 1) {\n //16 bit\n for (j = 0; j < 64; j++) {\n var zz = dctZigZag[j];\n tableData[zz] = readUint16();\n }\n } else throw 'DQT: invalid table spec';\n quantizationTables[quantizationTableSpec & 15] = tableData;\n }\n break;\n\n case 0xffc0: // SOF0 (Start of Frame, Baseline DCT)\n case 0xffc1: // SOF1 (Start of Frame, Extended DCT)\n case 0xffc2: // SOF2 (Start of Frame, Progressive DCT)\n if (frame) {\n throw 'Only single frame JPEGs supported';\n }\n readUint16(); // skip data length\n frame = {};\n frame.extended = fileMarker === 0xffc1;\n frame.progressive = fileMarker === 0xffc2;\n frame.precision = data[offset++];\n frame.scanLines = readUint16();\n frame.samplesPerLine = readUint16();\n frame.components = [];\n frame.componentIds = {};\n var componentsCount = data[offset++],\n componentId;\n var maxH = 0,\n maxV = 0;\n for (i = 0; i < componentsCount; i++) {\n componentId = data[offset];\n var h = data[offset + 1] >> 4;\n var v = data[offset + 1] & 15;\n if (maxH < h) maxH = h;\n if (maxV < v) maxV = v;\n var qId = data[offset + 2];\n l = frame.components.push({\n h: h,\n v: v,\n quantizationTable: quantizationTables[qId],\n quantizationTableId: qId,\n bitConversion: 255 / ((1 << frame.precision) - 1),\n });\n frame.componentIds[componentId] = l - 1;\n offset += 3;\n }\n frame.maxH = maxH;\n frame.maxV = maxV;\n prepareComponents(frame);\n break;\n\n case 0xffc4: // DHT (Define Huffman Tables)\n var huffmanLength = readUint16();\n for (i = 2; i < huffmanLength; ) {\n var huffmanTableSpec = data[offset++];\n var codeLengths = new Uint8Array(16);\n var codeLengthSum = 0;\n for (j = 0; j < 16; j++, offset++)\n codeLengthSum += codeLengths[j] = data[offset];\n var huffmanValues = new Uint8Array(codeLengthSum);\n for (j = 0; j < codeLengthSum; j++, offset++)\n huffmanValues[j] = data[offset];\n i += 17 + codeLengthSum;\n\n (huffmanTableSpec >> 4 === 0 ? huffmanTablesDC : huffmanTablesAC)[\n huffmanTableSpec & 15\n ] = buildHuffmanTable(codeLengths, huffmanValues);\n }\n break;\n\n case 0xffdd: // DRI (Define Restart Interval)\n readUint16(); // skip data length\n resetInterval = readUint16();\n break;\n\n case 0xffda: // SOS (Start of Scan)\n var scanLength = readUint16();\n var selectorsCount = data[offset++];\n var components = [],\n component;\n for (i = 0; i < selectorsCount; i++) {\n var componentIndex = frame.componentIds[data[offset++]];\n component = frame.components[componentIndex];\n var tableSpec = data[offset++];\n component.huffmanTableDC = huffmanTablesDC[tableSpec >> 4];\n component.huffmanTableAC = huffmanTablesAC[tableSpec & 15];\n components.push(component);\n }\n var spectralStart = data[offset++];\n var spectralEnd = data[offset++];\n var successiveApproximation = data[offset++];\n var processed = decodeScan(\n data,\n offset,\n frame,\n components,\n resetInterval,\n spectralStart,\n spectralEnd,\n successiveApproximation >> 4,\n successiveApproximation & 15\n );\n offset += processed;\n break;\n case 0xffff: // Fill bytes\n if (data[offset] !== 0xff) {\n // Avoid skipping a valid marker.\n offset--;\n }\n break;\n default:\n if (\n data[offset - 3] == 0xff &&\n data[offset - 2] >= 0xc0 &&\n data[offset - 2] <= 0xfe\n ) {\n // could be incorrect encoding -- last 0xFF byte of the previous\n // block was eaten by the encoder\n offset -= 3;\n break;\n }\n throw 'unknown JPEG marker ' + fileMarker.toString(16);\n }\n fileMarker = readUint16();\n }\n\n this.width = frame.samplesPerLine;\n this.height = frame.scanLines;\n this.jfif = jfif;\n this.adobe = adobe;\n this.components = [];\n switch (frame.components.length) {\n case 1:\n this.colorspace = ColorSpace.Grayscale;\n break;\n case 3:\n if (this.adobe) this.colorspace = ColorSpace.AdobeRGB;\n else this.colorspace = ColorSpace.RGB;\n break;\n case 4:\n this.colorspace = ColorSpace.CYMK;\n break;\n default:\n this.colorspace = ColorSpace.Unknown;\n }\n for (var i = 0; i < frame.components.length; i++) {\n var component = frame.components[i];\n if (\n !component.quantizationTable &&\n component.quantizationTableId !== null\n )\n component.quantizationTable =\n quantizationTables[component.quantizationTableId];\n this.components.push({\n output: buildComponentData(frame, component),\n scaleX: component.h / frame.maxH,\n scaleY: component.v / frame.maxV,\n blocksPerLine: component.blocksPerLine,\n blocksPerColumn: component.blocksPerColumn,\n bitConversion: component.bitConversion,\n });\n }\n },\n getData16: function getData16(width, height) {\n if (this.components.length !== 1) throw 'Unsupported color mode';\n var scaleX = this.width / width,\n scaleY = this.height / height;\n\n var component, componentScaleX, componentScaleY;\n var x, y, i;\n var offset = 0;\n var numComponents = this.components.length;\n var dataLength = width * height * numComponents;\n var data = new Uint16Array(dataLength);\n var componentLine;\n\n // lineData is reused for all components. Assume first component is\n // the biggest\n var lineData = new Uint16Array(\n (this.components[0].blocksPerLine << 3) *\n this.components[0].blocksPerColumn *\n 8\n );\n\n // First construct image data ...\n for (i = 0; i < numComponents; i++) {\n component = this.components[i];\n var blocksPerLine = component.blocksPerLine;\n var blocksPerColumn = component.blocksPerColumn;\n var samplesPerLine = blocksPerLine << 3;\n\n var j,\n k,\n ll = 0;\n var lineOffset = 0;\n for (var blockRow = 0; blockRow < blocksPerColumn; blockRow++) {\n var scanLine = blockRow << 3;\n for (var blockCol = 0; blockCol < blocksPerLine; blockCol++) {\n var bufferOffset = getBlockBufferOffset(\n component,\n blockRow,\n blockCol\n );\n var offset = 0,\n sample = blockCol << 3;\n for (j = 0; j < 8; j++) {\n var lineOffset = (scanLine + j) * samplesPerLine;\n for (k = 0; k < 8; k++) {\n lineData[lineOffset + sample + k] =\n component.output[bufferOffset + offset++];\n }\n }\n }\n }\n\n componentScaleX = component.scaleX * scaleX;\n componentScaleY = component.scaleY * scaleY;\n offset = i;\n\n var cx, cy;\n var index;\n for (y = 0; y < height; y++) {\n for (x = 0; x < width; x++) {\n cy = 0 | (y * componentScaleY);\n cx = 0 | (x * componentScaleX);\n index = cy * samplesPerLine + cx;\n data[offset] = lineData[index];\n offset += numComponents;\n }\n }\n }\n return data;\n },\n getData: function getData(width, height) {\n var scaleX = this.width / width,\n scaleY = this.height / height;\n\n var component, componentScaleX, componentScaleY;\n var x, y, i;\n var offset = 0;\n var Y, Cb, Cr, K, C, M, Ye, R, G, B;\n var colorTransform;\n var numComponents = this.components.length;\n var dataLength = width * height * numComponents;\n var data = new Uint8Array(dataLength);\n var componentLine;\n\n // lineData is reused for all components. Assume first component is\n // the biggest\n var lineData = new Uint8Array(\n (this.components[0].blocksPerLine << 3) *\n this.components[0].blocksPerColumn *\n 8\n );\n\n // First construct image data ...\n for (i = 0; i < numComponents; i++) {\n component = this.components[i];\n var blocksPerLine = component.blocksPerLine;\n var blocksPerColumn = component.blocksPerColumn;\n var samplesPerLine = blocksPerLine << 3;\n\n var j,\n k,\n ll = 0;\n var lineOffset = 0;\n for (var blockRow = 0; blockRow < blocksPerColumn; blockRow++) {\n var scanLine = blockRow << 3;\n for (var blockCol = 0; blockCol < blocksPerLine; blockCol++) {\n var bufferOffset = getBlockBufferOffset(\n component,\n blockRow,\n blockCol\n );\n var offset = 0,\n sample = blockCol << 3;\n for (j = 0; j < 8; j++) {\n var lineOffset = (scanLine + j) * samplesPerLine;\n for (k = 0; k < 8; k++) {\n lineData[lineOffset + sample + k] =\n component.output[bufferOffset + offset++] *\n component.bitConversion;\n }\n }\n }\n }\n\n componentScaleX = component.scaleX * scaleX;\n componentScaleY = component.scaleY * scaleY;\n offset = i;\n\n var cx, cy;\n var index;\n for (y = 0; y < height; y++) {\n for (x = 0; x < width; x++) {\n cy = 0 | (y * componentScaleY);\n cx = 0 | (x * componentScaleX);\n index = cy * samplesPerLine + cx;\n data[offset] = lineData[index];\n offset += numComponents;\n }\n }\n }\n\n // ... then transform colors, if necessary\n switch (numComponents) {\n case 1:\n case 2:\n break;\n // no color conversion for one or two compoenents\n\n case 3:\n // The default transform for three components is true\n colorTransform = true;\n // The adobe transform marker overrides any previous setting\n if (this.adobe && this.adobe.transformCode) colorTransform = true;\n else if (typeof this.colorTransform !== 'undefined')\n colorTransform = !!this.colorTransform;\n\n if (colorTransform) {\n for (i = 0; i < dataLength; i += numComponents) {\n Y = data[i];\n Cb = data[i + 1];\n Cr = data[i + 2];\n\n R = clampToUint8(Y - 179.456 + 1.402 * Cr);\n G = clampToUint8(Y + 135.459 - 0.344 * Cb - 0.714 * Cr);\n B = clampToUint8(Y - 226.816 + 1.772 * Cb);\n\n data[i] = R;\n data[i + 1] = G;\n data[i + 2] = B;\n }\n }\n break;\n case 4:\n if (!this.adobe) throw 'Unsupported color mode (4 components)';\n // The default transform for four components is false\n colorTransform = false;\n // The adobe transform marker overrides any previous setting\n if (this.adobe && this.adobe.transformCode) colorTransform = true;\n else if (typeof this.colorTransform !== 'undefined')\n colorTransform = !!this.colorTransform;\n\n if (colorTransform) {\n for (i = 0; i < dataLength; i += numComponents) {\n Y = data[i];\n Cb = data[i + 1];\n Cr = data[i + 2];\n\n C = clampToUint8(434.456 - Y - 1.402 * Cr);\n M = clampToUint8(119.541 - Y + 0.344 * Cb + 0.714 * Cr);\n Y = clampToUint8(481.816 - Y - 1.772 * Cb);\n\n data[i] = C;\n data[i + 1] = M;\n data[i + 2] = Y;\n // K is unchanged\n }\n }\n break;\n default:\n throw 'Unsupported color mode';\n }\n return data;\n },\n };\n\n return constructor;\n})();\n\n/*** EXPORTS FROM exports-loader ***/\nmodule.exports = {\n JpegImage\n};\n"],"names":["ColorSpace","Unkown","Grayscale","AdobeRGB","RGB","CYMK","JpegImage","dctZigZag","Int32Array","dctCos1","dctSin1","dctCos3","dctSin3","dctCos6","dctSin6","dctSqrt2","dctSqrt1d2","buildHuffmanTable","codeLengths","values","i","j","k","code","length","push","children","index","q","p","pop","getBlockBufferOffset","component","row","col","blocksPerLine","decodeScan","data","offset","frame","components","resetInterval","spectralStart","spectralEnd","successivePrev","successive","precision","samplesPerLine","scanLines","mcusPerLine","progressive","startOffset","maxH","maxV","bitsData","bitsCount","readBit","nextByte","toString","decodeHuffman","tree","bit","node","receive","n","receiveAndExtend","eobrun","successiveACNextValue","successiveACState","decodeMcu","decode","mcu","mcuCol","v","h","decodeBlock","decodeFn","componentsLength","t","huffmanTableDC","diff","blockData","pred","e","rs","huffmanTableAC","s","r","z","marker","mcuExpected","blocksPerColumn","mcusPerColumn","quantizeAndInverse","blockBufferOffset","v0","v1","v2","v3","v4","v5","v6","v7","qt","quantizationTable","bitConversion","buildComponentData","computationBuffer","blockRow","blockCol","clampToUint8","a","constructor","prototype","load","path","handleData","this","parse","onload","bind","indexOf","atob","substring","arr","Uint8Array","charCodeAt","xhr","XMLHttpRequest","open","responseType","response","send","readUint16","value","readDataBlock","array","subarray","prepareComponents","Math","ceil","blocksPerLineForMcu","blocksBufferSize","Int16Array","jfif","adobe","quantizationTables","huffmanTablesAC","huffmanTablesDC","fileMarker","l","appData","version","major","minor","densityUnits","xDensity","yDensity","thumbWidth","thumbHeight","thumbData","flags0","flags1","transformCode","quantizationTablesEnd","quantizationTableSpec","tableData","extended","componentIds","componentId","componentsCount","qId","quantizationTableId","huffmanLength","huffmanTableSpec","codeLengthSum","huffmanValues","selectorsCount","componentIndex","tableSpec","successiveApproximation","processed","width","height","colorspace","Unknown","output","scaleX","scaleY","getData16","componentScaleX","componentScaleY","x","y","numComponents","Uint16Array","lineData","lineOffset","scanLine","bufferOffset","sample","getData","Y","Cb","Cr","C","M","R","G","B","colorTransform","dataLength","module","exports"],"sourceRoot":""}
1
+ {"version":3,"file":"945.min.worker.js","mappings":"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","sources":["webpack:///../codecs/jpeg.js"],"sourcesContent":["// jshint ignore: start\n/* eslint-disable */\n\n/*\n Copyright 2011 notmasteryet\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n */\n\n// - The JPEG specification can be found in the ITU CCITT Recommendation T.81\n// (www.w3.org/Graphics/JPEG/itu-t81.pdf)\n// - The JFIF specification can be found in the JPEG File Interchange Format\n// (www.w3.org/Graphics/JPEG/jfif3.pdf)\n// - The Adobe Application-Specific JPEG markers in the Supporting the DCT Filters\n// in PostScript Level 2, Technical Note #5116\n// (partners.adobe.com/public/developer/en/ps/sdk/5116.DCT_Filter.pdf)\n\nvar ColorSpace = { Unkown: 0, Grayscale: 1, AdobeRGB: 2, RGB: 3, CYMK: 4 };\nvar JpegImage = (function jpegImage() {\n 'use strict';\n var dctZigZag = new Int32Array([\n 0, 1, 8, 16, 9, 2, 3, 10, 17, 24, 32, 25, 18, 11, 4, 5, 12, 19, 26, 33, 40,\n 48, 41, 34, 27, 20, 13, 6, 7, 14, 21, 28, 35, 42, 49, 56, 57, 50, 43, 36,\n 29, 22, 15, 23, 30, 37, 44, 51, 58, 59, 52, 45, 38, 31, 39, 46, 53, 60, 61,\n 54, 47, 55, 62, 63,\n ]);\n\n var dctCos1 = 4017; // cos(pi/16)\n var dctSin1 = 799; // sin(pi/16)\n var dctCos3 = 3406; // cos(3*pi/16)\n var dctSin3 = 2276; // sin(3*pi/16)\n var dctCos6 = 1567; // cos(6*pi/16)\n var dctSin6 = 3784; // sin(6*pi/16)\n var dctSqrt2 = 5793; // sqrt(2)\n var dctSqrt1d2 = 2896; // sqrt(2) / 2\n\n function buildHuffmanTable(codeLengths, values) {\n var k = 0,\n code = [],\n i,\n j,\n length = 16;\n while (length > 0 && !codeLengths[length - 1]) length--;\n code.push({ children: [], index: 0 });\n var p = code[0],\n q;\n for (i = 0; i < length; i++) {\n for (j = 0; j < codeLengths[i]; j++) {\n p = code.pop();\n p.children[p.index] = values[k];\n while (p.index > 0) {\n p = code.pop();\n }\n p.index++;\n code.push(p);\n while (code.length <= i) {\n code.push((q = { children: [], index: 0 }));\n p.children[p.index] = q.children;\n p = q;\n }\n k++;\n }\n if (i + 1 < length) {\n // p here points to last code\n code.push((q = { children: [], index: 0 }));\n p.children[p.index] = q.children;\n p = q;\n }\n }\n return code[0].children;\n }\n\n function getBlockBufferOffset(component, row, col) {\n return 64 * ((component.blocksPerLine + 1) * row + col);\n }\n\n function decodeScan(\n data,\n offset,\n frame,\n components,\n resetInterval,\n spectralStart,\n spectralEnd,\n successivePrev,\n successive\n ) {\n var precision = frame.precision;\n var samplesPerLine = frame.samplesPerLine;\n var scanLines = frame.scanLines;\n var mcusPerLine = frame.mcusPerLine;\n var progressive = frame.progressive;\n var maxH = frame.maxH,\n maxV = frame.maxV;\n\n var startOffset = offset,\n bitsData = 0,\n bitsCount = 0;\n\n function readBit() {\n if (bitsCount > 0) {\n bitsCount--;\n return (bitsData >> bitsCount) & 1;\n }\n bitsData = data[offset++];\n if (bitsData == 0xff) {\n var nextByte = data[offset++];\n if (nextByte) {\n throw (\n 'unexpected marker: ' + ((bitsData << 8) | nextByte).toString(16)\n );\n }\n // unstuff 0\n }\n bitsCount = 7;\n return bitsData >>> 7;\n }\n\n function decodeHuffman(tree) {\n var node = tree;\n var bit;\n while ((bit = readBit()) !== null) {\n node = node[bit];\n if (typeof node === 'number') return node;\n if (typeof node !== 'object') throw 'invalid huffman sequence';\n }\n return null;\n }\n\n function receive(length) {\n var n = 0;\n while (length > 0) {\n var bit = readBit();\n if (bit === null) return;\n n = (n << 1) | bit;\n length--;\n }\n return n;\n }\n\n function receiveAndExtend(length) {\n var n = receive(length);\n if (n >= 1 << (length - 1)) return n;\n return n + (-1 << length) + 1;\n }\n\n function decodeBaseline(component, offset) {\n var t = decodeHuffman(component.huffmanTableDC);\n var diff = t === 0 ? 0 : receiveAndExtend(t);\n component.blockData[offset] = component.pred += diff;\n var k = 1;\n while (k < 64) {\n var rs = decodeHuffman(component.huffmanTableAC);\n var s = rs & 15,\n r = rs >> 4;\n if (s === 0) {\n if (r < 15) break;\n k += 16;\n continue;\n }\n k += r;\n var z = dctZigZag[k];\n component.blockData[offset + z] = receiveAndExtend(s);\n k++;\n }\n }\n\n function decodeDCFirst(component, offset) {\n var t = decodeHuffman(component.huffmanTableDC);\n var diff = t === 0 ? 0 : receiveAndExtend(t) << successive;\n component.blockData[offset] = component.pred += diff;\n }\n\n function decodeDCSuccessive(component, offset) {\n component.blockData[offset] |= readBit() << successive;\n }\n\n var eobrun = 0;\n function decodeACFirst(component, offset) {\n if (eobrun > 0) {\n eobrun--;\n return;\n }\n var k = spectralStart,\n e = spectralEnd;\n while (k <= e) {\n var rs = decodeHuffman(component.huffmanTableAC);\n var s = rs & 15,\n r = rs >> 4;\n if (s === 0) {\n if (r < 15) {\n eobrun = receive(r) + (1 << r) - 1;\n break;\n }\n k += 16;\n continue;\n }\n k += r;\n var z = dctZigZag[k];\n component.blockData[offset + z] =\n receiveAndExtend(s) * (1 << successive);\n k++;\n }\n }\n\n var successiveACState = 0,\n successiveACNextValue;\n function decodeACSuccessive(component, offset) {\n var k = spectralStart,\n e = spectralEnd,\n r = 0;\n while (k <= e) {\n var z = dctZigZag[k];\n switch (successiveACState) {\n case 0: // initial state\n var rs = decodeHuffman(component.huffmanTableAC);\n var s = rs & 15;\n r = rs >> 4;\n if (s === 0) {\n if (r < 15) {\n eobrun = receive(r) + (1 << r);\n successiveACState = 4;\n } else {\n r = 16;\n successiveACState = 1;\n }\n } else {\n if (s !== 1) throw 'invalid ACn encoding';\n successiveACNextValue = receiveAndExtend(s);\n successiveACState = r ? 2 : 3;\n }\n continue;\n case 1: // skipping r zero items\n case 2:\n if (component.blockData[offset + z]) {\n component.blockData[offset + z] += readBit() << successive;\n } else {\n r--;\n if (r === 0) successiveACState = successiveACState == 2 ? 3 : 0;\n }\n break;\n case 3: // set value for a zero item\n if (component.blockData[offset + z]) {\n component.blockData[offset + z] += readBit() << successive;\n } else {\n component.blockData[offset + z] =\n successiveACNextValue << successive;\n successiveACState = 0;\n }\n break;\n case 4: // eob\n if (component.blockData[offset + z]) {\n component.blockData[offset + z] += readBit() << successive;\n }\n break;\n }\n k++;\n }\n if (successiveACState === 4) {\n eobrun--;\n if (eobrun === 0) successiveACState = 0;\n }\n }\n\n function decodeMcu(component, decode, mcu, row, col) {\n var mcuRow = (mcu / mcusPerLine) | 0;\n var mcuCol = mcu % mcusPerLine;\n var blockRow = mcuRow * component.v + row;\n var blockCol = mcuCol * component.h + col;\n var offset = getBlockBufferOffset(component, blockRow, blockCol);\n decode(component, offset);\n }\n\n function decodeBlock(component, decode, mcu) {\n var blockRow = (mcu / component.blocksPerLine) | 0;\n var blockCol = mcu % component.blocksPerLine;\n var offset = getBlockBufferOffset(component, blockRow, blockCol);\n decode(component, offset);\n }\n\n var componentsLength = components.length;\n var component, i, j, k, n;\n var decodeFn;\n if (progressive) {\n if (spectralStart === 0)\n decodeFn = successivePrev === 0 ? decodeDCFirst : decodeDCSuccessive;\n else decodeFn = successivePrev === 0 ? decodeACFirst : decodeACSuccessive;\n } else {\n decodeFn = decodeBaseline;\n }\n\n var mcu = 0,\n marker;\n var mcuExpected;\n if (componentsLength == 1) {\n mcuExpected = components[0].blocksPerLine * components[0].blocksPerColumn;\n } else {\n mcuExpected = mcusPerLine * frame.mcusPerColumn;\n }\n if (!resetInterval) {\n resetInterval = mcuExpected;\n }\n\n var h, v;\n while (mcu < mcuExpected) {\n // reset interval stuff\n for (i = 0; i < componentsLength; i++) {\n components[i].pred = 0;\n }\n eobrun = 0;\n\n if (componentsLength == 1) {\n component = components[0];\n for (n = 0; n < resetInterval; n++) {\n decodeBlock(component, decodeFn, mcu);\n mcu++;\n }\n } else {\n for (n = 0; n < resetInterval; n++) {\n for (i = 0; i < componentsLength; i++) {\n component = components[i];\n h = component.h;\n v = component.v;\n for (j = 0; j < v; j++) {\n for (k = 0; k < h; k++) {\n decodeMcu(component, decodeFn, mcu, j, k);\n }\n }\n }\n mcu++;\n }\n }\n\n // find marker\n bitsCount = 0;\n marker = (data[offset] << 8) | data[offset + 1];\n if (marker <= 0xff00) {\n throw 'marker was not found';\n }\n\n if (marker >= 0xffd0 && marker <= 0xffd7) {\n // RSTx\n offset += 2;\n } else {\n break;\n }\n }\n\n return offset - startOffset;\n }\n\n // A port of poppler's IDCT method which in turn is taken from:\n // Christoph Loeffler, Adriaan Ligtenberg, George S. Moschytz,\n // \"Practical Fast 1-D DCT Algorithms with 11 Multiplications\",\n // IEEE Intl. Conf. on Acoustics, Speech & Signal Processing, 1989,\n // 988-991.\n function quantizeAndInverse(component, blockBufferOffset, p) {\n var qt = component.quantizationTable;\n var v0, v1, v2, v3, v4, v5, v6, v7, t;\n var i;\n\n // dequant\n for (i = 0; i < 64; i++) {\n p[i] = component.blockData[blockBufferOffset + i] * qt[i];\n }\n\n // inverse DCT on rows\n for (i = 0; i < 8; ++i) {\n var row = 8 * i;\n\n // check for all-zero AC coefficients\n if (\n p[1 + row] === 0 &&\n p[2 + row] === 0 &&\n p[3 + row] === 0 &&\n p[4 + row] === 0 &&\n p[5 + row] === 0 &&\n p[6 + row] === 0 &&\n p[7 + row] === 0\n ) {\n t = (dctSqrt2 * p[0 + row] + 512) >> 10;\n p[0 + row] = t;\n p[1 + row] = t;\n p[2 + row] = t;\n p[3 + row] = t;\n p[4 + row] = t;\n p[5 + row] = t;\n p[6 + row] = t;\n p[7 + row] = t;\n continue;\n }\n\n // stage 4\n v0 = (dctSqrt2 * p[0 + row] + 128) >> 8;\n v1 = (dctSqrt2 * p[4 + row] + 128) >> 8;\n v2 = p[2 + row];\n v3 = p[6 + row];\n v4 = (dctSqrt1d2 * (p[1 + row] - p[7 + row]) + 128) >> 8;\n v7 = (dctSqrt1d2 * (p[1 + row] + p[7 + row]) + 128) >> 8;\n v5 = p[3 + row] << 4;\n v6 = p[5 + row] << 4;\n\n // stage 3\n t = (v0 - v1 + 1) >> 1;\n v0 = (v0 + v1 + 1) >> 1;\n v1 = t;\n t = (v2 * dctSin6 + v3 * dctCos6 + 128) >> 8;\n v2 = (v2 * dctCos6 - v3 * dctSin6 + 128) >> 8;\n v3 = t;\n t = (v4 - v6 + 1) >> 1;\n v4 = (v4 + v6 + 1) >> 1;\n v6 = t;\n t = (v7 + v5 + 1) >> 1;\n v5 = (v7 - v5 + 1) >> 1;\n v7 = t;\n\n // stage 2\n t = (v0 - v3 + 1) >> 1;\n v0 = (v0 + v3 + 1) >> 1;\n v3 = t;\n t = (v1 - v2 + 1) >> 1;\n v1 = (v1 + v2 + 1) >> 1;\n v2 = t;\n t = (v4 * dctSin3 + v7 * dctCos3 + 2048) >> 12;\n v4 = (v4 * dctCos3 - v7 * dctSin3 + 2048) >> 12;\n v7 = t;\n t = (v5 * dctSin1 + v6 * dctCos1 + 2048) >> 12;\n v5 = (v5 * dctCos1 - v6 * dctSin1 + 2048) >> 12;\n v6 = t;\n\n // stage 1\n p[0 + row] = v0 + v7;\n p[7 + row] = v0 - v7;\n p[1 + row] = v1 + v6;\n p[6 + row] = v1 - v6;\n p[2 + row] = v2 + v5;\n p[5 + row] = v2 - v5;\n p[3 + row] = v3 + v4;\n p[4 + row] = v3 - v4;\n }\n\n // inverse DCT on columns\n for (i = 0; i < 8; ++i) {\n var col = i;\n\n // check for all-zero AC coefficients\n if (\n p[1 * 8 + col] === 0 &&\n p[2 * 8 + col] === 0 &&\n p[3 * 8 + col] === 0 &&\n p[4 * 8 + col] === 0 &&\n p[5 * 8 + col] === 0 &&\n p[6 * 8 + col] === 0 &&\n p[7 * 8 + col] === 0\n ) {\n t = (dctSqrt2 * p[i + 0] + 8192) >> 14;\n p[0 * 8 + col] = t;\n p[1 * 8 + col] = t;\n p[2 * 8 + col] = t;\n p[3 * 8 + col] = t;\n p[4 * 8 + col] = t;\n p[5 * 8 + col] = t;\n p[6 * 8 + col] = t;\n p[7 * 8 + col] = t;\n continue;\n }\n\n // stage 4\n v0 = (dctSqrt2 * p[0 * 8 + col] + 2048) >> 12;\n v1 = (dctSqrt2 * p[4 * 8 + col] + 2048) >> 12;\n v2 = p[2 * 8 + col];\n v3 = p[6 * 8 + col];\n v4 = (dctSqrt1d2 * (p[1 * 8 + col] - p[7 * 8 + col]) + 2048) >> 12;\n v7 = (dctSqrt1d2 * (p[1 * 8 + col] + p[7 * 8 + col]) + 2048) >> 12;\n v5 = p[3 * 8 + col];\n v6 = p[5 * 8 + col];\n\n // stage 3\n t = (v0 - v1 + 1) >> 1;\n v0 = (v0 + v1 + 1) >> 1;\n v1 = t;\n t = (v2 * dctSin6 + v3 * dctCos6 + 2048) >> 12;\n v2 = (v2 * dctCos6 - v3 * dctSin6 + 2048) >> 12;\n v3 = t;\n t = (v4 - v6 + 1) >> 1;\n v4 = (v4 + v6 + 1) >> 1;\n v6 = t;\n t = (v7 + v5 + 1) >> 1;\n v5 = (v7 - v5 + 1) >> 1;\n v7 = t;\n\n // stage 2\n t = (v0 - v3 + 1) >> 1;\n v0 = (v0 + v3 + 1) >> 1;\n v3 = t;\n t = (v1 - v2 + 1) >> 1;\n v1 = (v1 + v2 + 1) >> 1;\n v2 = t;\n t = (v4 * dctSin3 + v7 * dctCos3 + 2048) >> 12;\n v4 = (v4 * dctCos3 - v7 * dctSin3 + 2048) >> 12;\n v7 = t;\n t = (v5 * dctSin1 + v6 * dctCos1 + 2048) >> 12;\n v5 = (v5 * dctCos1 - v6 * dctSin1 + 2048) >> 12;\n v6 = t;\n\n // stage 1\n p[0 * 8 + col] = v0 + v7;\n p[7 * 8 + col] = v0 - v7;\n p[1 * 8 + col] = v1 + v6;\n p[6 * 8 + col] = v1 - v6;\n p[2 * 8 + col] = v2 + v5;\n p[5 * 8 + col] = v2 - v5;\n p[3 * 8 + col] = v3 + v4;\n p[4 * 8 + col] = v3 - v4;\n }\n\n // convert to 8-bit integers\n for (i = 0; i < 64; ++i) {\n var index = blockBufferOffset + i;\n var q = p[i];\n q =\n q <= -2056 / component.bitConversion\n ? 0\n : q >= 2024 / component.bitConversion\n ? 255 / component.bitConversion\n : (q + 2056 / component.bitConversion) >> 4;\n component.blockData[index] = q;\n }\n }\n\n function buildComponentData(frame, component) {\n var lines = [];\n var blocksPerLine = component.blocksPerLine;\n var blocksPerColumn = component.blocksPerColumn;\n var samplesPerLine = blocksPerLine << 3;\n var computationBuffer = new Int32Array(64);\n\n var i,\n j,\n ll = 0;\n for (var blockRow = 0; blockRow < blocksPerColumn; blockRow++) {\n for (var blockCol = 0; blockCol < blocksPerLine; blockCol++) {\n var offset = getBlockBufferOffset(component, blockRow, blockCol);\n quantizeAndInverse(component, offset, computationBuffer);\n }\n }\n return component.blockData;\n }\n\n function clampToUint8(a) {\n return a <= 0 ? 0 : a >= 255 ? 255 : a | 0;\n }\n\n // create a JPEG Image class\n class JpegImage {}\n\n // setting up all the prototype functions\n // javascript new version of setting up prototype functions\n Object.setPrototypeOf(JpegImage.prototype, {\n load: function load(path) {\n var handleData = function (data) {\n this.parse(data);\n if (this.onload) this.onload();\n }.bind(this);\n\n if (path.indexOf('data:') > -1) {\n var offset = path.indexOf('base64,') + 7;\n var data = atob(path.substring(offset));\n var arr = new Uint8Array(data.length);\n for (var i = data.length - 1; i >= 0; i--) {\n arr[i] = data.charCodeAt(i);\n }\n handleData(data);\n } else {\n var xhr = new XMLHttpRequest();\n xhr.open('GET', path, true);\n xhr.responseType = 'arraybuffer';\n xhr.onload = function () {\n // TODO catch parse error\n var data = new Uint8Array(xhr.response);\n handleData(data);\n }.bind(this);\n xhr.send(null);\n }\n },\n parse: function parse(data) {\n function readUint16() {\n var value = (data[offset] << 8) | data[offset + 1];\n offset += 2;\n return value;\n }\n\n function readDataBlock() {\n var length = readUint16();\n var array = data.subarray(offset, offset + length - 2);\n offset += array.length;\n return array;\n }\n\n function prepareComponents(frame) {\n var mcusPerLine = Math.ceil(frame.samplesPerLine / 8 / frame.maxH);\n var mcusPerColumn = Math.ceil(frame.scanLines / 8 / frame.maxV);\n for (var i = 0; i < frame.components.length; i++) {\n component = frame.components[i];\n var blocksPerLine = Math.ceil(\n (Math.ceil(frame.samplesPerLine / 8) * component.h) / frame.maxH\n );\n var blocksPerColumn = Math.ceil(\n (Math.ceil(frame.scanLines / 8) * component.v) / frame.maxV\n );\n var blocksPerLineForMcu = mcusPerLine * component.h;\n var blocksPerColumnForMcu = mcusPerColumn * component.v;\n\n var blocksBufferSize =\n 64 * blocksPerColumnForMcu * (blocksPerLineForMcu + 1);\n component.blockData = new Int16Array(blocksBufferSize);\n component.blocksPerLine = blocksPerLine;\n component.blocksPerColumn = blocksPerColumn;\n }\n frame.mcusPerLine = mcusPerLine;\n frame.mcusPerColumn = mcusPerColumn;\n }\n\n var offset = 0,\n length = data.length;\n var jfif = null;\n var adobe = null;\n var pixels = null;\n var frame, resetInterval;\n var quantizationTables = [];\n var huffmanTablesAC = [],\n huffmanTablesDC = [];\n var fileMarker = readUint16();\n if (fileMarker != 0xffd8) {\n // SOI (Start of Image)\n throw 'SOI not found';\n }\n\n fileMarker = readUint16();\n while (fileMarker != 0xffd9) {\n // EOI (End of image)\n var i, j, l;\n switch (fileMarker) {\n case 0xffe0: // APP0 (Application Specific)\n case 0xffe1: // APP1\n case 0xffe2: // APP2\n case 0xffe3: // APP3\n case 0xffe4: // APP4\n case 0xffe5: // APP5\n case 0xffe6: // APP6\n case 0xffe7: // APP7\n case 0xffe8: // APP8\n case 0xffe9: // APP9\n case 0xffea: // APP10\n case 0xffeb: // APP11\n case 0xffec: // APP12\n case 0xffed: // APP13\n case 0xffee: // APP14\n case 0xffef: // APP15\n case 0xfffe: // COM (Comment)\n var appData = readDataBlock();\n\n if (fileMarker === 0xffe0) {\n if (\n appData[0] === 0x4a &&\n appData[1] === 0x46 &&\n appData[2] === 0x49 &&\n appData[3] === 0x46 &&\n appData[4] === 0\n ) {\n // 'JFIF\\x00'\n jfif = {\n version: { major: appData[5], minor: appData[6] },\n densityUnits: appData[7],\n xDensity: (appData[8] << 8) | appData[9],\n yDensity: (appData[10] << 8) | appData[11],\n thumbWidth: appData[12],\n thumbHeight: appData[13],\n thumbData: appData.subarray(\n 14,\n 14 + 3 * appData[12] * appData[13]\n ),\n };\n }\n }\n // TODO APP1 - Exif\n if (fileMarker === 0xffee) {\n if (\n appData[0] === 0x41 &&\n appData[1] === 0x64 &&\n appData[2] === 0x6f &&\n appData[3] === 0x62 &&\n appData[4] === 0x65 &&\n appData[5] === 0\n ) {\n // 'Adobe\\x00'\n adobe = {\n version: appData[6],\n flags0: (appData[7] << 8) | appData[8],\n flags1: (appData[9] << 8) | appData[10],\n transformCode: appData[11],\n };\n }\n }\n break;\n\n case 0xffdb: // DQT (Define Quantization Tables)\n var quantizationTablesLength = readUint16();\n var quantizationTablesEnd = quantizationTablesLength + offset - 2;\n while (offset < quantizationTablesEnd) {\n var quantizationTableSpec = data[offset++];\n var tableData = new Int32Array(64);\n if (quantizationTableSpec >> 4 === 0) {\n // 8 bit values\n for (j = 0; j < 64; j++) {\n var z = dctZigZag[j];\n tableData[z] = data[offset++];\n }\n } else if (quantizationTableSpec >> 4 === 1) {\n //16 bit\n for (j = 0; j < 64; j++) {\n var zz = dctZigZag[j];\n tableData[zz] = readUint16();\n }\n } else throw 'DQT: invalid table spec';\n quantizationTables[quantizationTableSpec & 15] = tableData;\n }\n break;\n\n case 0xffc0: // SOF0 (Start of Frame, Baseline DCT)\n case 0xffc1: // SOF1 (Start of Frame, Extended DCT)\n case 0xffc2: // SOF2 (Start of Frame, Progressive DCT)\n if (frame) {\n throw 'Only single frame JPEGs supported';\n }\n readUint16(); // skip data length\n frame = {};\n frame.extended = fileMarker === 0xffc1;\n frame.progressive = fileMarker === 0xffc2;\n frame.precision = data[offset++];\n frame.scanLines = readUint16();\n frame.samplesPerLine = readUint16();\n frame.components = [];\n frame.componentIds = {};\n var componentsCount = data[offset++],\n componentId;\n var maxH = 0,\n maxV = 0;\n for (i = 0; i < componentsCount; i++) {\n componentId = data[offset];\n var h = data[offset + 1] >> 4;\n var v = data[offset + 1] & 15;\n if (maxH < h) maxH = h;\n if (maxV < v) maxV = v;\n var qId = data[offset + 2];\n l = frame.components.push({\n h: h,\n v: v,\n quantizationTable: quantizationTables[qId],\n quantizationTableId: qId,\n bitConversion: 255 / ((1 << frame.precision) - 1),\n });\n frame.componentIds[componentId] = l - 1;\n offset += 3;\n }\n frame.maxH = maxH;\n frame.maxV = maxV;\n prepareComponents(frame);\n break;\n\n case 0xffc4: // DHT (Define Huffman Tables)\n var huffmanLength = readUint16();\n for (i = 2; i < huffmanLength; ) {\n var huffmanTableSpec = data[offset++];\n var codeLengths = new Uint8Array(16);\n var codeLengthSum = 0;\n for (j = 0; j < 16; j++, offset++)\n codeLengthSum += codeLengths[j] = data[offset];\n var huffmanValues = new Uint8Array(codeLengthSum);\n for (j = 0; j < codeLengthSum; j++, offset++)\n huffmanValues[j] = data[offset];\n i += 17 + codeLengthSum;\n\n (huffmanTableSpec >> 4 === 0 ? huffmanTablesDC : huffmanTablesAC)[\n huffmanTableSpec & 15\n ] = buildHuffmanTable(codeLengths, huffmanValues);\n }\n break;\n\n case 0xffdd: // DRI (Define Restart Interval)\n readUint16(); // skip data length\n resetInterval = readUint16();\n break;\n\n case 0xffda: // SOS (Start of Scan)\n var scanLength = readUint16();\n var selectorsCount = data[offset++];\n var components = [],\n component;\n for (i = 0; i < selectorsCount; i++) {\n var componentIndex = frame.componentIds[data[offset++]];\n component = frame.components[componentIndex];\n var tableSpec = data[offset++];\n component.huffmanTableDC = huffmanTablesDC[tableSpec >> 4];\n component.huffmanTableAC = huffmanTablesAC[tableSpec & 15];\n components.push(component);\n }\n var spectralStart = data[offset++];\n var spectralEnd = data[offset++];\n var successiveApproximation = data[offset++];\n var processed = decodeScan(\n data,\n offset,\n frame,\n components,\n resetInterval,\n spectralStart,\n spectralEnd,\n successiveApproximation >> 4,\n successiveApproximation & 15\n );\n offset += processed;\n break;\n case 0xffff: // Fill bytes\n if (data[offset] !== 0xff) {\n // Avoid skipping a valid marker.\n offset--;\n }\n break;\n default:\n if (\n data[offset - 3] == 0xff &&\n data[offset - 2] >= 0xc0 &&\n data[offset - 2] <= 0xfe\n ) {\n // could be incorrect encoding -- last 0xFF byte of the previous\n // block was eaten by the encoder\n offset -= 3;\n break;\n }\n throw 'unknown JPEG marker ' + fileMarker.toString(16);\n }\n fileMarker = readUint16();\n }\n\n this.width = frame.samplesPerLine;\n this.height = frame.scanLines;\n this.jfif = jfif;\n this.adobe = adobe;\n this.components = [];\n switch (frame.components.length) {\n case 1:\n this.colorspace = ColorSpace.Grayscale;\n break;\n case 3:\n if (this.adobe) this.colorspace = ColorSpace.AdobeRGB;\n else this.colorspace = ColorSpace.RGB;\n break;\n case 4:\n this.colorspace = ColorSpace.CYMK;\n break;\n default:\n this.colorspace = ColorSpace.Unknown;\n }\n for (var i = 0; i < frame.components.length; i++) {\n var component = frame.components[i];\n if (\n !component.quantizationTable &&\n component.quantizationTableId !== null\n )\n component.quantizationTable =\n quantizationTables[component.quantizationTableId];\n this.components.push({\n output: buildComponentData(frame, component),\n scaleX: component.h / frame.maxH,\n scaleY: component.v / frame.maxV,\n blocksPerLine: component.blocksPerLine,\n blocksPerColumn: component.blocksPerColumn,\n bitConversion: component.bitConversion,\n });\n }\n },\n getData16: function getData16(width, height) {\n if (this.components.length !== 1) throw 'Unsupported color mode';\n var scaleX = this.width / width,\n scaleY = this.height / height;\n\n var component, componentScaleX, componentScaleY;\n var x, y, i;\n var offset = 0;\n var numComponents = this.components.length;\n var dataLength = width * height * numComponents;\n var data = new Uint16Array(dataLength);\n var componentLine;\n\n // lineData is reused for all components. Assume first component is\n // the biggest\n var lineData = new Uint16Array(\n (this.components[0].blocksPerLine << 3) *\n this.components[0].blocksPerColumn *\n 8\n );\n\n // First construct image data ...\n for (i = 0; i < numComponents; i++) {\n component = this.components[i];\n var blocksPerLine = component.blocksPerLine;\n var blocksPerColumn = component.blocksPerColumn;\n var samplesPerLine = blocksPerLine << 3;\n\n var j,\n k,\n ll = 0;\n var lineOffset = 0;\n for (var blockRow = 0; blockRow < blocksPerColumn; blockRow++) {\n var scanLine = blockRow << 3;\n for (var blockCol = 0; blockCol < blocksPerLine; blockCol++) {\n var bufferOffset = getBlockBufferOffset(\n component,\n blockRow,\n blockCol\n );\n var offset = 0,\n sample = blockCol << 3;\n for (j = 0; j < 8; j++) {\n var lineOffset = (scanLine + j) * samplesPerLine;\n for (k = 0; k < 8; k++) {\n lineData[lineOffset + sample + k] =\n component.output[bufferOffset + offset++];\n }\n }\n }\n }\n\n componentScaleX = component.scaleX * scaleX;\n componentScaleY = component.scaleY * scaleY;\n offset = i;\n\n var cx, cy;\n var index;\n for (y = 0; y < height; y++) {\n for (x = 0; x < width; x++) {\n cy = 0 | (y * componentScaleY);\n cx = 0 | (x * componentScaleX);\n index = cy * samplesPerLine + cx;\n data[offset] = lineData[index];\n offset += numComponents;\n }\n }\n }\n return data;\n },\n getData: function getData(width, height) {\n var scaleX = this.width / width,\n scaleY = this.height / height;\n\n var component, componentScaleX, componentScaleY;\n var x, y, i;\n var offset = 0;\n var Y, Cb, Cr, K, C, M, Ye, R, G, B;\n var colorTransform;\n var numComponents = this.components.length;\n var dataLength = width * height * numComponents;\n var data = new Uint8Array(dataLength);\n var componentLine;\n\n // lineData is reused for all components. Assume first component is\n // the biggest\n var lineData = new Uint8Array(\n (this.components[0].blocksPerLine << 3) *\n this.components[0].blocksPerColumn *\n 8\n );\n\n // First construct image data ...\n for (i = 0; i < numComponents; i++) {\n component = this.components[i];\n var blocksPerLine = component.blocksPerLine;\n var blocksPerColumn = component.blocksPerColumn;\n var samplesPerLine = blocksPerLine << 3;\n\n var j,\n k,\n ll = 0;\n var lineOffset = 0;\n for (var blockRow = 0; blockRow < blocksPerColumn; blockRow++) {\n var scanLine = blockRow << 3;\n for (var blockCol = 0; blockCol < blocksPerLine; blockCol++) {\n var bufferOffset = getBlockBufferOffset(\n component,\n blockRow,\n blockCol\n );\n var offset = 0,\n sample = blockCol << 3;\n for (j = 0; j < 8; j++) {\n var lineOffset = (scanLine + j) * samplesPerLine;\n for (k = 0; k < 8; k++) {\n lineData[lineOffset + sample + k] =\n component.output[bufferOffset + offset++] *\n component.bitConversion;\n }\n }\n }\n }\n\n componentScaleX = component.scaleX * scaleX;\n componentScaleY = component.scaleY * scaleY;\n offset = i;\n\n var cx, cy;\n var index;\n for (y = 0; y < height; y++) {\n for (x = 0; x < width; x++) {\n cy = 0 | (y * componentScaleY);\n cx = 0 | (x * componentScaleX);\n index = cy * samplesPerLine + cx;\n data[offset] = lineData[index];\n offset += numComponents;\n }\n }\n }\n\n // ... then transform colors, if necessary\n switch (numComponents) {\n case 1:\n case 2:\n break;\n // no color conversion for one or two compoenents\n\n case 3:\n // The default transform for three components is true\n colorTransform = true;\n // The adobe transform marker overrides any previous setting\n if (this.adobe && this.adobe.transformCode) colorTransform = true;\n else if (typeof this.colorTransform !== 'undefined')\n colorTransform = !!this.colorTransform;\n\n if (colorTransform) {\n for (i = 0; i < dataLength; i += numComponents) {\n Y = data[i];\n Cb = data[i + 1];\n Cr = data[i + 2];\n\n R = clampToUint8(Y - 179.456 + 1.402 * Cr);\n G = clampToUint8(Y + 135.459 - 0.344 * Cb - 0.714 * Cr);\n B = clampToUint8(Y - 226.816 + 1.772 * Cb);\n\n data[i] = R;\n data[i + 1] = G;\n data[i + 2] = B;\n }\n }\n break;\n case 4:\n if (!this.adobe) throw 'Unsupported color mode (4 components)';\n // The default transform for four components is false\n colorTransform = false;\n // The adobe transform marker overrides any previous setting\n if (this.adobe && this.adobe.transformCode) colorTransform = true;\n else if (typeof this.colorTransform !== 'undefined')\n colorTransform = !!this.colorTransform;\n\n if (colorTransform) {\n for (i = 0; i < dataLength; i += numComponents) {\n Y = data[i];\n Cb = data[i + 1];\n Cr = data[i + 2];\n\n C = clampToUint8(434.456 - Y - 1.402 * Cr);\n M = clampToUint8(119.541 - Y + 0.344 * Cb + 0.714 * Cr);\n Y = clampToUint8(481.816 - Y - 1.772 * Cb);\n\n data[i] = C;\n data[i + 1] = M;\n data[i + 2] = Y;\n // K is unchanged\n }\n }\n break;\n default:\n throw 'Unsupported color mode';\n }\n return data;\n },\n });\n\n return JpegImage\n})();\n\n/*** EXPORTS FROM exports-loader ***/\nmodule.exports = {\n JpegImage\n};\n"],"names":["ColorSpace","Unkown","Grayscale","AdobeRGB","RGB","CYMK","JpegImage","dctZigZag","Int32Array","dctCos1","dctSin1","dctCos3","dctSin3","dctCos6","dctSin6","dctSqrt2","dctSqrt1d2","buildHuffmanTable","codeLengths","values","i","j","k","code","length","push","children","index","q","p","pop","getBlockBufferOffset","component","row","col","blocksPerLine","decodeScan","data","offset","frame","components","resetInterval","spectralStart","spectralEnd","successivePrev","successive","precision","samplesPerLine","scanLines","mcusPerLine","progressive","startOffset","maxH","maxV","bitsData","bitsCount","readBit","nextByte","toString","decodeHuffman","tree","bit","node","receive","n","receiveAndExtend","eobrun","successiveACNextValue","successiveACState","decodeMcu","decode","mcu","mcuCol","v","h","decodeBlock","decodeFn","componentsLength","t","huffmanTableDC","diff","blockData","pred","e","rs","huffmanTableAC","s","r","z","marker","mcuExpected","blocksPerColumn","mcusPerColumn","quantizeAndInverse","blockBufferOffset","v0","v1","v2","v3","v4","v5","v6","v7","qt","quantizationTable","bitConversion","buildComponentData","computationBuffer","blockRow","blockCol","clampToUint8","a","Object","setPrototypeOf","prototype","load","path","handleData","this","parse","onload","bind","indexOf","atob","substring","arr","Uint8Array","charCodeAt","xhr","XMLHttpRequest","open","responseType","response","send","readUint16","value","readDataBlock","array","subarray","prepareComponents","Math","ceil","blocksPerLineForMcu","blocksBufferSize","Int16Array","jfif","adobe","quantizationTables","huffmanTablesAC","huffmanTablesDC","fileMarker","l","appData","version","major","minor","densityUnits","xDensity","yDensity","thumbWidth","thumbHeight","thumbData","flags0","flags1","transformCode","quantizationTablesEnd","quantizationTableSpec","tableData","extended","componentIds","componentId","componentsCount","qId","quantizationTableId","huffmanLength","huffmanTableSpec","codeLengthSum","huffmanValues","selectorsCount","componentIndex","tableSpec","successiveApproximation","processed","width","height","colorspace","Unknown","output","scaleX","scaleY","getData16","componentScaleX","componentScaleY","x","y","numComponents","Uint16Array","lineData","lineOffset","scanLine","bufferOffset","sample","getData","Y","Cb","Cr","C","M","R","G","B","colorTransform","dataLength","module","exports"],"sourceRoot":""}