@8btc/xcanvas 0.0.1

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 (121) hide show
  1. package/README.md +70 -0
  2. package/dist/Tableau10-BqnYsPR6.js +9 -0
  3. package/dist/XCanvas-BxdLBkBz.js +27732 -0
  4. package/dist/_commonjs-dynamic-modules-TGKdzP3c.js +6 -0
  5. package/dist/ar-SA-G6X2FPQ2-DjqDLLYL.js +41 -0
  6. package/dist/arc-D1qX5GFf.js +132 -0
  7. package/dist/array-DgktLKBx.js +6 -0
  8. package/dist/az-AZ-76LH7QW2-D7LOsF3_.js +32 -0
  9. package/dist/bg-BG-XCXSNQG7-WI4tFn23.js +36 -0
  10. package/dist/blockDiagram-38ab4fdb-DtemKfEh.js +1811 -0
  11. package/dist/bn-BD-2XOGV67Q-Bugx_8fy.js +36 -0
  12. package/dist/c4Diagram-3d4e48cf-Byd2vU9K.js +2463 -0
  13. package/dist/ca-ES-6MX7JW3Y-6rFwKGsQ.js +39 -0
  14. package/dist/channel-BT_3Ze-Y.js +7 -0
  15. package/dist/chunk-EIO257PC-C7qD7hGu.js +1641 -0
  16. package/dist/classDiagram-70f12bd4-CwfYadk-.js +354 -0
  17. package/dist/classDiagram-v2-f2320105-B28MuM8f.js +284 -0
  18. package/dist/clone-D2FUK8WY.js +8 -0
  19. package/dist/createText-2e5e7dd3-Ca1JfQaJ.js +4914 -0
  20. package/dist/cs-CZ-2BRQDIVT-Dhd8XszK.js +42 -0
  21. package/dist/da-DK-5WZEPLOC-BhL87sSs.js +36 -0
  22. package/dist/de-DE-XR44H4JA-xSrZSV0J.js +39 -0
  23. package/dist/directory-open-01563666-XowynPwH.js +14 -0
  24. package/dist/directory-open-4ed118d0-BwYbu9dw.js +55 -0
  25. package/dist/edges-e0da2a9e-9VbVapWU.js +1840 -0
  26. package/dist/el-GR-BZB4AONW-DQORZ_pY.js +41 -0
  27. package/dist/en-B4ZKOASM-D2BVbEdz.js +39 -0
  28. package/dist/erDiagram-9861fffd-D4S9QDes.js +1318 -0
  29. package/dist/es-ES-U4NZUMDT-C0Q89-0V.js +40 -0
  30. package/dist/eu-ES-A7QVB2H4-BwBW3cEw.js +42 -0
  31. package/dist/fa-IR-HGAKTJCU-DtZ74rm4.js +39 -0
  32. package/dist/fi-FI-Z5N7JZ37-QvQan48z.js +37 -0
  33. package/dist/file-open-002ab408-BNIYSKAV.js +18 -0
  34. package/dist/file-open-7c801643-B_l1UXdI.js +15 -0
  35. package/dist/file-save-3189631c-vzijizFw.js +23 -0
  36. package/dist/file-save-745eba88-B5-wM56X.js +25 -0
  37. package/dist/flowDb-956e92f1-S6T8ppJw.js +1713 -0
  38. package/dist/flowDiagram-66a62f08-C6TTwS5_.js +1264 -0
  39. package/dist/flowDiagram-v2-96b9c2cf-CzfeUNGP.js +24 -0
  40. package/dist/flowchart-elk-definition-4a651766-CRv1kWtk.js +92922 -0
  41. package/dist/fr-FR-RHASNOE6-CZFiweNU.js +40 -0
  42. package/dist/ganttDiagram-c361ad54-CAnfd8Sw.js +3420 -0
  43. package/dist/gitGraphDiagram-72cf32ee-CSGI-xRI.js +1790 -0
  44. package/dist/gl-ES-HMX3MZ6V-Bqv2xL-V.js +41 -0
  45. package/dist/graph-Ct2tKpKj.js +1253 -0
  46. package/dist/he-IL-6SHJWFNN-kso30jhn.js +41 -0
  47. package/dist/hi-IN-IWLTKZ5I-Busk5oaa.js +35 -0
  48. package/dist/hu-HU-A5ZG7DT2-xSR2C2H0.js +38 -0
  49. package/dist/id-ID-SAP4L64H-BQQZYm1L.js +41 -0
  50. package/dist/image-EDRW2JGV-Cx7o2kxD.js +6 -0
  51. package/dist/image-blob-reduce.esm-BKPqMdie.js +2396 -0
  52. package/dist/index-3862675e-B3j3w-v_.js +663 -0
  53. package/dist/index-CLOU2Ikr.js +14364 -0
  54. package/dist/index.css +450 -0
  55. package/dist/index.d.ts +40 -0
  56. package/dist/index.js +7 -0
  57. package/dist/index.umd.cjs +235477 -0
  58. package/dist/infoDiagram-f8f76790-NqA75uBo.js +510 -0
  59. package/dist/init-ZxktEp_H.js +16 -0
  60. package/dist/it-IT-JPQ66NNP-CAMVZrYt.js +42 -0
  61. package/dist/ja-JP-DBVTYXUO-CAX8A_Uj.js +39 -0
  62. package/dist/journeyDiagram-49397b02-By5oBzsZ.js +1182 -0
  63. package/dist/kaa-6HZHGXH3-4-o94cPY.js +32 -0
  64. package/dist/kab-KAB-ZGHBKWFO-CgyjjBvZ.js +39 -0
  65. package/dist/katex-C-jAQc2m.js +14516 -0
  66. package/dist/kk-KZ-P5N5QNE5-BEqZcwLA.js +32 -0
  67. package/dist/km-KH-HSX4SM5Z-DvKDbeH4.js +42 -0
  68. package/dist/ko-KR-MTYHY66A-DKCuAbKE.js +40 -0
  69. package/dist/ku-TR-6OUDTVRD-CNUs4cCe.js +40 -0
  70. package/dist/layout-AJxYKqQV.js +2292 -0
  71. package/dist/line-DJIf5OM8.js +45 -0
  72. package/dist/linear-Cfj4s4vI.js +539 -0
  73. package/dist/lt-LT-XHIRWOB4-gouzGdoW.js +34 -0
  74. package/dist/lv-LV-5QDEKY6T-CTvg1XFv.js +38 -0
  75. package/dist/mindmap-definition-fc14e90a-CBlwH_UF.js +35283 -0
  76. package/dist/mr-IN-CRQNXWMA-QeYm06Kq.js +44 -0
  77. package/dist/my-MM-5M5IBNSE-DG3k9ORf.js +32 -0
  78. package/dist/nb-NO-T6EIAALU-Cj995Nmg.js +41 -0
  79. package/dist/nl-NL-IS3SIHDZ-B-2H7xey.js +39 -0
  80. package/dist/nn-NO-6E72VCQL-DrAwKKTN.js +39 -0
  81. package/dist/oc-FR-POXYY2M6-CeyJD7tq.js +39 -0
  82. package/dist/ordinal-DSZU4PqD.js +76 -0
  83. package/dist/pa-IN-N4M65BXN-DHzi6mjo.js +35 -0
  84. package/dist/path-Cp2qmpkd.js +109 -0
  85. package/dist/percentages-BXMCSKIN-CDYsTuua.js +6 -0
  86. package/dist/pica-CzzcRNRD.js +1702 -0
  87. package/dist/pieDiagram-8a3498a8-DueGoZOh.js +768 -0
  88. package/dist/pl-PL-T2D74RX3-BBNEV2c6.js +40 -0
  89. package/dist/pt-BR-5N22H2LF-D2cTx_F0.js +40 -0
  90. package/dist/pt-PT-UZXXM6DQ-BddvLLsF.js +40 -0
  91. package/dist/quadrantDiagram-120e2f19-Tb6_oGIn.js +1198 -0
  92. package/dist/requirementDiagram-deff3bca-CEeg0ep-.js +1089 -0
  93. package/dist/ro-RO-JPDTUUEW-DynuW50i.js +42 -0
  94. package/dist/roundRect-CjfubgrN.js +152 -0
  95. package/dist/ru-RU-B4JR7IUQ-B5Hecrew.js +40 -0
  96. package/dist/sankeyDiagram-04a897e0-CGTLQ8Gm.js +1172 -0
  97. package/dist/sequenceDiagram-704730f1-CZ72D-Nd.js +3336 -0
  98. package/dist/si-LK-N5RQ5JYF-BGMa93tc.js +32 -0
  99. package/dist/sk-SK-C5VTKIMK-BttCAlBm.js +37 -0
  100. package/dist/sl-SI-NN7IZMDC-DTC59nzG.js +37 -0
  101. package/dist/stateDiagram-587899a1-XISZzz_f.js +451 -0
  102. package/dist/stateDiagram-v2-d93cdb3a-DbCcmzTc.js +319 -0
  103. package/dist/styles-6aaf32cf-CyfdkEib.js +1363 -0
  104. package/dist/styles-9a916d00-zQ92RrTB.js +1483 -0
  105. package/dist/styles-c10674c1-BWmkigmR.js +571 -0
  106. package/dist/subset-shared.chunk-BuFt2PpZ.js +8 -0
  107. package/dist/subset-worker.chunk-CgaFXU4O.js +14 -0
  108. package/dist/sv-SE-XGPEYMSR-BPDlPxC1.js +41 -0
  109. package/dist/svgDrawCommon-08f97a94-CJ0lufOi.js +100 -0
  110. package/dist/ta-IN-2NMHFXQM-CI1ZsNk9.js +40 -0
  111. package/dist/th-TH-HPSO5L25-CUM-w2Qt.js +33 -0
  112. package/dist/timeline-definition-85554ec2-DV6084Gl.js +1210 -0
  113. package/dist/tr-TR-DEFEU3FU-CGpyf_vD.js +38 -0
  114. package/dist/uk-UA-QMV73CPH-Bg15Mv3J.js +37 -0
  115. package/dist/vi-VN-M7AON7JQ-AYmca9so.js +36 -0
  116. package/dist/vite.svg +1 -0
  117. package/dist/xychartDiagram-e933f94c-P1e6EEaH.js +1796 -0
  118. package/dist/zh-CN-LNUGB5OW-Dem2Cc-c.js +41 -0
  119. package/dist/zh-HK-E62DVLB3-BjsDyiLI.js +32 -0
  120. package/dist/zh-TW-RAJ6MFWO-IDAsc9Pz.js +40 -0
  121. package/package.json +52 -0
@@ -0,0 +1,2396 @@
1
+ /*! image-blob-reduce 3.0.1 https://github.com/nodeca/image-blob-reduce @license MIT */
2
+ var assign$1 = function assign(to) {
3
+ var from;
4
+ for (var s = 1; s < arguments.length; s++) {
5
+ from = Object(arguments[s]);
6
+ for (var key in from) {
7
+ if (Object.prototype.hasOwnProperty.call(from, key)) to[key] = from[key];
8
+ }
9
+ }
10
+ return to;
11
+ };
12
+ function pick(from, props) {
13
+ var to = {};
14
+ props.forEach(function(key) {
15
+ if (Object.prototype.hasOwnProperty.call(from, key)) to[key] = from[key];
16
+ });
17
+ return to;
18
+ }
19
+ function pick_pica_resize_options(from) {
20
+ return pick(from, [
21
+ "alpha",
22
+ "unsharpAmount",
23
+ "unsharpRadius",
24
+ "unsharpThreshold",
25
+ "cancelToken"
26
+ ]);
27
+ }
28
+ var pick_1 = pick;
29
+ var pick_pica_resize_options_1 = pick_pica_resize_options;
30
+ var utils = {
31
+ assign: assign$1,
32
+ pick: pick_1,
33
+ pick_pica_resize_options: pick_pica_resize_options_1
34
+ };
35
+ function createCommonjsModule(fn) {
36
+ var module = { exports: {} };
37
+ return fn(module, module.exports), module.exports;
38
+ }
39
+ function commonjsRequire(target) {
40
+ throw new Error('Could not dynamically require "' + target + '". Please configure the dynamicRequireTargets option of @rollup/plugin-commonjs appropriately for this require call to behave properly.');
41
+ }
42
+ /*!
43
+
44
+ pica
45
+ https://github.com/nodeca/pica
46
+
47
+ */
48
+ var pica = createCommonjsModule(function(module, exports) {
49
+ (function(f) {
50
+ {
51
+ module.exports = f();
52
+ }
53
+ })(function() {
54
+ return (/* @__PURE__ */ (function() {
55
+ function r(e, n, t) {
56
+ function o(i2, f) {
57
+ if (!n[i2]) {
58
+ if (!e[i2]) {
59
+ var c = "function" == typeof commonjsRequire && commonjsRequire;
60
+ if (!f && c) return c(i2, true);
61
+ if (u) return u(i2, true);
62
+ var a = new Error("Cannot find module '" + i2 + "'");
63
+ throw a.code = "MODULE_NOT_FOUND", a;
64
+ }
65
+ var p = n[i2] = { exports: {} };
66
+ e[i2][0].call(p.exports, function(r2) {
67
+ var n2 = e[i2][1][r2];
68
+ return o(n2 || r2);
69
+ }, p, p.exports, r, e, n, t);
70
+ }
71
+ return n[i2].exports;
72
+ }
73
+ for (var u = "function" == typeof commonjsRequire && commonjsRequire, i = 0; i < t.length; i++) o(t[i]);
74
+ return o;
75
+ }
76
+ return r;
77
+ })())({ 1: [function(_dereq_, module2, exports2) {
78
+ var inherits = _dereq_("inherits");
79
+ var Multimath = _dereq_("multimath");
80
+ var mm_unsharp_mask = _dereq_("./mm_unsharp_mask");
81
+ var mm_resize = _dereq_("./mm_resize");
82
+ function MathLib(requested_features) {
83
+ var __requested_features = requested_features || [];
84
+ var features = {
85
+ js: __requested_features.indexOf("js") >= 0,
86
+ wasm: __requested_features.indexOf("wasm") >= 0
87
+ };
88
+ Multimath.call(this, features);
89
+ this.features = {
90
+ js: features.js,
91
+ wasm: features.wasm && this.has_wasm()
92
+ };
93
+ this.use(mm_unsharp_mask);
94
+ this.use(mm_resize);
95
+ }
96
+ inherits(MathLib, Multimath);
97
+ MathLib.prototype.resizeAndUnsharp = function resizeAndUnsharp(options, cache) {
98
+ var result = this.resize(options, cache);
99
+ if (options.unsharpAmount) {
100
+ this.unsharp_mask(result, options.toWidth, options.toHeight, options.unsharpAmount, options.unsharpRadius, options.unsharpThreshold);
101
+ }
102
+ return result;
103
+ };
104
+ module2.exports = MathLib;
105
+ }, { "./mm_resize": 4, "./mm_unsharp_mask": 9, "inherits": 19, "multimath": 20 }], 2: [function(_dereq_, module2, exports2) {
106
+ function clampTo8(i) {
107
+ return i < 0 ? 0 : i > 255 ? 255 : i;
108
+ }
109
+ function convolveHorizontally(src, dest, srcW, srcH, destW, filters) {
110
+ var r, g, b, a;
111
+ var filterPtr, filterShift, filterSize;
112
+ var srcPtr, srcY, destX, filterVal;
113
+ var srcOffset = 0, destOffset = 0;
114
+ for (srcY = 0; srcY < srcH; srcY++) {
115
+ filterPtr = 0;
116
+ for (destX = 0; destX < destW; destX++) {
117
+ filterShift = filters[filterPtr++];
118
+ filterSize = filters[filterPtr++];
119
+ srcPtr = srcOffset + filterShift * 4 | 0;
120
+ r = g = b = a = 0;
121
+ for (; filterSize > 0; filterSize--) {
122
+ filterVal = filters[filterPtr++];
123
+ a = a + filterVal * src[srcPtr + 3] | 0;
124
+ b = b + filterVal * src[srcPtr + 2] | 0;
125
+ g = g + filterVal * src[srcPtr + 1] | 0;
126
+ r = r + filterVal * src[srcPtr] | 0;
127
+ srcPtr = srcPtr + 4 | 0;
128
+ }
129
+ dest[destOffset + 3] = clampTo8(
130
+ a + (1 << 13) >> 14
131
+ /*FIXED_FRAC_BITS*/
132
+ );
133
+ dest[destOffset + 2] = clampTo8(
134
+ b + (1 << 13) >> 14
135
+ /*FIXED_FRAC_BITS*/
136
+ );
137
+ dest[destOffset + 1] = clampTo8(
138
+ g + (1 << 13) >> 14
139
+ /*FIXED_FRAC_BITS*/
140
+ );
141
+ dest[destOffset] = clampTo8(
142
+ r + (1 << 13) >> 14
143
+ /*FIXED_FRAC_BITS*/
144
+ );
145
+ destOffset = destOffset + srcH * 4 | 0;
146
+ }
147
+ destOffset = (srcY + 1) * 4 | 0;
148
+ srcOffset = (srcY + 1) * srcW * 4 | 0;
149
+ }
150
+ }
151
+ function convolveVertically(src, dest, srcW, srcH, destW, filters) {
152
+ var r, g, b, a;
153
+ var filterPtr, filterShift, filterSize;
154
+ var srcPtr, srcY, destX, filterVal;
155
+ var srcOffset = 0, destOffset = 0;
156
+ for (srcY = 0; srcY < srcH; srcY++) {
157
+ filterPtr = 0;
158
+ for (destX = 0; destX < destW; destX++) {
159
+ filterShift = filters[filterPtr++];
160
+ filterSize = filters[filterPtr++];
161
+ srcPtr = srcOffset + filterShift * 4 | 0;
162
+ r = g = b = a = 0;
163
+ for (; filterSize > 0; filterSize--) {
164
+ filterVal = filters[filterPtr++];
165
+ a = a + filterVal * src[srcPtr + 3] | 0;
166
+ b = b + filterVal * src[srcPtr + 2] | 0;
167
+ g = g + filterVal * src[srcPtr + 1] | 0;
168
+ r = r + filterVal * src[srcPtr] | 0;
169
+ srcPtr = srcPtr + 4 | 0;
170
+ }
171
+ dest[destOffset + 3] = clampTo8(
172
+ a + (1 << 13) >> 14
173
+ /*FIXED_FRAC_BITS*/
174
+ );
175
+ dest[destOffset + 2] = clampTo8(
176
+ b + (1 << 13) >> 14
177
+ /*FIXED_FRAC_BITS*/
178
+ );
179
+ dest[destOffset + 1] = clampTo8(
180
+ g + (1 << 13) >> 14
181
+ /*FIXED_FRAC_BITS*/
182
+ );
183
+ dest[destOffset] = clampTo8(
184
+ r + (1 << 13) >> 14
185
+ /*FIXED_FRAC_BITS*/
186
+ );
187
+ destOffset = destOffset + srcH * 4 | 0;
188
+ }
189
+ destOffset = (srcY + 1) * 4 | 0;
190
+ srcOffset = (srcY + 1) * srcW * 4 | 0;
191
+ }
192
+ }
193
+ module2.exports = {
194
+ convolveHorizontally,
195
+ convolveVertically
196
+ };
197
+ }, {}], 3: [function(_dereq_, module2, exports2) {
198
+ module2.exports = "AGFzbQEAAAAADAZkeWxpbmsAAAAAAAEXA2AAAGAGf39/f39/AGAHf39/f39/fwACDwEDZW52Bm1lbW9yeQIAAAMEAwABAgYGAX8AQQALB1cFEV9fd2FzbV9jYWxsX2N0b3JzAAAIY29udm9sdmUAAQpjb252b2x2ZUhWAAIMX19kc29faGFuZGxlAwAYX193YXNtX2FwcGx5X2RhdGFfcmVsb2NzAAAK7AMDAwABC8YDAQ9/AkAgA0UNACAERQ0AA0AgDCENQQAhE0EAIQcDQCAHQQJqIQYCfyAHQQF0IAVqIgcuAQIiFEUEQEGAwAAhCEGAwAAhCUGAwAAhCkGAwAAhCyAGDAELIBIgBy4BAGohCEEAIQsgFCEHQQAhDiAGIQlBACEPQQAhEANAIAUgCUEBdGouAQAiESAAIAhBAnRqKAIAIgpBGHZsIBBqIRAgCkH/AXEgEWwgC2ohCyAKQRB2Qf8BcSARbCAPaiEPIApBCHZB/wFxIBFsIA5qIQ4gCEEBaiEIIAlBAWohCSAHQQFrIgcNAAsgC0GAQGshCCAOQYBAayEJIA9BgEBrIQogEEGAQGshCyAGIBRqCyEHIAEgDUECdGogCUEOdSIGQf8BIAZB/wFIGyIGQQAgBkEAShtBCHRBgP4DcSAKQQ51IgZB/wEgBkH/AUgbIgZBACAGQQBKG0EQdEGAgPwHcSALQQ51IgZB/wEgBkH/AUgbIgZBACAGQQBKG0EYdHJyIAhBDnUiBkH/ASAGQf8BSBsiBkEAIAZBAEobcjYCACADIA1qIQ0gE0EBaiITIARHDQALIAxBAWoiDCACbCESIAMgDEcNAAsLCx4AQQAgAiADIAQgBSAAEAEgAkEAIAQgBSAGIAEQAQs=";
199
+ }, {}], 4: [function(_dereq_, module2, exports2) {
200
+ module2.exports = {
201
+ name: "resize",
202
+ fn: _dereq_("./resize"),
203
+ wasm_fn: _dereq_("./resize_wasm"),
204
+ wasm_src: _dereq_("./convolve_wasm_base64")
205
+ };
206
+ }, { "./convolve_wasm_base64": 3, "./resize": 5, "./resize_wasm": 8 }], 5: [function(_dereq_, module2, exports2) {
207
+ var createFilters = _dereq_("./resize_filter_gen");
208
+ var convolveHorizontally = _dereq_("./convolve").convolveHorizontally;
209
+ var convolveVertically = _dereq_("./convolve").convolveVertically;
210
+ function resetAlpha(dst, width, height) {
211
+ var ptr = 3, len = width * height * 4 | 0;
212
+ while (ptr < len) {
213
+ dst[ptr] = 255;
214
+ ptr = ptr + 4 | 0;
215
+ }
216
+ }
217
+ module2.exports = function resize(options) {
218
+ var src = options.src;
219
+ var srcW = options.width;
220
+ var srcH = options.height;
221
+ var destW = options.toWidth;
222
+ var destH = options.toHeight;
223
+ var scaleX = options.scaleX || options.toWidth / options.width;
224
+ var scaleY = options.scaleY || options.toHeight / options.height;
225
+ var offsetX = options.offsetX || 0;
226
+ var offsetY = options.offsetY || 0;
227
+ var dest = options.dest || new Uint8Array(destW * destH * 4);
228
+ var quality = typeof options.quality === "undefined" ? 3 : options.quality;
229
+ var alpha = options.alpha || false;
230
+ var filtersX = createFilters(quality, srcW, destW, scaleX, offsetX), filtersY = createFilters(quality, srcH, destH, scaleY, offsetY);
231
+ var tmp = new Uint8Array(destW * srcH * 4);
232
+ convolveHorizontally(src, tmp, srcW, srcH, destW, filtersX);
233
+ convolveVertically(tmp, dest, srcH, destW, destH, filtersY);
234
+ if (!alpha) resetAlpha(dest, destW, destH);
235
+ return dest;
236
+ };
237
+ }, { "./convolve": 2, "./resize_filter_gen": 6 }], 6: [function(_dereq_, module2, exports2) {
238
+ var FILTER_INFO = _dereq_("./resize_filter_info");
239
+ var FIXED_FRAC_BITS = 14;
240
+ function toFixedPoint(num) {
241
+ return Math.round(num * ((1 << FIXED_FRAC_BITS) - 1));
242
+ }
243
+ module2.exports = function resizeFilterGen(quality, srcSize, destSize, scale, offset) {
244
+ var filterFunction = FILTER_INFO[quality].filter;
245
+ var scaleInverted = 1 / scale;
246
+ var scaleClamped = Math.min(1, scale);
247
+ var srcWindow = FILTER_INFO[quality].win / scaleClamped;
248
+ var destPixel, srcPixel, srcFirst, srcLast, filterElementSize, floatFilter, fxpFilter, total, pxl, idx, floatVal, filterTotal, filterVal;
249
+ var leftNotEmpty, rightNotEmpty, filterShift, filterSize;
250
+ var maxFilterElementSize = Math.floor((srcWindow + 1) * 2);
251
+ var packedFilter = new Int16Array((maxFilterElementSize + 2) * destSize);
252
+ var packedFilterPtr = 0;
253
+ var slowCopy = !packedFilter.subarray || !packedFilter.set;
254
+ for (destPixel = 0; destPixel < destSize; destPixel++) {
255
+ srcPixel = (destPixel + 0.5) * scaleInverted + offset;
256
+ srcFirst = Math.max(0, Math.floor(srcPixel - srcWindow));
257
+ srcLast = Math.min(srcSize - 1, Math.ceil(srcPixel + srcWindow));
258
+ filterElementSize = srcLast - srcFirst + 1;
259
+ floatFilter = new Float32Array(filterElementSize);
260
+ fxpFilter = new Int16Array(filterElementSize);
261
+ total = 0;
262
+ for (pxl = srcFirst, idx = 0; pxl <= srcLast; pxl++, idx++) {
263
+ floatVal = filterFunction((pxl + 0.5 - srcPixel) * scaleClamped);
264
+ total += floatVal;
265
+ floatFilter[idx] = floatVal;
266
+ }
267
+ filterTotal = 0;
268
+ for (idx = 0; idx < floatFilter.length; idx++) {
269
+ filterVal = floatFilter[idx] / total;
270
+ filterTotal += filterVal;
271
+ fxpFilter[idx] = toFixedPoint(filterVal);
272
+ }
273
+ fxpFilter[destSize >> 1] += toFixedPoint(1 - filterTotal);
274
+ leftNotEmpty = 0;
275
+ while (leftNotEmpty < fxpFilter.length && fxpFilter[leftNotEmpty] === 0) {
276
+ leftNotEmpty++;
277
+ }
278
+ if (leftNotEmpty < fxpFilter.length) {
279
+ rightNotEmpty = fxpFilter.length - 1;
280
+ while (rightNotEmpty > 0 && fxpFilter[rightNotEmpty] === 0) {
281
+ rightNotEmpty--;
282
+ }
283
+ filterShift = srcFirst + leftNotEmpty;
284
+ filterSize = rightNotEmpty - leftNotEmpty + 1;
285
+ packedFilter[packedFilterPtr++] = filterShift;
286
+ packedFilter[packedFilterPtr++] = filterSize;
287
+ if (!slowCopy) {
288
+ packedFilter.set(fxpFilter.subarray(leftNotEmpty, rightNotEmpty + 1), packedFilterPtr);
289
+ packedFilterPtr += filterSize;
290
+ } else {
291
+ for (idx = leftNotEmpty; idx <= rightNotEmpty; idx++) {
292
+ packedFilter[packedFilterPtr++] = fxpFilter[idx];
293
+ }
294
+ }
295
+ } else {
296
+ packedFilter[packedFilterPtr++] = 0;
297
+ packedFilter[packedFilterPtr++] = 0;
298
+ }
299
+ }
300
+ return packedFilter;
301
+ };
302
+ }, { "./resize_filter_info": 7 }], 7: [function(_dereq_, module2, exports2) {
303
+ module2.exports = [{
304
+ // Nearest neibor (Box)
305
+ win: 0.5,
306
+ filter: function filter(x) {
307
+ return x >= -0.5 && x < 0.5 ? 1 : 0;
308
+ }
309
+ }, {
310
+ // Hamming
311
+ win: 1,
312
+ filter: function filter(x) {
313
+ if (x <= -1 || x >= 1) {
314
+ return 0;
315
+ }
316
+ if (x > -11920929e-14 && x < 11920929e-14) {
317
+ return 1;
318
+ }
319
+ var xpi = x * Math.PI;
320
+ return Math.sin(xpi) / xpi * (0.54 + 0.46 * Math.cos(xpi / 1));
321
+ }
322
+ }, {
323
+ // Lanczos, win = 2
324
+ win: 2,
325
+ filter: function filter(x) {
326
+ if (x <= -2 || x >= 2) {
327
+ return 0;
328
+ }
329
+ if (x > -11920929e-14 && x < 11920929e-14) {
330
+ return 1;
331
+ }
332
+ var xpi = x * Math.PI;
333
+ return Math.sin(xpi) / xpi * Math.sin(xpi / 2) / (xpi / 2);
334
+ }
335
+ }, {
336
+ // Lanczos, win = 3
337
+ win: 3,
338
+ filter: function filter(x) {
339
+ if (x <= -3 || x >= 3) {
340
+ return 0;
341
+ }
342
+ if (x > -11920929e-14 && x < 11920929e-14) {
343
+ return 1;
344
+ }
345
+ var xpi = x * Math.PI;
346
+ return Math.sin(xpi) / xpi * Math.sin(xpi / 3) / (xpi / 3);
347
+ }
348
+ }];
349
+ }, {}], 8: [function(_dereq_, module2, exports2) {
350
+ var createFilters = _dereq_("./resize_filter_gen");
351
+ function resetAlpha(dst, width, height) {
352
+ var ptr = 3, len = width * height * 4 | 0;
353
+ while (ptr < len) {
354
+ dst[ptr] = 255;
355
+ ptr = ptr + 4 | 0;
356
+ }
357
+ }
358
+ function asUint8Array(src) {
359
+ return new Uint8Array(src.buffer, 0, src.byteLength);
360
+ }
361
+ var IS_LE = true;
362
+ try {
363
+ IS_LE = new Uint32Array(new Uint8Array([1, 0, 0, 0]).buffer)[0] === 1;
364
+ } catch (__) {
365
+ }
366
+ function copyInt16asLE(src, target, target_offset) {
367
+ if (IS_LE) {
368
+ target.set(asUint8Array(src), target_offset);
369
+ return;
370
+ }
371
+ for (var ptr = target_offset, i = 0; i < src.length; i++) {
372
+ var data = src[i];
373
+ target[ptr++] = data & 255;
374
+ target[ptr++] = data >> 8 & 255;
375
+ }
376
+ }
377
+ module2.exports = function resize_wasm(options) {
378
+ var src = options.src;
379
+ var srcW = options.width;
380
+ var srcH = options.height;
381
+ var destW = options.toWidth;
382
+ var destH = options.toHeight;
383
+ var scaleX = options.scaleX || options.toWidth / options.width;
384
+ var scaleY = options.scaleY || options.toHeight / options.height;
385
+ var offsetX = options.offsetX || 0;
386
+ var offsetY = options.offsetY || 0;
387
+ var dest = options.dest || new Uint8Array(destW * destH * 4);
388
+ var quality = typeof options.quality === "undefined" ? 3 : options.quality;
389
+ var alpha = options.alpha || false;
390
+ var filtersX = createFilters(quality, srcW, destW, scaleX, offsetX), filtersY = createFilters(quality, srcH, destH, scaleY, offsetY);
391
+ var src_offset = 0;
392
+ var tmp_offset = this.__align(src_offset + Math.max(src.byteLength, dest.byteLength));
393
+ var filtersX_offset = this.__align(tmp_offset + srcH * destW * 4);
394
+ var filtersY_offset = this.__align(filtersX_offset + filtersX.byteLength);
395
+ var alloc_bytes = filtersY_offset + filtersY.byteLength;
396
+ var instance = this.__instance("resize", alloc_bytes);
397
+ var mem = new Uint8Array(this.__memory.buffer);
398
+ var mem32 = new Uint32Array(this.__memory.buffer);
399
+ var src32 = new Uint32Array(src.buffer);
400
+ mem32.set(src32);
401
+ copyInt16asLE(filtersX, mem, filtersX_offset);
402
+ copyInt16asLE(filtersY, mem, filtersY_offset);
403
+ var fn = instance.exports.convolveHV || instance.exports._convolveHV;
404
+ fn(filtersX_offset, filtersY_offset, tmp_offset, srcW, srcH, destW, destH);
405
+ var dest32 = new Uint32Array(dest.buffer);
406
+ dest32.set(new Uint32Array(this.__memory.buffer, 0, destH * destW));
407
+ if (!alpha) resetAlpha(dest, destW, destH);
408
+ return dest;
409
+ };
410
+ }, { "./resize_filter_gen": 6 }], 9: [function(_dereq_, module2, exports2) {
411
+ module2.exports = {
412
+ name: "unsharp_mask",
413
+ fn: _dereq_("./unsharp_mask"),
414
+ wasm_fn: _dereq_("./unsharp_mask_wasm"),
415
+ wasm_src: _dereq_("./unsharp_mask_wasm_base64")
416
+ };
417
+ }, { "./unsharp_mask": 10, "./unsharp_mask_wasm": 11, "./unsharp_mask_wasm_base64": 12 }], 10: [function(_dereq_, module2, exports2) {
418
+ var glur_mono16 = _dereq_("glur/mono16");
419
+ function hsv_v16(img, width, height) {
420
+ var size = width * height;
421
+ var out = new Uint16Array(size);
422
+ var r, g, b, max;
423
+ for (var i = 0; i < size; i++) {
424
+ r = img[4 * i];
425
+ g = img[4 * i + 1];
426
+ b = img[4 * i + 2];
427
+ max = r >= g && r >= b ? r : g >= b && g >= r ? g : b;
428
+ out[i] = max << 8;
429
+ }
430
+ return out;
431
+ }
432
+ module2.exports = function unsharp(img, width, height, amount, radius, threshold) {
433
+ var v1, v2, vmul;
434
+ var diff, iTimes4;
435
+ if (amount === 0 || radius < 0.5) {
436
+ return;
437
+ }
438
+ if (radius > 2) {
439
+ radius = 2;
440
+ }
441
+ var brightness = hsv_v16(img, width, height);
442
+ var blured = new Uint16Array(brightness);
443
+ glur_mono16(blured, width, height, radius);
444
+ var amountFp = amount / 100 * 4096 + 0.5 | 0;
445
+ var thresholdFp = threshold << 8;
446
+ var size = width * height;
447
+ for (var i = 0; i < size; i++) {
448
+ v1 = brightness[i];
449
+ diff = v1 - blured[i];
450
+ if (Math.abs(diff) >= thresholdFp) {
451
+ v2 = v1 + (amountFp * diff + 2048 >> 12);
452
+ v2 = v2 > 65280 ? 65280 : v2;
453
+ v2 = v2 < 0 ? 0 : v2;
454
+ v1 = v1 !== 0 ? v1 : 1;
455
+ vmul = (v2 << 12) / v1 | 0;
456
+ iTimes4 = i * 4;
457
+ img[iTimes4] = img[iTimes4] * vmul + 2048 >> 12;
458
+ img[iTimes4 + 1] = img[iTimes4 + 1] * vmul + 2048 >> 12;
459
+ img[iTimes4 + 2] = img[iTimes4 + 2] * vmul + 2048 >> 12;
460
+ }
461
+ }
462
+ };
463
+ }, { "glur/mono16": 18 }], 11: [function(_dereq_, module2, exports2) {
464
+ module2.exports = function unsharp(img, width, height, amount, radius, threshold) {
465
+ if (amount === 0 || radius < 0.5) {
466
+ return;
467
+ }
468
+ if (radius > 2) {
469
+ radius = 2;
470
+ }
471
+ var pixels = width * height;
472
+ var img_bytes_cnt = pixels * 4;
473
+ var hsv_bytes_cnt = pixels * 2;
474
+ var blur_bytes_cnt = pixels * 2;
475
+ var blur_line_byte_cnt = Math.max(width, height) * 4;
476
+ var blur_coeffs_byte_cnt = 8 * 4;
477
+ var img_offset = 0;
478
+ var hsv_offset = img_bytes_cnt;
479
+ var blur_offset = hsv_offset + hsv_bytes_cnt;
480
+ var blur_tmp_offset = blur_offset + blur_bytes_cnt;
481
+ var blur_line_offset = blur_tmp_offset + blur_bytes_cnt;
482
+ var blur_coeffs_offset = blur_line_offset + blur_line_byte_cnt;
483
+ var instance = this.__instance("unsharp_mask", img_bytes_cnt + hsv_bytes_cnt + blur_bytes_cnt * 2 + blur_line_byte_cnt + blur_coeffs_byte_cnt, {
484
+ exp: Math.exp
485
+ });
486
+ var img32 = new Uint32Array(img.buffer);
487
+ var mem32 = new Uint32Array(this.__memory.buffer);
488
+ mem32.set(img32);
489
+ var fn = instance.exports.hsv_v16 || instance.exports._hsv_v16;
490
+ fn(img_offset, hsv_offset, width, height);
491
+ fn = instance.exports.blurMono16 || instance.exports._blurMono16;
492
+ fn(hsv_offset, blur_offset, blur_tmp_offset, blur_line_offset, blur_coeffs_offset, width, height, radius);
493
+ fn = instance.exports.unsharp || instance.exports._unsharp;
494
+ fn(img_offset, img_offset, hsv_offset, blur_offset, width, height, amount, threshold);
495
+ img32.set(new Uint32Array(this.__memory.buffer, 0, pixels));
496
+ };
497
+ }, {}], 12: [function(_dereq_, module2, exports2) {
498
+ module2.exports = "AGFzbQEAAAAADAZkeWxpbmsAAAAAAAE0B2AAAGAEf39/fwBgBn9/f39/fwBgCH9/f39/f39/AGAIf39/f39/f30AYAJ9fwBgAXwBfAIZAgNlbnYDZXhwAAYDZW52Bm1lbW9yeQIAAAMHBgAFAgQBAwYGAX8AQQALB4oBCBFfX3dhc21fY2FsbF9jdG9ycwABFl9fYnVpbGRfZ2F1c3NpYW5fY29lZnMAAg5fX2dhdXNzMTZfbGluZQADCmJsdXJNb25vMTYABAdoc3ZfdjE2AAUHdW5zaGFycAAGDF9fZHNvX2hhbmRsZQMAGF9fd2FzbV9hcHBseV9kYXRhX3JlbG9jcwABCsUMBgMAAQvWAQEHfCABRNuGukOCGvs/IAC7oyICRAAAAAAAAADAohAAIgW2jDgCFCABIAKaEAAiAyADoCIGtjgCECABRAAAAAAAAPA/IAOhIgQgBKIgAyACIAKgokQAAAAAAADwP6AgBaGjIgS2OAIAIAEgBSAEmqIiB7Y4AgwgASADIAJEAAAAAAAA8D+gIASioiIItjgCCCABIAMgAkQAAAAAAADwv6AgBKKiIgK2OAIEIAEgByAIoCAFRAAAAAAAAPA/IAahoCIDo7Y4AhwgASAEIAKgIAOjtjgCGAuGBQMGfwl8An0gAyoCDCEVIAMqAgghFiADKgIUuyERIAMqAhC7IRACQCAEQQFrIghBAEgiCQRAIAIhByAAIQYMAQsgAiAALwEAuCIPIAMqAhi7oiIMIBGiIg0gDCAQoiAPIAMqAgS7IhOiIhQgAyoCALsiEiAPoqCgoCIOtjgCACACQQRqIQcgAEECaiEGIAhFDQAgCEEBIAhBAUgbIgpBf3MhCwJ/IAQgCmtBAXFFBEAgDiENIAgMAQsgAiANIA4gEKIgFCASIAAvAQK4Ig+ioKCgIg22OAIEIAJBCGohByAAQQRqIQYgDiEMIARBAmsLIQIgC0EAIARrRg0AA0AgByAMIBGiIA0gEKIgDyAToiASIAYvAQC4Ig6ioKCgIgy2OAIAIAcgDSARoiAMIBCiIA4gE6IgEiAGLwECuCIPoqCgoCINtjgCBCAHQQhqIQcgBkEEaiEGIAJBAkohACACQQJrIQIgAA0ACwsCQCAJDQAgASAFIAhsQQF0aiIAAn8gBkECay8BACICuCINIBW7IhKiIA0gFrsiE6KgIA0gAyoCHLuiIgwgEKKgIAwgEaKgIg8gB0EEayIHKgIAu6AiDkQAAAAAAADwQWMgDkQAAAAAAAAAAGZxBEAgDqsMAQtBAAs7AQAgCEUNACAGQQRrIQZBACAFa0EBdCEBA0ACfyANIBKiIAJB//8DcbgiDSAToqAgDyIOIBCioCAMIBGioCIPIAdBBGsiByoCALugIgxEAAAAAAAA8EFjIAxEAAAAAAAAAABmcQRAIAyrDAELQQALIQMgBi8BACECIAAgAWoiACADOwEAIAZBAmshBiAIQQFKIQMgDiEMIAhBAWshCCADDQALCwvRAgIBfwd8AkAgB0MAAAAAWw0AIARE24a6Q4Ia+z8gB0MAAAA/l7ujIglEAAAAAAAAAMCiEAAiDLaMOAIUIAQgCZoQACIKIAqgIg22OAIQIAREAAAAAAAA8D8gCqEiCyALoiAKIAkgCaCiRAAAAAAAAPA/oCAMoaMiC7Y4AgAgBCAMIAuaoiIOtjgCDCAEIAogCUQAAAAAAADwP6AgC6KiIg+2OAIIIAQgCiAJRAAAAAAAAPC/oCALoqIiCbY4AgQgBCAOIA+gIAxEAAAAAAAA8D8gDaGgIgqjtjgCHCAEIAsgCaAgCqO2OAIYIAYEQANAIAAgBSAIbEEBdGogAiAIQQF0aiADIAQgBSAGEAMgCEEBaiIIIAZHDQALCyAFRQ0AQQAhCANAIAIgBiAIbEEBdGogASAIQQF0aiADIAQgBiAFEAMgCEEBaiIIIAVHDQALCwtxAQN/IAIgA2wiBQRAA0AgASAAKAIAIgRBEHZB/wFxIgIgAiAEQQh2Qf8BcSIDIAMgBEH/AXEiBEkbIAIgA0sbIgYgBiAEIAIgBEsbIAMgBEsbQQh0OwEAIAFBAmohASAAQQRqIQAgBUEBayIFDQALCwuZAgIDfwF8IAQgBWwhBAJ/IAazQwAAgEWUQwAAyEKVu0QAAAAAAADgP6AiC5lEAAAAAAAA4EFjBEAgC6oMAQtBgICAgHgLIQUgBARAIAdBCHQhCUEAIQYDQCAJIAIgBkEBdCIHai8BACIBIAMgB2ovAQBrIgcgB0EfdSIIaiAIc00EQCAAIAZBAnQiCGoiCiAFIAdsQYAQakEMdSABaiIHQYD+AyAHQYD+A0gbIgdBACAHQQBKG0EMdCABQQEgARtuIgEgCi0AAGxBgBBqQQx2OgAAIAAgCEEBcmoiByABIActAABsQYAQakEMdjoAACAAIAhBAnJqIgcgASAHLQAAbEGAEGpBDHY6AAALIAZBAWoiBiAERw0ACwsL";
499
+ }, {}], 13: [function(_dereq_, module2, exports2) {
500
+ var GC_INTERVAL = 100;
501
+ function Pool(create, idle) {
502
+ this.create = create;
503
+ this.available = [];
504
+ this.acquired = {};
505
+ this.lastId = 1;
506
+ this.timeoutId = 0;
507
+ this.idle = idle || 2e3;
508
+ }
509
+ Pool.prototype.acquire = function() {
510
+ var _this = this;
511
+ var resource;
512
+ if (this.available.length !== 0) {
513
+ resource = this.available.pop();
514
+ } else {
515
+ resource = this.create();
516
+ resource.id = this.lastId++;
517
+ resource.release = function() {
518
+ return _this.release(resource);
519
+ };
520
+ }
521
+ this.acquired[resource.id] = resource;
522
+ return resource;
523
+ };
524
+ Pool.prototype.release = function(resource) {
525
+ var _this2 = this;
526
+ delete this.acquired[resource.id];
527
+ resource.lastUsed = Date.now();
528
+ this.available.push(resource);
529
+ if (this.timeoutId === 0) {
530
+ this.timeoutId = setTimeout(function() {
531
+ return _this2.gc();
532
+ }, GC_INTERVAL);
533
+ }
534
+ };
535
+ Pool.prototype.gc = function() {
536
+ var _this3 = this;
537
+ var now = Date.now();
538
+ this.available = this.available.filter(function(resource) {
539
+ if (now - resource.lastUsed > _this3.idle) {
540
+ resource.destroy();
541
+ return false;
542
+ }
543
+ return true;
544
+ });
545
+ if (this.available.length !== 0) {
546
+ this.timeoutId = setTimeout(function() {
547
+ return _this3.gc();
548
+ }, GC_INTERVAL);
549
+ } else {
550
+ this.timeoutId = 0;
551
+ }
552
+ };
553
+ module2.exports = Pool;
554
+ }, {}], 14: [function(_dereq_, module2, exports2) {
555
+ var MIN_INNER_TILE_SIZE = 2;
556
+ module2.exports = function createStages(fromWidth, fromHeight, toWidth, toHeight, srcTileSize, destTileBorder) {
557
+ var scaleX = toWidth / fromWidth;
558
+ var scaleY = toHeight / fromHeight;
559
+ var minScale = (2 * destTileBorder + MIN_INNER_TILE_SIZE + 1) / srcTileSize;
560
+ if (minScale > 0.5) return [[toWidth, toHeight]];
561
+ var stageCount = Math.ceil(Math.log(Math.min(scaleX, scaleY)) / Math.log(minScale));
562
+ if (stageCount <= 1) return [[toWidth, toHeight]];
563
+ var result = [];
564
+ for (var i = 0; i < stageCount; i++) {
565
+ var width = Math.round(Math.pow(Math.pow(fromWidth, stageCount - i - 1) * Math.pow(toWidth, i + 1), 1 / stageCount));
566
+ var height = Math.round(Math.pow(Math.pow(fromHeight, stageCount - i - 1) * Math.pow(toHeight, i + 1), 1 / stageCount));
567
+ result.push([width, height]);
568
+ }
569
+ return result;
570
+ };
571
+ }, {}], 15: [function(_dereq_, module2, exports2) {
572
+ var PIXEL_EPSILON = 1e-5;
573
+ function pixelFloor(x) {
574
+ var nearest = Math.round(x);
575
+ if (Math.abs(x - nearest) < PIXEL_EPSILON) {
576
+ return nearest;
577
+ }
578
+ return Math.floor(x);
579
+ }
580
+ function pixelCeil(x) {
581
+ var nearest = Math.round(x);
582
+ if (Math.abs(x - nearest) < PIXEL_EPSILON) {
583
+ return nearest;
584
+ }
585
+ return Math.ceil(x);
586
+ }
587
+ module2.exports = function createRegions(options) {
588
+ var scaleX = options.toWidth / options.width;
589
+ var scaleY = options.toHeight / options.height;
590
+ var innerTileWidth = pixelFloor(options.srcTileSize * scaleX) - 2 * options.destTileBorder;
591
+ var innerTileHeight = pixelFloor(options.srcTileSize * scaleY) - 2 * options.destTileBorder;
592
+ if (innerTileWidth < 1 || innerTileHeight < 1) {
593
+ throw new Error("Internal error in pica: target tile width/height is too small.");
594
+ }
595
+ var x, y;
596
+ var innerX, innerY, toTileWidth, toTileHeight;
597
+ var tiles = [];
598
+ var tile;
599
+ for (innerY = 0; innerY < options.toHeight; innerY += innerTileHeight) {
600
+ for (innerX = 0; innerX < options.toWidth; innerX += innerTileWidth) {
601
+ x = innerX - options.destTileBorder;
602
+ if (x < 0) {
603
+ x = 0;
604
+ }
605
+ toTileWidth = innerX + innerTileWidth + options.destTileBorder - x;
606
+ if (x + toTileWidth >= options.toWidth) {
607
+ toTileWidth = options.toWidth - x;
608
+ }
609
+ y = innerY - options.destTileBorder;
610
+ if (y < 0) {
611
+ y = 0;
612
+ }
613
+ toTileHeight = innerY + innerTileHeight + options.destTileBorder - y;
614
+ if (y + toTileHeight >= options.toHeight) {
615
+ toTileHeight = options.toHeight - y;
616
+ }
617
+ tile = {
618
+ toX: x,
619
+ toY: y,
620
+ toWidth: toTileWidth,
621
+ toHeight: toTileHeight,
622
+ toInnerX: innerX,
623
+ toInnerY: innerY,
624
+ toInnerWidth: innerTileWidth,
625
+ toInnerHeight: innerTileHeight,
626
+ offsetX: x / scaleX - pixelFloor(x / scaleX),
627
+ offsetY: y / scaleY - pixelFloor(y / scaleY),
628
+ scaleX,
629
+ scaleY,
630
+ x: pixelFloor(x / scaleX),
631
+ y: pixelFloor(y / scaleY),
632
+ width: pixelCeil(toTileWidth / scaleX),
633
+ height: pixelCeil(toTileHeight / scaleY)
634
+ };
635
+ tiles.push(tile);
636
+ }
637
+ }
638
+ return tiles;
639
+ };
640
+ }, {}], 16: [function(_dereq_, module2, exports2) {
641
+ function objClass(obj) {
642
+ return Object.prototype.toString.call(obj);
643
+ }
644
+ module2.exports.isCanvas = function isCanvas(element) {
645
+ var cname = objClass(element);
646
+ return cname === "[object HTMLCanvasElement]" || cname === "[object OffscreenCanvas]" || cname === "[object Canvas]";
647
+ };
648
+ module2.exports.isImage = function isImage(element) {
649
+ return objClass(element) === "[object HTMLImageElement]";
650
+ };
651
+ module2.exports.isImageBitmap = function isImageBitmap(element) {
652
+ return objClass(element) === "[object ImageBitmap]";
653
+ };
654
+ module2.exports.limiter = function limiter(concurrency) {
655
+ var active = 0, queue = [];
656
+ function roll() {
657
+ if (active < concurrency && queue.length) {
658
+ active++;
659
+ queue.shift()();
660
+ }
661
+ }
662
+ return function limit(fn) {
663
+ return new Promise(function(resolve, reject) {
664
+ queue.push(function() {
665
+ fn().then(function(result) {
666
+ resolve(result);
667
+ active--;
668
+ roll();
669
+ }, function(err) {
670
+ reject(err);
671
+ active--;
672
+ roll();
673
+ });
674
+ });
675
+ roll();
676
+ });
677
+ };
678
+ };
679
+ module2.exports.cib_quality_name = function cib_quality_name(num) {
680
+ switch (num) {
681
+ case 0:
682
+ return "pixelated";
683
+ case 1:
684
+ return "low";
685
+ case 2:
686
+ return "medium";
687
+ }
688
+ return "high";
689
+ };
690
+ module2.exports.cib_support = function cib_support(createCanvas) {
691
+ return Promise.resolve().then(function() {
692
+ if (typeof createImageBitmap === "undefined") {
693
+ return false;
694
+ }
695
+ var c = createCanvas(100, 100);
696
+ return createImageBitmap(c, 0, 0, 100, 100, {
697
+ resizeWidth: 10,
698
+ resizeHeight: 10,
699
+ resizeQuality: "high"
700
+ }).then(function(bitmap) {
701
+ var status = bitmap.width === 10;
702
+ bitmap.close();
703
+ c = null;
704
+ return status;
705
+ });
706
+ })["catch"](function() {
707
+ return false;
708
+ });
709
+ };
710
+ module2.exports.worker_offscreen_canvas_support = function worker_offscreen_canvas_support() {
711
+ return new Promise(function(resolve, reject) {
712
+ if (typeof OffscreenCanvas === "undefined") {
713
+ resolve(false);
714
+ return;
715
+ }
716
+ function workerPayload(self) {
717
+ if (typeof createImageBitmap === "undefined") {
718
+ self.postMessage(false);
719
+ return;
720
+ }
721
+ Promise.resolve().then(function() {
722
+ var canvas = new OffscreenCanvas(10, 10);
723
+ var ctx = canvas.getContext("2d");
724
+ ctx.rect(0, 0, 1, 1);
725
+ return createImageBitmap(canvas, 0, 0, 1, 1);
726
+ }).then(function() {
727
+ return self.postMessage(true);
728
+ }, function() {
729
+ return self.postMessage(false);
730
+ });
731
+ }
732
+ var code = btoa("(".concat(workerPayload.toString(), ")(self);"));
733
+ var w = new Worker("data:text/javascript;base64,".concat(code));
734
+ w.onmessage = function(ev) {
735
+ return resolve(ev.data);
736
+ };
737
+ w.onerror = reject;
738
+ }).then(function(result) {
739
+ return result;
740
+ }, function() {
741
+ return false;
742
+ });
743
+ };
744
+ module2.exports.can_use_canvas = function can_use_canvas(createCanvas) {
745
+ var usable = false;
746
+ try {
747
+ var canvas = createCanvas(2, 1);
748
+ var ctx = canvas.getContext("2d");
749
+ var d = ctx.createImageData(2, 1);
750
+ d.data[0] = 12;
751
+ d.data[1] = 23;
752
+ d.data[2] = 34;
753
+ d.data[3] = 255;
754
+ d.data[4] = 45;
755
+ d.data[5] = 56;
756
+ d.data[6] = 67;
757
+ d.data[7] = 255;
758
+ ctx.putImageData(d, 0, 0);
759
+ d = null;
760
+ d = ctx.getImageData(0, 0, 2, 1);
761
+ if (d.data[0] === 12 && d.data[1] === 23 && d.data[2] === 34 && d.data[3] === 255 && d.data[4] === 45 && d.data[5] === 56 && d.data[6] === 67 && d.data[7] === 255) {
762
+ usable = true;
763
+ }
764
+ } catch (err) {
765
+ }
766
+ return usable;
767
+ };
768
+ module2.exports.cib_can_use_region = function cib_can_use_region() {
769
+ return new Promise(function(resolve) {
770
+ if (typeof createImageBitmap === "undefined") {
771
+ resolve(false);
772
+ return;
773
+ }
774
+ var image = new Image();
775
+ image.src = "data:image/jpeg;base64,/9j/4QBiRXhpZgAATU0AKgAAAAgABQESAAMAAAABAAYAAAEaAAUAAAABAAAASgEbAAUAAAABAAAAUgEoAAMAAAABAAIAAAITAAMAAAABAAEAAAAAAAAAAABIAAAAAQAAAEgAAAAB/9sAQwAEAwMEAwMEBAMEBQQEBQYKBwYGBgYNCQoICg8NEBAPDQ8OERMYFBESFxIODxUcFRcZGRsbGxAUHR8dGh8YGhsa/9sAQwEEBQUGBQYMBwcMGhEPERoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoa/8IAEQgAAQACAwERAAIRAQMRAf/EABQAAQAAAAAAAAAAAAAAAAAAAAf/xAAUAQEAAAAAAAAAAAAAAAAAAAAA/9oADAMBAAIQAxAAAAF/P//EABQQAQAAAAAAAAAAAAAAAAAAAAD/2gAIAQEAAQUCf//EABQRAQAAAAAAAAAAAAAAAAAAAAD/2gAIAQMBAT8Bf//EABQRAQAAAAAAAAAAAAAAAAAAAAD/2gAIAQIBAT8Bf//EABQQAQAAAAAAAAAAAAAAAAAAAAD/2gAIAQEABj8Cf//EABQQAQAAAAAAAAAAAAAAAAAAAAD/2gAIAQEAAT8hf//aAAwDAQACAAMAAAAQH//EABQRAQAAAAAAAAAAAAAAAAAAAAD/2gAIAQMBAT8Qf//EABQRAQAAAAAAAAAAAAAAAAAAAAD/2gAIAQIBAT8Qf//EABQQAQAAAAAAAAAAAAAAAAAAAAD/2gAIAQEAAT8Qf//Z";
776
+ image.onload = function() {
777
+ createImageBitmap(image, 0, 0, image.width, image.height).then(function(bitmap) {
778
+ if (bitmap.width === image.width && bitmap.height === image.height) {
779
+ resolve(true);
780
+ } else {
781
+ resolve(false);
782
+ }
783
+ }, function() {
784
+ return resolve(false);
785
+ });
786
+ };
787
+ image.onerror = function() {
788
+ return resolve(false);
789
+ };
790
+ });
791
+ };
792
+ }, {}], 17: [function(_dereq_, module2, exports2) {
793
+ module2.exports = function() {
794
+ var MathLib = _dereq_("./mathlib");
795
+ var mathLib;
796
+ onmessage = function onmessage2(ev) {
797
+ var tileOpts = ev.data.opts;
798
+ var returnBitmap = false;
799
+ if (!tileOpts.src && tileOpts.srcBitmap) {
800
+ var canvas = new OffscreenCanvas(tileOpts.width, tileOpts.height);
801
+ var ctx = canvas.getContext("2d", {
802
+ alpha: Boolean(tileOpts.alpha)
803
+ });
804
+ ctx.drawImage(tileOpts.srcBitmap, 0, 0);
805
+ tileOpts.src = ctx.getImageData(0, 0, tileOpts.width, tileOpts.height).data;
806
+ canvas.width = canvas.height = 0;
807
+ canvas = null;
808
+ tileOpts.srcBitmap.close();
809
+ tileOpts.srcBitmap = null;
810
+ returnBitmap = true;
811
+ }
812
+ if (!mathLib) mathLib = new MathLib(ev.data.features);
813
+ var data = mathLib.resizeAndUnsharp(tileOpts);
814
+ if (returnBitmap) {
815
+ var toImageData = new ImageData(new Uint8ClampedArray(data), tileOpts.toWidth, tileOpts.toHeight);
816
+ var _canvas = new OffscreenCanvas(tileOpts.toWidth, tileOpts.toHeight);
817
+ var _ctx = _canvas.getContext("2d", {
818
+ alpha: Boolean(tileOpts.alpha)
819
+ });
820
+ _ctx.putImageData(toImageData, 0, 0);
821
+ createImageBitmap(_canvas).then(function(bitmap) {
822
+ postMessage({
823
+ bitmap
824
+ }, [bitmap]);
825
+ });
826
+ } else {
827
+ postMessage({
828
+ data
829
+ }, [data.buffer]);
830
+ }
831
+ };
832
+ };
833
+ }, { "./mathlib": 1 }], 18: [function(_dereq_, module2, exports2) {
834
+ var a0, a1, a2, a3, b1, b2, left_corner, right_corner;
835
+ function gaussCoef(sigma) {
836
+ if (sigma < 0.5) {
837
+ sigma = 0.5;
838
+ }
839
+ var a = Math.exp(0.726 * 0.726) / sigma, g1 = Math.exp(-a), g2 = Math.exp(-2 * a), k = (1 - g1) * (1 - g1) / (1 + 2 * a * g1 - g2);
840
+ a0 = k;
841
+ a1 = k * (a - 1) * g1;
842
+ a2 = k * (a + 1) * g1;
843
+ a3 = -k * g2;
844
+ b1 = 2 * g1;
845
+ b2 = -g2;
846
+ left_corner = (a0 + a1) / (1 - b1 - b2);
847
+ right_corner = (a2 + a3) / (1 - b1 - b2);
848
+ return new Float32Array([a0, a1, a2, a3, b1, b2, left_corner, right_corner]);
849
+ }
850
+ function convolveMono16(src, out, line, coeff, width, height) {
851
+ var prev_src, curr_src, curr_out, prev_out, prev_prev_out;
852
+ var src_index, out_index, line_index;
853
+ var i, j;
854
+ var coeff_a0, coeff_a1, coeff_b1, coeff_b2;
855
+ for (i = 0; i < height; i++) {
856
+ src_index = i * width;
857
+ out_index = i;
858
+ line_index = 0;
859
+ prev_src = src[src_index];
860
+ prev_prev_out = prev_src * coeff[6];
861
+ prev_out = prev_prev_out;
862
+ coeff_a0 = coeff[0];
863
+ coeff_a1 = coeff[1];
864
+ coeff_b1 = coeff[4];
865
+ coeff_b2 = coeff[5];
866
+ for (j = 0; j < width; j++) {
867
+ curr_src = src[src_index];
868
+ curr_out = curr_src * coeff_a0 + prev_src * coeff_a1 + prev_out * coeff_b1 + prev_prev_out * coeff_b2;
869
+ prev_prev_out = prev_out;
870
+ prev_out = curr_out;
871
+ prev_src = curr_src;
872
+ line[line_index] = prev_out;
873
+ line_index++;
874
+ src_index++;
875
+ }
876
+ src_index--;
877
+ line_index--;
878
+ out_index += height * (width - 1);
879
+ prev_src = src[src_index];
880
+ prev_prev_out = prev_src * coeff[7];
881
+ prev_out = prev_prev_out;
882
+ curr_src = prev_src;
883
+ coeff_a0 = coeff[2];
884
+ coeff_a1 = coeff[3];
885
+ for (j = width - 1; j >= 0; j--) {
886
+ curr_out = curr_src * coeff_a0 + prev_src * coeff_a1 + prev_out * coeff_b1 + prev_prev_out * coeff_b2;
887
+ prev_prev_out = prev_out;
888
+ prev_out = curr_out;
889
+ prev_src = curr_src;
890
+ curr_src = src[src_index];
891
+ out[out_index] = line[line_index] + prev_out;
892
+ src_index--;
893
+ line_index--;
894
+ out_index -= height;
895
+ }
896
+ }
897
+ }
898
+ function blurMono16(src, width, height, radius) {
899
+ if (!radius) {
900
+ return;
901
+ }
902
+ var out = new Uint16Array(src.length), tmp_line = new Float32Array(Math.max(width, height));
903
+ var coeff = gaussCoef(radius);
904
+ convolveMono16(src, out, tmp_line, coeff, width, height);
905
+ convolveMono16(out, src, tmp_line, coeff, height, width);
906
+ }
907
+ module2.exports = blurMono16;
908
+ }, {}], 19: [function(_dereq_, module2, exports2) {
909
+ if (typeof Object.create === "function") {
910
+ module2.exports = function inherits(ctor, superCtor) {
911
+ if (superCtor) {
912
+ ctor.super_ = superCtor;
913
+ ctor.prototype = Object.create(superCtor.prototype, {
914
+ constructor: {
915
+ value: ctor,
916
+ enumerable: false,
917
+ writable: true,
918
+ configurable: true
919
+ }
920
+ });
921
+ }
922
+ };
923
+ } else {
924
+ module2.exports = function inherits(ctor, superCtor) {
925
+ if (superCtor) {
926
+ ctor.super_ = superCtor;
927
+ var TempCtor = function() {
928
+ };
929
+ TempCtor.prototype = superCtor.prototype;
930
+ ctor.prototype = new TempCtor();
931
+ ctor.prototype.constructor = ctor;
932
+ }
933
+ };
934
+ }
935
+ }, {}], 20: [function(_dereq_, module2, exports2) {
936
+ var assign3 = _dereq_("object-assign");
937
+ var base64decode = _dereq_("./lib/base64decode");
938
+ var hasWebAssembly = _dereq_("./lib/wa_detect");
939
+ var DEFAULT_OPTIONS = {
940
+ js: true,
941
+ wasm: true
942
+ };
943
+ function MultiMath(options) {
944
+ if (!(this instanceof MultiMath)) return new MultiMath(options);
945
+ var opts = assign3({}, DEFAULT_OPTIONS, options || {});
946
+ this.options = opts;
947
+ this.__cache = {};
948
+ this.__init_promise = null;
949
+ this.__modules = opts.modules || {};
950
+ this.__memory = null;
951
+ this.__wasm = {};
952
+ this.__isLE = new Uint32Array(new Uint8Array([1, 0, 0, 0]).buffer)[0] === 1;
953
+ if (!this.options.js && !this.options.wasm) {
954
+ throw new Error('mathlib: at least "js" or "wasm" should be enabled');
955
+ }
956
+ }
957
+ MultiMath.prototype.has_wasm = hasWebAssembly;
958
+ MultiMath.prototype.use = function(module3) {
959
+ this.__modules[module3.name] = module3;
960
+ if (this.options.wasm && this.has_wasm() && module3.wasm_fn) {
961
+ this[module3.name] = module3.wasm_fn;
962
+ } else {
963
+ this[module3.name] = module3.fn;
964
+ }
965
+ return this;
966
+ };
967
+ MultiMath.prototype.init = function() {
968
+ if (this.__init_promise) return this.__init_promise;
969
+ if (!this.options.js && this.options.wasm && !this.has_wasm()) {
970
+ return Promise.reject(new Error(`mathlib: only "wasm" was enabled, but it's not supported`));
971
+ }
972
+ var self = this;
973
+ this.__init_promise = Promise.all(Object.keys(self.__modules).map(function(name) {
974
+ var module3 = self.__modules[name];
975
+ if (!self.options.wasm || !self.has_wasm() || !module3.wasm_fn) return null;
976
+ if (self.__wasm[name]) return null;
977
+ return WebAssembly.compile(self.__base64decode(module3.wasm_src)).then(function(m) {
978
+ self.__wasm[name] = m;
979
+ });
980
+ })).then(function() {
981
+ return self;
982
+ });
983
+ return this.__init_promise;
984
+ };
985
+ MultiMath.prototype.__base64decode = base64decode;
986
+ MultiMath.prototype.__reallocate = function mem_grow_to(bytes) {
987
+ if (!this.__memory) {
988
+ this.__memory = new WebAssembly.Memory({
989
+ initial: Math.ceil(bytes / (64 * 1024))
990
+ });
991
+ return this.__memory;
992
+ }
993
+ var mem_size = this.__memory.buffer.byteLength;
994
+ if (mem_size < bytes) {
995
+ this.__memory.grow(Math.ceil((bytes - mem_size) / (64 * 1024)));
996
+ }
997
+ return this.__memory;
998
+ };
999
+ MultiMath.prototype.__instance = function instance(name, memsize, env_extra) {
1000
+ if (memsize) this.__reallocate(memsize);
1001
+ if (!this.__wasm[name]) {
1002
+ var module3 = this.__modules[name];
1003
+ this.__wasm[name] = new WebAssembly.Module(this.__base64decode(module3.wasm_src));
1004
+ }
1005
+ if (!this.__cache[name]) {
1006
+ var env_base = {
1007
+ memoryBase: 0,
1008
+ memory: this.__memory,
1009
+ tableBase: 0,
1010
+ table: new WebAssembly.Table({ initial: 0, element: "anyfunc" })
1011
+ };
1012
+ this.__cache[name] = new WebAssembly.Instance(this.__wasm[name], {
1013
+ env: assign3(env_base, env_extra || {})
1014
+ });
1015
+ }
1016
+ return this.__cache[name];
1017
+ };
1018
+ MultiMath.prototype.__align = function align(number, base) {
1019
+ base = base || 8;
1020
+ var reminder = number % base;
1021
+ return number + (reminder ? base - reminder : 0);
1022
+ };
1023
+ module2.exports = MultiMath;
1024
+ }, { "./lib/base64decode": 21, "./lib/wa_detect": 22, "object-assign": 23 }], 21: [function(_dereq_, module2, exports2) {
1025
+ var BASE64_MAP = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
1026
+ module2.exports = function base64decode(str) {
1027
+ var input = str.replace(/[\r\n=]/g, ""), max = input.length;
1028
+ var out = new Uint8Array(max * 3 >> 2);
1029
+ var bits = 0;
1030
+ var ptr = 0;
1031
+ for (var idx = 0; idx < max; idx++) {
1032
+ if (idx % 4 === 0 && idx) {
1033
+ out[ptr++] = bits >> 16 & 255;
1034
+ out[ptr++] = bits >> 8 & 255;
1035
+ out[ptr++] = bits & 255;
1036
+ }
1037
+ bits = bits << 6 | BASE64_MAP.indexOf(input.charAt(idx));
1038
+ }
1039
+ var tailbits = max % 4 * 6;
1040
+ if (tailbits === 0) {
1041
+ out[ptr++] = bits >> 16 & 255;
1042
+ out[ptr++] = bits >> 8 & 255;
1043
+ out[ptr++] = bits & 255;
1044
+ } else if (tailbits === 18) {
1045
+ out[ptr++] = bits >> 10 & 255;
1046
+ out[ptr++] = bits >> 2 & 255;
1047
+ } else if (tailbits === 12) {
1048
+ out[ptr++] = bits >> 4 & 255;
1049
+ }
1050
+ return out;
1051
+ };
1052
+ }, {}], 22: [function(_dereq_, module2, exports2) {
1053
+ var wa;
1054
+ module2.exports = function hasWebAssembly() {
1055
+ if (typeof wa !== "undefined") return wa;
1056
+ wa = false;
1057
+ if (typeof WebAssembly === "undefined") return wa;
1058
+ try {
1059
+ var bin = new Uint8Array([0, 97, 115, 109, 1, 0, 0, 0, 1, 6, 1, 96, 1, 127, 1, 127, 3, 2, 1, 0, 5, 3, 1, 0, 1, 7, 8, 1, 4, 116, 101, 115, 116, 0, 0, 10, 16, 1, 14, 0, 32, 0, 65, 1, 54, 2, 0, 32, 0, 40, 2, 0, 11]);
1060
+ var module3 = new WebAssembly.Module(bin);
1061
+ var instance = new WebAssembly.Instance(module3, {});
1062
+ if (instance.exports.test(4) !== 0) wa = true;
1063
+ return wa;
1064
+ } catch (__) {
1065
+ }
1066
+ return wa;
1067
+ };
1068
+ }, {}], 23: [function(_dereq_, module2, exports2) {
1069
+ var getOwnPropertySymbols = Object.getOwnPropertySymbols;
1070
+ var hasOwnProperty = Object.prototype.hasOwnProperty;
1071
+ var propIsEnumerable = Object.prototype.propertyIsEnumerable;
1072
+ function toObject(val) {
1073
+ if (val === null || val === void 0) {
1074
+ throw new TypeError("Object.assign cannot be called with null or undefined");
1075
+ }
1076
+ return Object(val);
1077
+ }
1078
+ function shouldUseNative() {
1079
+ try {
1080
+ if (!Object.assign) {
1081
+ return false;
1082
+ }
1083
+ var test1 = new String("abc");
1084
+ test1[5] = "de";
1085
+ if (Object.getOwnPropertyNames(test1)[0] === "5") {
1086
+ return false;
1087
+ }
1088
+ var test2 = {};
1089
+ for (var i = 0; i < 10; i++) {
1090
+ test2["_" + String.fromCharCode(i)] = i;
1091
+ }
1092
+ var order2 = Object.getOwnPropertyNames(test2).map(function(n) {
1093
+ return test2[n];
1094
+ });
1095
+ if (order2.join("") !== "0123456789") {
1096
+ return false;
1097
+ }
1098
+ var test3 = {};
1099
+ "abcdefghijklmnopqrst".split("").forEach(function(letter) {
1100
+ test3[letter] = letter;
1101
+ });
1102
+ if (Object.keys(Object.assign({}, test3)).join("") !== "abcdefghijklmnopqrst") {
1103
+ return false;
1104
+ }
1105
+ return true;
1106
+ } catch (err) {
1107
+ return false;
1108
+ }
1109
+ }
1110
+ module2.exports = shouldUseNative() ? Object.assign : function(target, source) {
1111
+ var from;
1112
+ var to = toObject(target);
1113
+ var symbols;
1114
+ for (var s = 1; s < arguments.length; s++) {
1115
+ from = Object(arguments[s]);
1116
+ for (var key in from) {
1117
+ if (hasOwnProperty.call(from, key)) {
1118
+ to[key] = from[key];
1119
+ }
1120
+ }
1121
+ if (getOwnPropertySymbols) {
1122
+ symbols = getOwnPropertySymbols(from);
1123
+ for (var i = 0; i < symbols.length; i++) {
1124
+ if (propIsEnumerable.call(from, symbols[i])) {
1125
+ to[symbols[i]] = from[symbols[i]];
1126
+ }
1127
+ }
1128
+ }
1129
+ }
1130
+ return to;
1131
+ };
1132
+ }, {}], 24: [function(_dereq_, module2, exports2) {
1133
+ var bundleFn = arguments[3];
1134
+ var sources = arguments[4];
1135
+ var cache = arguments[5];
1136
+ var stringify = JSON.stringify;
1137
+ module2.exports = function(fn, options) {
1138
+ var wkey;
1139
+ var cacheKeys = Object.keys(cache);
1140
+ for (var i = 0, l = cacheKeys.length; i < l; i++) {
1141
+ var key = cacheKeys[i];
1142
+ var exp = cache[key].exports;
1143
+ if (exp === fn || exp && exp.default === fn) {
1144
+ wkey = key;
1145
+ break;
1146
+ }
1147
+ }
1148
+ if (!wkey) {
1149
+ wkey = Math.floor(Math.pow(16, 8) * Math.random()).toString(16);
1150
+ var wcache = {};
1151
+ for (var i = 0, l = cacheKeys.length; i < l; i++) {
1152
+ var key = cacheKeys[i];
1153
+ wcache[key] = key;
1154
+ }
1155
+ sources[wkey] = [
1156
+ "function(require,module,exports){" + fn + "(self); }",
1157
+ wcache
1158
+ ];
1159
+ }
1160
+ var skey = Math.floor(Math.pow(16, 8) * Math.random()).toString(16);
1161
+ var scache = {};
1162
+ scache[wkey] = wkey;
1163
+ sources[skey] = [
1164
+ "function(require,module,exports){var f = require(" + stringify(wkey) + ");(f.default ? f.default : f)(self);}",
1165
+ scache
1166
+ ];
1167
+ var workerSources = {};
1168
+ resolveSources(skey);
1169
+ function resolveSources(key2) {
1170
+ workerSources[key2] = true;
1171
+ for (var depPath in sources[key2][1]) {
1172
+ var depKey = sources[key2][1][depPath];
1173
+ if (!workerSources[depKey]) {
1174
+ resolveSources(depKey);
1175
+ }
1176
+ }
1177
+ }
1178
+ var src = "(" + bundleFn + ")({" + Object.keys(workerSources).map(function(key2) {
1179
+ return stringify(key2) + ":[" + sources[key2][0] + "," + stringify(sources[key2][1]) + "]";
1180
+ }).join(",") + "},{},[" + stringify(skey) + "])";
1181
+ var URL = window.URL || window.webkitURL || window.mozURL || window.msURL;
1182
+ var blob = new Blob([src], { type: "text/javascript" });
1183
+ if (options && options.bare) {
1184
+ return blob;
1185
+ }
1186
+ var workerUrl = URL.createObjectURL(blob);
1187
+ var worker = new Worker(workerUrl);
1188
+ worker.objectURL = workerUrl;
1189
+ return worker;
1190
+ };
1191
+ }, {}], "/index.js": [function(_dereq_, module2, exports2) {
1192
+ function _slicedToArray(arr, i) {
1193
+ return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest();
1194
+ }
1195
+ function _nonIterableRest() {
1196
+ throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
1197
+ }
1198
+ function _unsupportedIterableToArray(o, minLen) {
1199
+ if (!o) return;
1200
+ if (typeof o === "string") return _arrayLikeToArray(o, minLen);
1201
+ var n = Object.prototype.toString.call(o).slice(8, -1);
1202
+ if (n === "Object" && o.constructor) n = o.constructor.name;
1203
+ if (n === "Map" || n === "Set") return Array.from(o);
1204
+ if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);
1205
+ }
1206
+ function _arrayLikeToArray(arr, len) {
1207
+ if (len == null || len > arr.length) len = arr.length;
1208
+ for (var i = 0, arr2 = new Array(len); i < len; i++) {
1209
+ arr2[i] = arr[i];
1210
+ }
1211
+ return arr2;
1212
+ }
1213
+ function _iterableToArrayLimit(arr, i) {
1214
+ var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"];
1215
+ if (_i == null) return;
1216
+ var _arr = [];
1217
+ var _n = true;
1218
+ var _d = false;
1219
+ var _s, _e;
1220
+ try {
1221
+ for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) {
1222
+ _arr.push(_s.value);
1223
+ if (i && _arr.length === i) break;
1224
+ }
1225
+ } catch (err) {
1226
+ _d = true;
1227
+ _e = err;
1228
+ } finally {
1229
+ try {
1230
+ if (!_n && _i["return"] != null) _i["return"]();
1231
+ } finally {
1232
+ if (_d) throw _e;
1233
+ }
1234
+ }
1235
+ return _arr;
1236
+ }
1237
+ function _arrayWithHoles(arr) {
1238
+ if (Array.isArray(arr)) return arr;
1239
+ }
1240
+ var assign3 = _dereq_("object-assign");
1241
+ var webworkify = _dereq_("webworkify");
1242
+ var MathLib = _dereq_("./lib/mathlib");
1243
+ var Pool = _dereq_("./lib/pool");
1244
+ var utils2 = _dereq_("./lib/utils");
1245
+ var worker = _dereq_("./lib/worker");
1246
+ var createStages = _dereq_("./lib/stepper");
1247
+ var createRegions = _dereq_("./lib/tiler");
1248
+ var singletones = {};
1249
+ var NEED_SAFARI_FIX = false;
1250
+ try {
1251
+ if (typeof navigator !== "undefined" && navigator.userAgent) {
1252
+ NEED_SAFARI_FIX = navigator.userAgent.indexOf("Safari") >= 0;
1253
+ }
1254
+ } catch (e) {
1255
+ }
1256
+ var concurrency = 1;
1257
+ if (typeof navigator !== "undefined") {
1258
+ concurrency = Math.min(navigator.hardwareConcurrency || 1, 4);
1259
+ }
1260
+ var DEFAULT_PICA_OPTS = {
1261
+ tile: 1024,
1262
+ concurrency,
1263
+ features: ["js", "wasm", "ww"],
1264
+ idle: 2e3,
1265
+ createCanvas: function createCanvas(width, height) {
1266
+ var tmpCanvas = document.createElement("canvas");
1267
+ tmpCanvas.width = width;
1268
+ tmpCanvas.height = height;
1269
+ return tmpCanvas;
1270
+ }
1271
+ };
1272
+ var DEFAULT_RESIZE_OPTS = {
1273
+ quality: 3,
1274
+ alpha: false,
1275
+ unsharpAmount: 0,
1276
+ unsharpRadius: 0,
1277
+ unsharpThreshold: 0
1278
+ };
1279
+ var CAN_NEW_IMAGE_DATA = false;
1280
+ var CAN_CREATE_IMAGE_BITMAP = false;
1281
+ var CAN_USE_CANVAS_GET_IMAGE_DATA = false;
1282
+ var CAN_USE_OFFSCREEN_CANVAS = false;
1283
+ var CAN_USE_CIB_REGION_FOR_IMAGE = false;
1284
+ function workerFabric() {
1285
+ return {
1286
+ value: webworkify(worker),
1287
+ destroy: function destroy() {
1288
+ this.value.terminate();
1289
+ if (typeof window !== "undefined") {
1290
+ var url = window.URL || window.webkitURL || window.mozURL || window.msURL;
1291
+ if (url && url.revokeObjectURL && this.value.objectURL) {
1292
+ url.revokeObjectURL(this.value.objectURL);
1293
+ }
1294
+ }
1295
+ }
1296
+ };
1297
+ }
1298
+ function Pica(options) {
1299
+ if (!(this instanceof Pica)) return new Pica(options);
1300
+ this.options = assign3({}, DEFAULT_PICA_OPTS, options || {});
1301
+ var limiter_key = "lk_".concat(this.options.concurrency);
1302
+ this.__limit = singletones[limiter_key] || utils2.limiter(this.options.concurrency);
1303
+ if (!singletones[limiter_key]) singletones[limiter_key] = this.__limit;
1304
+ this.features = {
1305
+ js: false,
1306
+ // pure JS implementation, can be disabled for testing
1307
+ wasm: false,
1308
+ // webassembly implementation for heavy functions
1309
+ cib: false,
1310
+ // resize via createImageBitmap (only FF at this moment)
1311
+ ww: false
1312
+ // webworkers
1313
+ };
1314
+ this.__workersPool = null;
1315
+ this.__requested_features = [];
1316
+ this.__mathlib = null;
1317
+ }
1318
+ Pica.prototype.init = function() {
1319
+ var _this = this;
1320
+ if (this.__initPromise) return this.__initPromise;
1321
+ if (typeof ImageData !== "undefined" && typeof Uint8ClampedArray !== "undefined") {
1322
+ try {
1323
+ new ImageData(new Uint8ClampedArray(400), 10, 10);
1324
+ CAN_NEW_IMAGE_DATA = true;
1325
+ } catch (__) {
1326
+ }
1327
+ }
1328
+ if (typeof ImageBitmap !== "undefined") {
1329
+ if (ImageBitmap.prototype && ImageBitmap.prototype.close) {
1330
+ CAN_CREATE_IMAGE_BITMAP = true;
1331
+ } else {
1332
+ this.debug("ImageBitmap does not support .close(), disabled");
1333
+ }
1334
+ }
1335
+ var features = this.options.features.slice();
1336
+ if (features.indexOf("all") >= 0) {
1337
+ features = ["cib", "wasm", "js", "ww"];
1338
+ }
1339
+ this.__requested_features = features;
1340
+ this.__mathlib = new MathLib(features);
1341
+ if (features.indexOf("ww") >= 0) {
1342
+ if (typeof window !== "undefined" && "Worker" in window) {
1343
+ try {
1344
+ var wkr = _dereq_("webworkify")(function() {
1345
+ });
1346
+ wkr.terminate();
1347
+ this.features.ww = true;
1348
+ var wpool_key = "wp_".concat(JSON.stringify(this.options));
1349
+ if (singletones[wpool_key]) {
1350
+ this.__workersPool = singletones[wpool_key];
1351
+ } else {
1352
+ this.__workersPool = new Pool(workerFabric, this.options.idle);
1353
+ singletones[wpool_key] = this.__workersPool;
1354
+ }
1355
+ } catch (__) {
1356
+ }
1357
+ }
1358
+ }
1359
+ var initMath = this.__mathlib.init().then(function(mathlib) {
1360
+ assign3(_this.features, mathlib.features);
1361
+ });
1362
+ var checkCibResize;
1363
+ if (!CAN_CREATE_IMAGE_BITMAP) {
1364
+ checkCibResize = Promise.resolve(false);
1365
+ } else {
1366
+ checkCibResize = utils2.cib_support(this.options.createCanvas).then(function(status) {
1367
+ if (_this.features.cib && features.indexOf("cib") < 0) {
1368
+ _this.debug("createImageBitmap() resize supported, but disabled by config");
1369
+ return;
1370
+ }
1371
+ if (features.indexOf("cib") >= 0) _this.features.cib = status;
1372
+ });
1373
+ }
1374
+ CAN_USE_CANVAS_GET_IMAGE_DATA = utils2.can_use_canvas(this.options.createCanvas);
1375
+ var checkOffscreenCanvas;
1376
+ if (CAN_CREATE_IMAGE_BITMAP && CAN_NEW_IMAGE_DATA && features.indexOf("ww") !== -1) {
1377
+ checkOffscreenCanvas = utils2.worker_offscreen_canvas_support();
1378
+ } else {
1379
+ checkOffscreenCanvas = Promise.resolve(false);
1380
+ }
1381
+ checkOffscreenCanvas = checkOffscreenCanvas.then(function(result) {
1382
+ CAN_USE_OFFSCREEN_CANVAS = result;
1383
+ });
1384
+ var checkCibRegion = utils2.cib_can_use_region().then(function(result) {
1385
+ CAN_USE_CIB_REGION_FOR_IMAGE = result;
1386
+ });
1387
+ this.__initPromise = Promise.all([initMath, checkCibResize, checkOffscreenCanvas, checkCibRegion]).then(function() {
1388
+ return _this;
1389
+ });
1390
+ return this.__initPromise;
1391
+ };
1392
+ Pica.prototype.__invokeResize = function(tileOpts, opts) {
1393
+ var _this2 = this;
1394
+ opts.__mathCache = opts.__mathCache || {};
1395
+ return Promise.resolve().then(function() {
1396
+ if (!_this2.features.ww) {
1397
+ return {
1398
+ data: _this2.__mathlib.resizeAndUnsharp(tileOpts, opts.__mathCache)
1399
+ };
1400
+ }
1401
+ return new Promise(function(resolve, reject) {
1402
+ var w = _this2.__workersPool.acquire();
1403
+ if (opts.cancelToken) opts.cancelToken["catch"](function(err) {
1404
+ return reject(err);
1405
+ });
1406
+ w.value.onmessage = function(ev) {
1407
+ w.release();
1408
+ if (ev.data.err) reject(ev.data.err);
1409
+ else resolve(ev.data);
1410
+ };
1411
+ var transfer = [];
1412
+ if (tileOpts.src) transfer.push(tileOpts.src.buffer);
1413
+ if (tileOpts.srcBitmap) transfer.push(tileOpts.srcBitmap);
1414
+ w.value.postMessage({
1415
+ opts: tileOpts,
1416
+ features: _this2.__requested_features,
1417
+ preload: {
1418
+ wasm_nodule: _this2.__mathlib.__
1419
+ }
1420
+ }, transfer);
1421
+ });
1422
+ });
1423
+ };
1424
+ Pica.prototype.__extractTileData = function(tile, from, opts, stageEnv, extractTo) {
1425
+ if (this.features.ww && CAN_USE_OFFSCREEN_CANVAS && // createImageBitmap doesn't work for images (Image, ImageBitmap) with Exif orientation in Chrome,
1426
+ // can use canvas because canvas doesn't have orientation;
1427
+ // see https://bugs.chromium.org/p/chromium/issues/detail?id=1220671
1428
+ (utils2.isCanvas(from) || CAN_USE_CIB_REGION_FOR_IMAGE)) {
1429
+ this.debug("Create tile for OffscreenCanvas");
1430
+ return createImageBitmap(stageEnv.srcImageBitmap || from, tile.x, tile.y, tile.width, tile.height).then(function(bitmap) {
1431
+ extractTo.srcBitmap = bitmap;
1432
+ return extractTo;
1433
+ });
1434
+ }
1435
+ if (utils2.isCanvas(from)) {
1436
+ if (!stageEnv.srcCtx) stageEnv.srcCtx = from.getContext("2d", {
1437
+ alpha: Boolean(opts.alpha)
1438
+ });
1439
+ this.debug("Get tile pixel data");
1440
+ extractTo.src = stageEnv.srcCtx.getImageData(tile.x, tile.y, tile.width, tile.height).data;
1441
+ return extractTo;
1442
+ }
1443
+ this.debug("Draw tile imageBitmap/image to temporary canvas");
1444
+ var tmpCanvas = this.options.createCanvas(tile.width, tile.height);
1445
+ var tmpCtx = tmpCanvas.getContext("2d", {
1446
+ alpha: Boolean(opts.alpha)
1447
+ });
1448
+ tmpCtx.globalCompositeOperation = "copy";
1449
+ tmpCtx.drawImage(stageEnv.srcImageBitmap || from, tile.x, tile.y, tile.width, tile.height, 0, 0, tile.width, tile.height);
1450
+ this.debug("Get tile pixel data");
1451
+ extractTo.src = tmpCtx.getImageData(0, 0, tile.width, tile.height).data;
1452
+ tmpCanvas.width = tmpCanvas.height = 0;
1453
+ return extractTo;
1454
+ };
1455
+ Pica.prototype.__landTileData = function(tile, result, stageEnv) {
1456
+ var toImageData;
1457
+ this.debug("Convert raw rgba tile result to ImageData");
1458
+ if (result.bitmap) {
1459
+ stageEnv.toCtx.drawImage(result.bitmap, tile.toX, tile.toY);
1460
+ return null;
1461
+ }
1462
+ if (CAN_NEW_IMAGE_DATA) {
1463
+ toImageData = new ImageData(new Uint8ClampedArray(result.data), tile.toWidth, tile.toHeight);
1464
+ } else {
1465
+ toImageData = stageEnv.toCtx.createImageData(tile.toWidth, tile.toHeight);
1466
+ if (toImageData.data.set) {
1467
+ toImageData.data.set(result.data);
1468
+ } else {
1469
+ for (var i = toImageData.data.length - 1; i >= 0; i--) {
1470
+ toImageData.data[i] = result.data[i];
1471
+ }
1472
+ }
1473
+ }
1474
+ this.debug("Draw tile");
1475
+ if (NEED_SAFARI_FIX) {
1476
+ stageEnv.toCtx.putImageData(toImageData, tile.toX, tile.toY, tile.toInnerX - tile.toX, tile.toInnerY - tile.toY, tile.toInnerWidth + 1e-5, tile.toInnerHeight + 1e-5);
1477
+ } else {
1478
+ stageEnv.toCtx.putImageData(toImageData, tile.toX, tile.toY, tile.toInnerX - tile.toX, tile.toInnerY - tile.toY, tile.toInnerWidth, tile.toInnerHeight);
1479
+ }
1480
+ return null;
1481
+ };
1482
+ Pica.prototype.__tileAndResize = function(from, to, opts) {
1483
+ var _this3 = this;
1484
+ var stageEnv = {
1485
+ srcCtx: null,
1486
+ srcImageBitmap: null,
1487
+ isImageBitmapReused: false,
1488
+ toCtx: null
1489
+ };
1490
+ var processTile = function processTile2(tile) {
1491
+ return _this3.__limit(function() {
1492
+ if (opts.canceled) return opts.cancelToken;
1493
+ var tileOpts = {
1494
+ width: tile.width,
1495
+ height: tile.height,
1496
+ toWidth: tile.toWidth,
1497
+ toHeight: tile.toHeight,
1498
+ scaleX: tile.scaleX,
1499
+ scaleY: tile.scaleY,
1500
+ offsetX: tile.offsetX,
1501
+ offsetY: tile.offsetY,
1502
+ quality: opts.quality,
1503
+ alpha: opts.alpha,
1504
+ unsharpAmount: opts.unsharpAmount,
1505
+ unsharpRadius: opts.unsharpRadius,
1506
+ unsharpThreshold: opts.unsharpThreshold
1507
+ };
1508
+ _this3.debug("Invoke resize math");
1509
+ return Promise.resolve(tileOpts).then(function(tileOpts2) {
1510
+ return _this3.__extractTileData(tile, from, opts, stageEnv, tileOpts2);
1511
+ }).then(function(tileOpts2) {
1512
+ _this3.debug("Invoke resize math");
1513
+ return _this3.__invokeResize(tileOpts2, opts);
1514
+ }).then(function(result) {
1515
+ if (opts.canceled) return opts.cancelToken;
1516
+ stageEnv.srcImageData = null;
1517
+ return _this3.__landTileData(tile, result, stageEnv);
1518
+ });
1519
+ });
1520
+ };
1521
+ return Promise.resolve().then(function() {
1522
+ stageEnv.toCtx = to.getContext("2d", {
1523
+ alpha: Boolean(opts.alpha)
1524
+ });
1525
+ if (utils2.isCanvas(from)) return null;
1526
+ if (utils2.isImageBitmap(from)) {
1527
+ stageEnv.srcImageBitmap = from;
1528
+ stageEnv.isImageBitmapReused = true;
1529
+ return null;
1530
+ }
1531
+ if (utils2.isImage(from)) {
1532
+ if (!CAN_CREATE_IMAGE_BITMAP) return null;
1533
+ _this3.debug("Decode image via createImageBitmap");
1534
+ return createImageBitmap(from).then(function(imageBitmap) {
1535
+ stageEnv.srcImageBitmap = imageBitmap;
1536
+ })["catch"](function(e) {
1537
+ return null;
1538
+ });
1539
+ }
1540
+ throw new Error('Pica: ".from" should be Image, Canvas or ImageBitmap');
1541
+ }).then(function() {
1542
+ if (opts.canceled) return opts.cancelToken;
1543
+ _this3.debug("Calculate tiles");
1544
+ var regions = createRegions({
1545
+ width: opts.width,
1546
+ height: opts.height,
1547
+ srcTileSize: _this3.options.tile,
1548
+ toWidth: opts.toWidth,
1549
+ toHeight: opts.toHeight,
1550
+ destTileBorder: opts.__destTileBorder
1551
+ });
1552
+ var jobs = regions.map(function(tile) {
1553
+ return processTile(tile);
1554
+ });
1555
+ function cleanup(stageEnv2) {
1556
+ if (stageEnv2.srcImageBitmap) {
1557
+ if (!stageEnv2.isImageBitmapReused) stageEnv2.srcImageBitmap.close();
1558
+ stageEnv2.srcImageBitmap = null;
1559
+ }
1560
+ }
1561
+ _this3.debug("Process tiles");
1562
+ return Promise.all(jobs).then(function() {
1563
+ _this3.debug("Finished!");
1564
+ cleanup(stageEnv);
1565
+ return to;
1566
+ }, function(err) {
1567
+ cleanup(stageEnv);
1568
+ throw err;
1569
+ });
1570
+ });
1571
+ };
1572
+ Pica.prototype.__processStages = function(stages, from, to, opts) {
1573
+ var _this4 = this;
1574
+ if (opts.canceled) return opts.cancelToken;
1575
+ var _stages$shift = stages.shift(), _stages$shift2 = _slicedToArray(_stages$shift, 2), toWidth = _stages$shift2[0], toHeight = _stages$shift2[1];
1576
+ var isLastStage = stages.length === 0;
1577
+ opts = assign3({}, opts, {
1578
+ toWidth,
1579
+ toHeight,
1580
+ // only use user-defined quality for the last stage,
1581
+ // use simpler (Hamming) filter for the first stages where
1582
+ // scale factor is large enough (more than 2-3)
1583
+ quality: isLastStage ? opts.quality : Math.min(1, opts.quality)
1584
+ });
1585
+ var tmpCanvas;
1586
+ if (!isLastStage) {
1587
+ tmpCanvas = this.options.createCanvas(toWidth, toHeight);
1588
+ }
1589
+ return this.__tileAndResize(from, isLastStage ? to : tmpCanvas, opts).then(function() {
1590
+ if (isLastStage) return to;
1591
+ opts.width = toWidth;
1592
+ opts.height = toHeight;
1593
+ return _this4.__processStages(stages, tmpCanvas, to, opts);
1594
+ }).then(function(res) {
1595
+ if (tmpCanvas) {
1596
+ tmpCanvas.width = tmpCanvas.height = 0;
1597
+ }
1598
+ return res;
1599
+ });
1600
+ };
1601
+ Pica.prototype.__resizeViaCreateImageBitmap = function(from, to, opts) {
1602
+ var _this5 = this;
1603
+ var toCtx = to.getContext("2d", {
1604
+ alpha: Boolean(opts.alpha)
1605
+ });
1606
+ this.debug("Resize via createImageBitmap()");
1607
+ return createImageBitmap(from, {
1608
+ resizeWidth: opts.toWidth,
1609
+ resizeHeight: opts.toHeight,
1610
+ resizeQuality: utils2.cib_quality_name(opts.quality)
1611
+ }).then(function(imageBitmap) {
1612
+ if (opts.canceled) return opts.cancelToken;
1613
+ if (!opts.unsharpAmount) {
1614
+ toCtx.drawImage(imageBitmap, 0, 0);
1615
+ imageBitmap.close();
1616
+ toCtx = null;
1617
+ _this5.debug("Finished!");
1618
+ return to;
1619
+ }
1620
+ _this5.debug("Unsharp result");
1621
+ var tmpCanvas = _this5.options.createCanvas(opts.toWidth, opts.toHeight);
1622
+ var tmpCtx = tmpCanvas.getContext("2d", {
1623
+ alpha: Boolean(opts.alpha)
1624
+ });
1625
+ tmpCtx.drawImage(imageBitmap, 0, 0);
1626
+ imageBitmap.close();
1627
+ var iData = tmpCtx.getImageData(0, 0, opts.toWidth, opts.toHeight);
1628
+ _this5.__mathlib.unsharp_mask(iData.data, opts.toWidth, opts.toHeight, opts.unsharpAmount, opts.unsharpRadius, opts.unsharpThreshold);
1629
+ toCtx.putImageData(iData, 0, 0);
1630
+ tmpCanvas.width = tmpCanvas.height = 0;
1631
+ iData = tmpCtx = tmpCanvas = toCtx = null;
1632
+ _this5.debug("Finished!");
1633
+ return to;
1634
+ });
1635
+ };
1636
+ Pica.prototype.resize = function(from, to, options) {
1637
+ var _this6 = this;
1638
+ this.debug("Start resize...");
1639
+ var opts = assign3({}, DEFAULT_RESIZE_OPTS);
1640
+ if (!isNaN(options)) {
1641
+ opts = assign3(opts, {
1642
+ quality: options
1643
+ });
1644
+ } else if (options) {
1645
+ opts = assign3(opts, options);
1646
+ }
1647
+ opts.toWidth = to.width;
1648
+ opts.toHeight = to.height;
1649
+ opts.width = from.naturalWidth || from.width;
1650
+ opts.height = from.naturalHeight || from.height;
1651
+ if (to.width === 0 || to.height === 0) {
1652
+ return Promise.reject(new Error("Invalid output size: ".concat(to.width, "x").concat(to.height)));
1653
+ }
1654
+ if (opts.unsharpRadius > 2) opts.unsharpRadius = 2;
1655
+ opts.canceled = false;
1656
+ if (opts.cancelToken) {
1657
+ opts.cancelToken = opts.cancelToken.then(function(data) {
1658
+ opts.canceled = true;
1659
+ throw data;
1660
+ }, function(err) {
1661
+ opts.canceled = true;
1662
+ throw err;
1663
+ });
1664
+ }
1665
+ var DEST_TILE_BORDER = 3;
1666
+ opts.__destTileBorder = Math.ceil(Math.max(DEST_TILE_BORDER, 2.5 * opts.unsharpRadius | 0));
1667
+ return this.init().then(function() {
1668
+ if (opts.canceled) return opts.cancelToken;
1669
+ if (_this6.features.cib) {
1670
+ return _this6.__resizeViaCreateImageBitmap(from, to, opts);
1671
+ }
1672
+ if (!CAN_USE_CANVAS_GET_IMAGE_DATA) {
1673
+ var err = new Error("Pica: cannot use getImageData on canvas, make sure fingerprinting protection isn't enabled");
1674
+ err.code = "ERR_GET_IMAGE_DATA";
1675
+ throw err;
1676
+ }
1677
+ var stages = createStages(opts.width, opts.height, opts.toWidth, opts.toHeight, _this6.options.tile, opts.__destTileBorder);
1678
+ return _this6.__processStages(stages, from, to, opts);
1679
+ });
1680
+ };
1681
+ Pica.prototype.resizeBuffer = function(options) {
1682
+ var _this7 = this;
1683
+ var opts = assign3({}, DEFAULT_RESIZE_OPTS, options);
1684
+ return this.init().then(function() {
1685
+ return _this7.__mathlib.resizeAndUnsharp(opts);
1686
+ });
1687
+ };
1688
+ Pica.prototype.toBlob = function(canvas, mimeType, quality) {
1689
+ mimeType = mimeType || "image/png";
1690
+ return new Promise(function(resolve) {
1691
+ if (canvas.toBlob) {
1692
+ canvas.toBlob(function(blob) {
1693
+ return resolve(blob);
1694
+ }, mimeType, quality);
1695
+ return;
1696
+ }
1697
+ if (canvas.convertToBlob) {
1698
+ resolve(canvas.convertToBlob({
1699
+ type: mimeType,
1700
+ quality
1701
+ }));
1702
+ return;
1703
+ }
1704
+ var asString = atob(canvas.toDataURL(mimeType, quality).split(",")[1]);
1705
+ var len = asString.length;
1706
+ var asBuffer = new Uint8Array(len);
1707
+ for (var i = 0; i < len; i++) {
1708
+ asBuffer[i] = asString.charCodeAt(i);
1709
+ }
1710
+ resolve(new Blob([asBuffer], {
1711
+ type: mimeType
1712
+ }));
1713
+ });
1714
+ };
1715
+ Pica.prototype.debug = function() {
1716
+ };
1717
+ module2.exports = Pica;
1718
+ }, { "./lib/mathlib": 1, "./lib/pool": 13, "./lib/stepper": 14, "./lib/tiler": 15, "./lib/utils": 16, "./lib/worker": 17, "object-assign": 23, "webworkify": 24 }] }, {}, [])("/index.js");
1719
+ });
1720
+ });
1721
+ var image_traverse = createCommonjsModule(function(module) {
1722
+ function error(message, code) {
1723
+ var err = new Error(message);
1724
+ err.code = code;
1725
+ return err;
1726
+ }
1727
+ function to_hex(number) {
1728
+ var n = number.toString(16).toUpperCase();
1729
+ for (var i = 2 - n.length; i > 0; i--) n = "0" + n;
1730
+ return "0x" + n;
1731
+ }
1732
+ function utf8_encode(str) {
1733
+ try {
1734
+ return unescape(encodeURIComponent(str));
1735
+ } catch (_) {
1736
+ return str;
1737
+ }
1738
+ }
1739
+ function utf8_decode(str) {
1740
+ try {
1741
+ return decodeURIComponent(escape(str));
1742
+ } catch (_) {
1743
+ return str;
1744
+ }
1745
+ }
1746
+ function is_uint8array(bin) {
1747
+ return Object.prototype.toString.call(bin) === "[object Uint8Array]";
1748
+ }
1749
+ function ExifParser(jpeg_bin, exif_start, exif_end) {
1750
+ this.input = jpeg_bin.subarray(exif_start, exif_end);
1751
+ this.start = exif_start;
1752
+ var sig = String.fromCharCode.apply(null, this.input.subarray(0, 4));
1753
+ if (sig !== "II*\0" && sig !== "MM\0*") {
1754
+ throw error("invalid TIFF signature", "EBADDATA");
1755
+ }
1756
+ this.big_endian = sig[0] === "M";
1757
+ }
1758
+ ExifParser.prototype.each = function(on_entry) {
1759
+ this.aborted = false;
1760
+ var offset = this.read_uint32(4);
1761
+ this.ifds_to_read = [{
1762
+ id: 0,
1763
+ offset
1764
+ }];
1765
+ while (this.ifds_to_read.length > 0 && !this.aborted) {
1766
+ var i = this.ifds_to_read.shift();
1767
+ if (!i.offset) continue;
1768
+ this.scan_ifd(i.id, i.offset, on_entry);
1769
+ }
1770
+ };
1771
+ ExifParser.prototype.filter = function(on_entry) {
1772
+ var ifds = {};
1773
+ ifds.ifd0 = { id: 0, entries: [] };
1774
+ this.each(function(entry) {
1775
+ if (on_entry(entry) === false && !entry.is_subifd_link) return;
1776
+ if (entry.is_subifd_link && entry.count !== 1 && entry.format !== 4) return;
1777
+ if (!ifds["ifd" + entry.ifd]) {
1778
+ ifds["ifd" + entry.ifd] = { id: entry.ifd, entries: [] };
1779
+ }
1780
+ ifds["ifd" + entry.ifd].entries.push(entry);
1781
+ });
1782
+ delete ifds.ifd1;
1783
+ var length = 8;
1784
+ Object.keys(ifds).forEach(function(ifd_no) {
1785
+ length += 2;
1786
+ ifds[ifd_no].entries.forEach(function(entry) {
1787
+ length += 12 + (entry.data_length > 4 ? Math.ceil(entry.data_length / 2) * 2 : 0);
1788
+ });
1789
+ length += 4;
1790
+ });
1791
+ this.output = new Uint8Array(length);
1792
+ this.output[0] = this.output[1] = (this.big_endian ? "M" : "I").charCodeAt(0);
1793
+ this.write_uint16(2, 42);
1794
+ var offset = 8;
1795
+ var self = this;
1796
+ this.write_uint32(4, offset);
1797
+ Object.keys(ifds).forEach(function(ifd_no) {
1798
+ ifds[ifd_no].written_offset = offset;
1799
+ var ifd_start = offset;
1800
+ var ifd_end = ifd_start + 2 + ifds[ifd_no].entries.length * 12 + 4;
1801
+ offset = ifd_end;
1802
+ self.write_uint16(ifd_start, ifds[ifd_no].entries.length);
1803
+ ifds[ifd_no].entries.sort(function(a, b) {
1804
+ return a.tag - b.tag;
1805
+ }).forEach(function(entry, idx) {
1806
+ var entry_offset = ifd_start + 2 + idx * 12;
1807
+ self.write_uint16(entry_offset, entry.tag);
1808
+ self.write_uint16(entry_offset + 2, entry.format);
1809
+ self.write_uint32(entry_offset + 4, entry.count);
1810
+ if (entry.is_subifd_link) {
1811
+ if (ifds["ifd" + entry.tag]) ifds["ifd" + entry.tag].link_offset = entry_offset + 8;
1812
+ } else if (entry.data_length <= 4) {
1813
+ self.output.set(
1814
+ self.input.subarray(entry.data_offset - self.start, entry.data_offset - self.start + 4),
1815
+ entry_offset + 8
1816
+ );
1817
+ } else {
1818
+ self.write_uint32(entry_offset + 8, offset);
1819
+ self.output.set(
1820
+ self.input.subarray(entry.data_offset - self.start, entry.data_offset - self.start + entry.data_length),
1821
+ offset
1822
+ );
1823
+ offset += Math.ceil(entry.data_length / 2) * 2;
1824
+ }
1825
+ });
1826
+ var next_ifd = ifds["ifd" + (ifds[ifd_no].id + 1)];
1827
+ if (next_ifd) next_ifd.link_offset = ifd_end - 4;
1828
+ });
1829
+ Object.keys(ifds).forEach(function(ifd_no) {
1830
+ if (ifds[ifd_no].written_offset && ifds[ifd_no].link_offset) {
1831
+ self.write_uint32(ifds[ifd_no].link_offset, ifds[ifd_no].written_offset);
1832
+ }
1833
+ });
1834
+ if (this.output.length !== offset) throw error("internal error: incorrect buffer size allocated");
1835
+ return this.output;
1836
+ };
1837
+ ExifParser.prototype.read_uint16 = function(offset) {
1838
+ var d = this.input;
1839
+ if (offset + 2 > d.length) throw error("unexpected EOF", "EBADDATA");
1840
+ return this.big_endian ? d[offset] * 256 + d[offset + 1] : d[offset] + d[offset + 1] * 256;
1841
+ };
1842
+ ExifParser.prototype.read_uint32 = function(offset) {
1843
+ var d = this.input;
1844
+ if (offset + 4 > d.length) throw error("unexpected EOF", "EBADDATA");
1845
+ return this.big_endian ? d[offset] * 16777216 + d[offset + 1] * 65536 + d[offset + 2] * 256 + d[offset + 3] : d[offset] + d[offset + 1] * 256 + d[offset + 2] * 65536 + d[offset + 3] * 16777216;
1846
+ };
1847
+ ExifParser.prototype.write_uint16 = function(offset, value) {
1848
+ var d = this.output;
1849
+ if (this.big_endian) {
1850
+ d[offset] = value >>> 8 & 255;
1851
+ d[offset + 1] = value & 255;
1852
+ } else {
1853
+ d[offset] = value & 255;
1854
+ d[offset + 1] = value >>> 8 & 255;
1855
+ }
1856
+ };
1857
+ ExifParser.prototype.write_uint32 = function(offset, value) {
1858
+ var d = this.output;
1859
+ if (this.big_endian) {
1860
+ d[offset] = value >>> 24 & 255;
1861
+ d[offset + 1] = value >>> 16 & 255;
1862
+ d[offset + 2] = value >>> 8 & 255;
1863
+ d[offset + 3] = value & 255;
1864
+ } else {
1865
+ d[offset] = value & 255;
1866
+ d[offset + 1] = value >>> 8 & 255;
1867
+ d[offset + 2] = value >>> 16 & 255;
1868
+ d[offset + 3] = value >>> 24 & 255;
1869
+ }
1870
+ };
1871
+ ExifParser.prototype.is_subifd_link = function(ifd, tag) {
1872
+ return ifd === 0 && tag === 34665 || // SubIFD
1873
+ ifd === 0 && tag === 34853 || // GPS Info
1874
+ ifd === 34665 && tag === 40965;
1875
+ };
1876
+ ExifParser.prototype.exif_format_length = function(format) {
1877
+ switch (format) {
1878
+ case 1:
1879
+ // byte
1880
+ case 2:
1881
+ // ascii
1882
+ case 6:
1883
+ // sbyte
1884
+ case 7:
1885
+ return 1;
1886
+ case 3:
1887
+ // short
1888
+ case 8:
1889
+ return 2;
1890
+ case 4:
1891
+ // long
1892
+ case 9:
1893
+ // slong
1894
+ case 11:
1895
+ return 4;
1896
+ case 5:
1897
+ // rational
1898
+ case 10:
1899
+ // srational
1900
+ case 12:
1901
+ return 8;
1902
+ default:
1903
+ return 0;
1904
+ }
1905
+ };
1906
+ ExifParser.prototype.exif_format_read = function(format, offset) {
1907
+ var v;
1908
+ switch (format) {
1909
+ case 1:
1910
+ // byte
1911
+ case 2:
1912
+ v = this.input[offset];
1913
+ return v;
1914
+ case 6:
1915
+ v = this.input[offset];
1916
+ return v | (v & 128) * 33554430;
1917
+ case 3:
1918
+ v = this.read_uint16(offset);
1919
+ return v;
1920
+ case 8:
1921
+ v = this.read_uint16(offset);
1922
+ return v | (v & 32768) * 131070;
1923
+ case 4:
1924
+ v = this.read_uint32(offset);
1925
+ return v;
1926
+ case 9:
1927
+ v = this.read_uint32(offset);
1928
+ return v | 0;
1929
+ case 5:
1930
+ // rational
1931
+ case 10:
1932
+ // srational
1933
+ case 11:
1934
+ // float
1935
+ case 12:
1936
+ return null;
1937
+ // not implemented
1938
+ case 7:
1939
+ return null;
1940
+ // blob
1941
+ default:
1942
+ return null;
1943
+ }
1944
+ };
1945
+ ExifParser.prototype.scan_ifd = function(ifd_no, offset, on_entry) {
1946
+ var entry_count = this.read_uint16(offset);
1947
+ offset += 2;
1948
+ for (var i = 0; i < entry_count; i++) {
1949
+ var tag = this.read_uint16(offset);
1950
+ var format = this.read_uint16(offset + 2);
1951
+ var count = this.read_uint32(offset + 4);
1952
+ var comp_length = this.exif_format_length(format);
1953
+ var data_length = count * comp_length;
1954
+ var data_offset = data_length <= 4 ? offset + 8 : this.read_uint32(offset + 8);
1955
+ var is_subifd_link = false;
1956
+ if (data_offset + data_length > this.input.length) {
1957
+ throw error("unexpected EOF", "EBADDATA");
1958
+ }
1959
+ var value = [];
1960
+ var comp_offset = data_offset;
1961
+ for (var j = 0; j < count; j++, comp_offset += comp_length) {
1962
+ var item = this.exif_format_read(format, comp_offset);
1963
+ if (item === null) {
1964
+ value = null;
1965
+ break;
1966
+ }
1967
+ value.push(item);
1968
+ }
1969
+ if (Array.isArray(value) && format === 2) {
1970
+ try {
1971
+ value = utf8_decode(String.fromCharCode.apply(null, value));
1972
+ } catch (_) {
1973
+ value = null;
1974
+ }
1975
+ if (value && value[value.length - 1] === "\0") value = value.slice(0, -1);
1976
+ }
1977
+ if (this.is_subifd_link(ifd_no, tag)) {
1978
+ if (Array.isArray(value) && Number.isInteger(value[0]) && value[0] > 0) {
1979
+ this.ifds_to_read.push({
1980
+ id: tag,
1981
+ offset: value[0]
1982
+ });
1983
+ is_subifd_link = true;
1984
+ }
1985
+ }
1986
+ var entry = {
1987
+ is_big_endian: this.big_endian,
1988
+ ifd: ifd_no,
1989
+ tag,
1990
+ format,
1991
+ count,
1992
+ entry_offset: offset + this.start,
1993
+ data_length,
1994
+ data_offset: data_offset + this.start,
1995
+ value,
1996
+ is_subifd_link
1997
+ };
1998
+ if (on_entry(entry) === false) {
1999
+ this.aborted = true;
2000
+ return;
2001
+ }
2002
+ offset += 12;
2003
+ }
2004
+ if (ifd_no === 0) {
2005
+ this.ifds_to_read.push({
2006
+ id: 1,
2007
+ offset: this.read_uint32(offset)
2008
+ });
2009
+ }
2010
+ };
2011
+ module.exports.is_jpeg = function(jpeg_bin) {
2012
+ return jpeg_bin.length >= 4 && jpeg_bin[0] === 255 && jpeg_bin[1] === 216 && jpeg_bin[2] === 255;
2013
+ };
2014
+ module.exports.jpeg_segments_each = function(jpeg_bin, on_segment) {
2015
+ if (!is_uint8array(jpeg_bin)) {
2016
+ throw error("Invalid argument (jpeg_bin), Uint8Array expected", "EINVAL");
2017
+ }
2018
+ if (typeof on_segment !== "function") {
2019
+ throw error("Invalid argument (on_segment), Function expected", "EINVAL");
2020
+ }
2021
+ if (!module.exports.is_jpeg(jpeg_bin)) {
2022
+ throw error("Unknown file format", "ENOTJPEG");
2023
+ }
2024
+ var offset = 0, length = jpeg_bin.length, inside_scan = false;
2025
+ for (; ; ) {
2026
+ var segment_code, segment_length;
2027
+ if (offset + 1 >= length) throw error("Unexpected EOF", "EBADDATA");
2028
+ var byte1 = jpeg_bin[offset];
2029
+ var byte2 = jpeg_bin[offset + 1];
2030
+ if (byte1 === 255 && byte2 === 255) {
2031
+ segment_code = 255;
2032
+ segment_length = 1;
2033
+ } else if (byte1 === 255 && byte2 !== 0) {
2034
+ segment_code = byte2;
2035
+ segment_length = 2;
2036
+ if (208 <= segment_code && segment_code <= 217 || segment_code === 1) ;
2037
+ else {
2038
+ if (offset + 3 >= length) throw error("Unexpected EOF", "EBADDATA");
2039
+ segment_length += jpeg_bin[offset + 2] * 256 + jpeg_bin[offset + 3];
2040
+ if (segment_length < 2) throw error("Invalid segment length", "EBADDATA");
2041
+ if (offset + segment_length - 1 >= length) throw error("Unexpected EOF", "EBADDATA");
2042
+ }
2043
+ if (inside_scan) {
2044
+ if (segment_code >= 208 && segment_code <= 215) ;
2045
+ else {
2046
+ inside_scan = false;
2047
+ }
2048
+ }
2049
+ if (segment_code === 218) inside_scan = true;
2050
+ } else if (inside_scan) {
2051
+ for (var pos = offset + 1; ; pos++) {
2052
+ if (pos >= length) throw error("Unexpected EOF", "EBADDATA");
2053
+ if (jpeg_bin[pos] === 255) {
2054
+ if (pos + 1 >= length) throw error("Unexpected EOF", "EBADDATA");
2055
+ if (jpeg_bin[pos + 1] !== 0) {
2056
+ segment_code = 0;
2057
+ segment_length = pos - offset;
2058
+ break;
2059
+ }
2060
+ }
2061
+ }
2062
+ } else {
2063
+ throw error("Unexpected byte at segment start: " + to_hex(byte1) + " (offset " + to_hex(offset) + ")", "EBADDATA");
2064
+ }
2065
+ if (on_segment({ code: segment_code, offset, length: segment_length }) === false) break;
2066
+ if (segment_code === 217) break;
2067
+ offset += segment_length;
2068
+ }
2069
+ };
2070
+ module.exports.jpeg_segments_filter = function(jpeg_bin, on_segment) {
2071
+ if (!is_uint8array(jpeg_bin)) {
2072
+ throw error("Invalid argument (jpeg_bin), Uint8Array expected", "EINVAL");
2073
+ }
2074
+ if (typeof on_segment !== "function") {
2075
+ throw error("Invalid argument (on_segment), Function expected", "EINVAL");
2076
+ }
2077
+ var ranges = [];
2078
+ var out_length = 0;
2079
+ module.exports.jpeg_segments_each(jpeg_bin, function(segment) {
2080
+ var new_segment = on_segment(segment);
2081
+ if (is_uint8array(new_segment)) {
2082
+ ranges.push({ data: new_segment });
2083
+ out_length += new_segment.length;
2084
+ } else if (Array.isArray(new_segment)) {
2085
+ new_segment.filter(is_uint8array).forEach(function(s) {
2086
+ ranges.push({ data: s });
2087
+ out_length += s.length;
2088
+ });
2089
+ } else if (new_segment !== false) {
2090
+ var new_range = { start: segment.offset, end: segment.offset + segment.length };
2091
+ if (ranges.length > 0 && ranges[ranges.length - 1].end === new_range.start) {
2092
+ ranges[ranges.length - 1].end = new_range.end;
2093
+ } else {
2094
+ ranges.push(new_range);
2095
+ }
2096
+ out_length += segment.length;
2097
+ }
2098
+ });
2099
+ var result = new Uint8Array(out_length);
2100
+ var offset = 0;
2101
+ ranges.forEach(function(range) {
2102
+ var data = range.data || jpeg_bin.subarray(range.start, range.end);
2103
+ result.set(data, offset);
2104
+ offset += data.length;
2105
+ });
2106
+ return result;
2107
+ };
2108
+ module.exports.jpeg_exif_tags_each = function(jpeg_bin, on_exif_entry) {
2109
+ if (!is_uint8array(jpeg_bin)) {
2110
+ throw error("Invalid argument (jpeg_bin), Uint8Array expected", "EINVAL");
2111
+ }
2112
+ if (typeof on_exif_entry !== "function") {
2113
+ throw error("Invalid argument (on_exif_entry), Function expected", "EINVAL");
2114
+ }
2115
+ module.exports.jpeg_segments_each(jpeg_bin, function(segment) {
2116
+ if (segment.code === 218) return false;
2117
+ if (segment.code === 225 && segment.length >= 10 && jpeg_bin[segment.offset + 4] === 69 && jpeg_bin[segment.offset + 5] === 120 && jpeg_bin[segment.offset + 6] === 105 && jpeg_bin[segment.offset + 7] === 102 && jpeg_bin[segment.offset + 8] === 0 && jpeg_bin[segment.offset + 9] === 0) {
2118
+ new ExifParser(jpeg_bin, segment.offset + 10, segment.offset + segment.length).each(on_exif_entry);
2119
+ return false;
2120
+ }
2121
+ });
2122
+ };
2123
+ module.exports.jpeg_exif_tags_filter = function(jpeg_bin, on_exif_entry) {
2124
+ if (!is_uint8array(jpeg_bin)) {
2125
+ throw error("Invalid argument (jpeg_bin), Uint8Array expected", "EINVAL");
2126
+ }
2127
+ if (typeof on_exif_entry !== "function") {
2128
+ throw error("Invalid argument (on_exif_entry), Function expected", "EINVAL");
2129
+ }
2130
+ var stop_search = false;
2131
+ return module.exports.jpeg_segments_filter(jpeg_bin, function(segment) {
2132
+ if (stop_search) return;
2133
+ if (segment.code === 218) stop_search = true;
2134
+ if (segment.code === 225 && segment.length >= 10 && jpeg_bin[segment.offset + 4] === 69 && jpeg_bin[segment.offset + 5] === 120 && jpeg_bin[segment.offset + 6] === 105 && jpeg_bin[segment.offset + 7] === 102 && jpeg_bin[segment.offset + 8] === 0 && jpeg_bin[segment.offset + 9] === 0) {
2135
+ var new_exif = new ExifParser(jpeg_bin, segment.offset + 10, segment.offset + segment.length).filter(on_exif_entry);
2136
+ if (!new_exif) return false;
2137
+ var header = new Uint8Array(10);
2138
+ header.set(jpeg_bin.slice(segment.offset, segment.offset + 10));
2139
+ header[2] = new_exif.length + 8 >>> 8 & 255;
2140
+ header[3] = new_exif.length + 8 & 255;
2141
+ stop_search = true;
2142
+ return [header, new_exif];
2143
+ }
2144
+ });
2145
+ };
2146
+ module.exports.jpeg_add_comment = function(jpeg_bin, comment) {
2147
+ var comment_inserted = false, segment_count = 0;
2148
+ return module.exports.jpeg_segments_filter(jpeg_bin, function(segment) {
2149
+ segment_count++;
2150
+ if (segment_count === 1 && segment.code === 216) return;
2151
+ if (segment_count === 2 && segment.code === 224) return;
2152
+ if (comment_inserted) return;
2153
+ comment = utf8_encode(comment);
2154
+ var csegment = new Uint8Array(5 + comment.length);
2155
+ var offset = 0;
2156
+ csegment[offset++] = 255;
2157
+ csegment[offset++] = 254;
2158
+ csegment[offset++] = comment.length + 3 >>> 8 & 255;
2159
+ csegment[offset++] = comment.length + 3 & 255;
2160
+ comment.split("").forEach(function(c) {
2161
+ csegment[offset++] = c.charCodeAt(0) & 255;
2162
+ });
2163
+ csegment[offset++] = 0;
2164
+ comment_inserted = true;
2165
+ return [csegment, jpeg_bin.subarray(segment.offset, segment.offset + segment.length)];
2166
+ });
2167
+ };
2168
+ });
2169
+ function jpeg_patch_exif(env) {
2170
+ return this._getUint8Array(env.blob).then(function(data) {
2171
+ env.is_jpeg = image_traverse.is_jpeg(data);
2172
+ if (!env.is_jpeg) return Promise.resolve(env);
2173
+ env.orig_blob = env.blob;
2174
+ try {
2175
+ var exif_is_big_endian, orientation_offset;
2176
+ image_traverse.jpeg_exif_tags_each(data, function(entry) {
2177
+ if (entry.ifd === 0 && entry.tag === 274 && Array.isArray(entry.value)) {
2178
+ env.orientation = entry.value[0] || 1;
2179
+ exif_is_big_endian = entry.is_big_endian;
2180
+ orientation_offset = entry.data_offset;
2181
+ return false;
2182
+ }
2183
+ });
2184
+ if (orientation_offset) {
2185
+ var orientation_patch = exif_is_big_endian ? new Uint8Array([0, 1]) : new Uint8Array([1, 0]);
2186
+ env.blob = new Blob([
2187
+ data.slice(0, orientation_offset),
2188
+ orientation_patch,
2189
+ data.slice(orientation_offset + 2)
2190
+ ], { type: "image/jpeg" });
2191
+ }
2192
+ } catch (_) {
2193
+ }
2194
+ return env;
2195
+ });
2196
+ }
2197
+ function jpeg_rotate_canvas(env) {
2198
+ if (!env.is_jpeg) return Promise.resolve(env);
2199
+ var orientation = env.orientation - 1;
2200
+ if (!orientation) return Promise.resolve(env);
2201
+ var canvas;
2202
+ if (orientation & 4) {
2203
+ canvas = this.pica.options.createCanvas(env.out_canvas.height, env.out_canvas.width);
2204
+ } else {
2205
+ canvas = this.pica.options.createCanvas(env.out_canvas.width, env.out_canvas.height);
2206
+ }
2207
+ var ctx = canvas.getContext("2d");
2208
+ ctx.save();
2209
+ if (orientation & 1) ctx.transform(-1, 0, 0, 1, canvas.width, 0);
2210
+ if (orientation & 2) ctx.transform(-1, 0, 0, -1, canvas.width, canvas.height);
2211
+ if (orientation & 4) ctx.transform(0, 1, 1, 0, 0, 0);
2212
+ ctx.drawImage(env.out_canvas, 0, 0);
2213
+ ctx.restore();
2214
+ env.out_canvas.width = env.out_canvas.height = 0;
2215
+ env.out_canvas = canvas;
2216
+ return Promise.resolve(env);
2217
+ }
2218
+ function jpeg_attach_orig_segments(env) {
2219
+ if (!env.is_jpeg) return Promise.resolve(env);
2220
+ return Promise.all([
2221
+ this._getUint8Array(env.blob),
2222
+ this._getUint8Array(env.out_blob)
2223
+ ]).then(function(res) {
2224
+ var data = res[0];
2225
+ var data_out = res[1];
2226
+ if (!image_traverse.is_jpeg(data)) return Promise.resolve(env);
2227
+ var segments = [];
2228
+ image_traverse.jpeg_segments_each(data, function(segment) {
2229
+ if (segment.code === 218) return false;
2230
+ segments.push(segment);
2231
+ });
2232
+ segments = segments.filter(function(segment) {
2233
+ if (segment.code === 226) return false;
2234
+ if (segment.code >= 224 && segment.code < 240) return true;
2235
+ if (segment.code === 254) return true;
2236
+ return false;
2237
+ }).map(function(segment) {
2238
+ return data.slice(segment.offset, segment.offset + segment.length);
2239
+ });
2240
+ env.out_blob = new Blob(
2241
+ // intentionally omitting expected JFIF segment (offset 2 to 20)
2242
+ [data_out.slice(0, 2)].concat(segments).concat([data_out.slice(20)]),
2243
+ { type: "image/jpeg" }
2244
+ );
2245
+ return env;
2246
+ });
2247
+ }
2248
+ function assign2(reducer) {
2249
+ reducer.before("_blob_to_image", jpeg_patch_exif);
2250
+ reducer.after("_transform", jpeg_rotate_canvas);
2251
+ reducer.after("_create_blob", jpeg_attach_orig_segments);
2252
+ }
2253
+ var assign_1 = assign2;
2254
+ var jpeg_plugins = {
2255
+ assign: assign_1
2256
+ };
2257
+ function ImageBlobReduce(options) {
2258
+ if (!(this instanceof ImageBlobReduce)) return new ImageBlobReduce(options);
2259
+ options = options || {};
2260
+ this.pica = options.pica || pica({});
2261
+ this.initialized = false;
2262
+ this.utils = utils;
2263
+ }
2264
+ ImageBlobReduce.prototype.use = function(plugin) {
2265
+ var args = [this].concat(Array.prototype.slice.call(arguments, 1));
2266
+ plugin.apply(plugin, args);
2267
+ return this;
2268
+ };
2269
+ ImageBlobReduce.prototype.init = function() {
2270
+ this.use(jpeg_plugins.assign);
2271
+ };
2272
+ ImageBlobReduce.prototype.toBlob = function(blob, options) {
2273
+ var opts = utils.assign({ max: Infinity }, options);
2274
+ var env = {
2275
+ blob,
2276
+ opts
2277
+ };
2278
+ if (!this.initialized) {
2279
+ this.init();
2280
+ this.initialized = true;
2281
+ }
2282
+ return Promise.resolve(env).then(this._blob_to_image).then(this._calculate_size).then(this._transform).then(this._cleanup).then(this._create_blob).then(function(_env) {
2283
+ _env.out_canvas.width = _env.out_canvas.height = 0;
2284
+ return _env.out_blob;
2285
+ });
2286
+ };
2287
+ ImageBlobReduce.prototype.toCanvas = function(blob, options) {
2288
+ var opts = utils.assign({ max: Infinity }, options);
2289
+ var env = {
2290
+ blob,
2291
+ opts
2292
+ };
2293
+ if (!this.initialized) {
2294
+ this.init();
2295
+ this.initialized = true;
2296
+ }
2297
+ return Promise.resolve(env).then(this._blob_to_image).then(this._calculate_size).then(this._transform).then(this._cleanup).then(function(_env) {
2298
+ return _env.out_canvas;
2299
+ });
2300
+ };
2301
+ ImageBlobReduce.prototype.before = function(method_name, fn) {
2302
+ if (!this[method_name]) throw new Error('Method "' + method_name + '" does not exist');
2303
+ if (typeof fn !== "function") throw new Error('Invalid argument "fn", function expected');
2304
+ var old_fn = this[method_name];
2305
+ var self = this;
2306
+ this[method_name] = function(env) {
2307
+ return fn.call(self, env).then(function(_env) {
2308
+ return old_fn.call(self, _env);
2309
+ });
2310
+ };
2311
+ return this;
2312
+ };
2313
+ ImageBlobReduce.prototype.after = function(method_name, fn) {
2314
+ if (!this[method_name]) throw new Error('Method "' + method_name + '" does not exist');
2315
+ if (typeof fn !== "function") throw new Error('Invalid argument "fn", function expected');
2316
+ var old_fn = this[method_name];
2317
+ var self = this;
2318
+ this[method_name] = function(env) {
2319
+ return old_fn.call(self, env).then(function(_env) {
2320
+ return fn.call(self, _env);
2321
+ });
2322
+ };
2323
+ return this;
2324
+ };
2325
+ ImageBlobReduce.prototype._blob_to_image = function(env) {
2326
+ var URL = window.URL || window.webkitURL || window.mozURL || window.msURL;
2327
+ env.image = document.createElement("img");
2328
+ env.image_url = URL.createObjectURL(env.blob);
2329
+ env.image.src = env.image_url;
2330
+ return new Promise(function(resolve, reject) {
2331
+ env.image.onerror = function() {
2332
+ reject(new Error("ImageBlobReduce: failed to create Image() from blob"));
2333
+ };
2334
+ env.image.onload = function() {
2335
+ resolve(env);
2336
+ };
2337
+ });
2338
+ };
2339
+ ImageBlobReduce.prototype._calculate_size = function(env) {
2340
+ var scale_factor = env.opts.max / Math.max(env.image.width, env.image.height);
2341
+ if (scale_factor > 1) scale_factor = 1;
2342
+ env.transform_width = Math.max(Math.round(env.image.width * scale_factor), 1);
2343
+ env.transform_height = Math.max(Math.round(env.image.height * scale_factor), 1);
2344
+ env.scale_factor = scale_factor;
2345
+ return Promise.resolve(env);
2346
+ };
2347
+ ImageBlobReduce.prototype._transform = function(env) {
2348
+ env.out_canvas = this.pica.options.createCanvas(env.transform_width, env.transform_height);
2349
+ env.transform_width = null;
2350
+ env.transform_height = null;
2351
+ var pica_opts = { alpha: env.blob.type === "image/png" };
2352
+ this.utils.assign(pica_opts, this.utils.pick_pica_resize_options(env.opts));
2353
+ return this.pica.resize(env.image, env.out_canvas, pica_opts).then(function() {
2354
+ return env;
2355
+ });
2356
+ };
2357
+ ImageBlobReduce.prototype._cleanup = function(env) {
2358
+ env.image.src = "";
2359
+ env.image = null;
2360
+ var URL = window.URL || window.webkitURL || window.mozURL || window.msURL;
2361
+ if (URL.revokeObjectURL) URL.revokeObjectURL(env.image_url);
2362
+ env.image_url = null;
2363
+ return Promise.resolve(env);
2364
+ };
2365
+ ImageBlobReduce.prototype._create_blob = function(env) {
2366
+ return this.pica.toBlob(env.out_canvas, env.blob.type).then(function(blob) {
2367
+ env.out_blob = blob;
2368
+ return env;
2369
+ });
2370
+ };
2371
+ ImageBlobReduce.prototype._getUint8Array = function(blob) {
2372
+ if (blob.arrayBuffer) {
2373
+ return blob.arrayBuffer().then(function(buf) {
2374
+ return new Uint8Array(buf);
2375
+ });
2376
+ }
2377
+ return new Promise(function(resolve, reject) {
2378
+ var fr = new FileReader();
2379
+ fr.readAsArrayBuffer(blob);
2380
+ fr.onload = function() {
2381
+ resolve(new Uint8Array(fr.result));
2382
+ };
2383
+ fr.onerror = function() {
2384
+ reject(new Error("ImageBlobReduce: failed to load data from input blob"));
2385
+ fr.abort();
2386
+ };
2387
+ fr.onabort = function() {
2388
+ reject(new Error("ImageBlobReduce: failed to load data from input blob (aborted)"));
2389
+ };
2390
+ });
2391
+ };
2392
+ ImageBlobReduce.pica = pica;
2393
+ var imageBlobReduce = ImageBlobReduce;
2394
+ export {
2395
+ imageBlobReduce as default
2396
+ };