1 | import { B as re } from "./index.a9498574.mjs";
|
2 | import "react";
|
3 | import "react-dom";
|
4 | const O = new Int32Array([
|
5 | 0,
|
6 | 1,
|
7 | 8,
|
8 | 16,
|
9 | 9,
|
10 | 2,
|
11 | 3,
|
12 | 10,
|
13 | 17,
|
14 | 24,
|
15 | 32,
|
16 | 25,
|
17 | 18,
|
18 | 11,
|
19 | 4,
|
20 | 5,
|
21 | 12,
|
22 | 19,
|
23 | 26,
|
24 | 33,
|
25 | 40,
|
26 | 48,
|
27 | 41,
|
28 | 34,
|
29 | 27,
|
30 | 20,
|
31 | 13,
|
32 | 6,
|
33 | 7,
|
34 | 14,
|
35 | 21,
|
36 | 28,
|
37 | 35,
|
38 | 42,
|
39 | 49,
|
40 | 56,
|
41 | 57,
|
42 | 50,
|
43 | 43,
|
44 | 36,
|
45 | 29,
|
46 | 22,
|
47 | 15,
|
48 | 23,
|
49 | 30,
|
50 | 37,
|
51 | 44,
|
52 | 51,
|
53 | 58,
|
54 | 59,
|
55 | 52,
|
56 | 45,
|
57 | 38,
|
58 | 31,
|
59 | 39,
|
60 | 46,
|
61 | 53,
|
62 | 60,
|
63 | 61,
|
64 | 54,
|
65 | 47,
|
66 | 55,
|
67 | 62,
|
68 | 63
|
69 | ]), Y = 4017, Z = 799, $ = 3406, N = 2276, Q = 1567, W = 3784, R = 5793, K = 2896;
|
70 | function ne(q, l) {
|
71 | let o = 0;
|
72 | const u = [];
|
73 | let T = 16;
|
74 | for (; T > 0 && !q[T - 1]; )
|
75 | --T;
|
76 | u.push({ children: [], index: 0 });
|
77 | let w = u[0], C;
|
78 | for (let t = 0; t < T; t++) {
|
79 | for (let h = 0; h < q[t]; h++) {
|
80 | for (w = u.pop(), w.children[w.index] = l[o]; w.index > 0; )
|
81 | w = u.pop();
|
82 | for (w.index++, u.push(w); u.length <= t; )
|
83 | u.push(C = { children: [], index: 0 }), w.children[w.index] = C.children, w = C;
|
84 | o++;
|
85 | }
|
86 | t + 1 < T && (u.push(C = { children: [], index: 0 }), w.children[w.index] = C.children, w = C);
|
87 | }
|
88 | return u[0].children;
|
89 | }
|
90 | function ce(q, l, o, u, T, w, C, t, h) {
|
91 | const { mcusPerLine: F, progressive: c } = o, r = l;
|
92 | let b = l, i = 0, d = 0;
|
93 | function m() {
|
94 | if (d > 0)
|
95 | return d--, i >> d & 1;
|
96 | if (i = q[b++], i === 255) {
|
97 | const a = q[b++];
|
98 | if (a)
|
99 | throw new Error(`unexpected marker: ${(i << 8 | a).toString(16)}`);
|
100 | }
|
101 | return d = 7, i >>> 7;
|
102 | }
|
103 | function x(a) {
|
104 | let f = a, p;
|
105 | for (; (p = m()) !== null; ) {
|
106 | if (f = f[p], typeof f == "number")
|
107 | return f;
|
108 | if (typeof f != "object")
|
109 | throw new Error("invalid huffman sequence");
|
110 | }
|
111 | return null;
|
112 | }
|
113 | function E(a) {
|
114 | let f = a, p = 0;
|
115 | for (; f > 0; ) {
|
116 | const L = m();
|
117 | if (L === null)
|
118 | return;
|
119 | p = p << 1 | L, --f;
|
120 | }
|
121 | return p;
|
122 | }
|
123 | function k(a) {
|
124 | const f = E(a);
|
125 | return f >= 1 << a - 1 ? f : f + (-1 << a) + 1;
|
126 | }
|
127 | function A(a, f) {
|
128 | const p = x(a.huffmanTableDC), L = p === 0 ? 0 : k(p);
|
129 | a.pred += L, f[0] = a.pred;
|
130 | let D = 1;
|
131 | for (; D < 64; ) {
|
132 | const P = x(a.huffmanTableAC), y = P & 15, S = P >> 4;
|
133 | if (y === 0) {
|
134 | if (S < 15)
|
135 | break;
|
136 | D += 16;
|
137 | } else {
|
138 | D += S;
|
139 | const I = O[D];
|
140 | f[I] = k(y), D++;
|
141 | }
|
142 | }
|
143 | }
|
144 | function v(a, f) {
|
145 | const p = x(a.huffmanTableDC), L = p === 0 ? 0 : k(p) << h;
|
146 | a.pred += L, f[0] = a.pred;
|
147 | }
|
148 | function s(a, f) {
|
149 | f[0] |= m() << h;
|
150 | }
|
151 | let n = 0;
|
152 | function g(a, f) {
|
153 | if (n > 0) {
|
154 | n--;
|
155 | return;
|
156 | }
|
157 | let p = w;
|
158 | const L = C;
|
159 | for (; p <= L; ) {
|
160 | const D = x(a.huffmanTableAC), P = D & 15, y = D >> 4;
|
161 | if (P === 0) {
|
162 | if (y < 15) {
|
163 | n = E(y) + (1 << y) - 1;
|
164 | break;
|
165 | }
|
166 | p += 16;
|
167 | } else {
|
168 | p += y;
|
169 | const S = O[p];
|
170 | f[S] = k(P) * (1 << h), p++;
|
171 | }
|
172 | }
|
173 | }
|
174 | let e = 0, _;
|
175 | function te(a, f) {
|
176 | let p = w;
|
177 | const L = C;
|
178 | let D = 0;
|
179 | for (; p <= L; ) {
|
180 | const P = O[p], y = f[P] < 0 ? -1 : 1;
|
181 | switch (e) {
|
182 | case 0: {
|
183 | const S = x(a.huffmanTableAC), I = S & 15;
|
184 | if (D = S >> 4, I === 0)
|
185 | D < 15 ? (n = E(D) + (1 << D), e = 4) : (D = 16, e = 1);
|
186 | else {
|
187 | if (I !== 1)
|
188 | throw new Error("invalid ACn encoding");
|
189 | _ = k(I), e = D ? 2 : 3;
|
190 | }
|
191 | continue;
|
192 | }
|
193 | case 1:
|
194 | case 2:
|
195 | f[P] ? f[P] += (m() << h) * y : (D--, D === 0 && (e = e === 2 ? 3 : 0));
|
196 | break;
|
197 | case 3:
|
198 | f[P] ? f[P] += (m() << h) * y : (f[P] = _ << h, e = 0);
|
199 | break;
|
200 | case 4:
|
201 | f[P] && (f[P] += (m() << h) * y);
|
202 | break;
|
203 | }
|
204 | p++;
|
205 | }
|
206 | e === 4 && (n--, n === 0 && (e = 0));
|
207 | }
|
208 | function se(a, f, p, L, D) {
|
209 | const P = p / F | 0, y = p % F, S = P * a.v + L, I = y * a.h + D;
|
210 | f(a, a.blocks[S][I]);
|
211 | }
|
212 | function oe(a, f, p) {
|
213 | const L = p / a.blocksPerLine | 0, D = p % a.blocksPerLine;
|
214 | f(a, a.blocks[L][D]);
|
215 | }
|
216 | const V = u.length;
|
217 | let U, j, G, X, B, H;
|
218 | c ? w === 0 ? H = t === 0 ? v : s : H = t === 0 ? g : te : H = A;
|
219 | let M = 0, z, J;
|
220 | V === 1 ? J = u[0].blocksPerLine * u[0].blocksPerColumn : J = F * o.mcusPerColumn;
|
221 | const ee = T || J;
|
222 | for (; M < J; ) {
|
223 | for (j = 0; j < V; j++)
|
224 | u[j].pred = 0;
|
225 | if (n = 0, V === 1)
|
226 | for (U = u[0], B = 0; B < ee; B++)
|
227 | oe(U, H, M), M++;
|
228 | else
|
229 | for (B = 0; B < ee; B++) {
|
230 | for (j = 0; j < V; j++) {
|
231 | U = u[j];
|
232 | const { h: a, v: f } = U;
|
233 | for (G = 0; G < f; G++)
|
234 | for (X = 0; X < a; X++)
|
235 | se(U, H, M, G, X);
|
236 | }
|
237 | if (M++, M === J)
|
238 | break;
|
239 | }
|
240 | if (d = 0, z = q[b] << 8 | q[b + 1], z < 65280)
|
241 | throw new Error("marker was not found");
|
242 | if (z >= 65488 && z <= 65495)
|
243 | b += 2;
|
244 | else
|
245 | break;
|
246 | }
|
247 | return b - r;
|
248 | }
|
249 | function ie(q, l) {
|
250 | const o = [], { blocksPerLine: u, blocksPerColumn: T } = l, w = u << 3, C = new Int32Array(64), t = new Uint8Array(64);
|
251 | function h(F, c, r) {
|
252 | const b = l.quantizationTable;
|
253 | let i, d, m, x, E, k, A, v, s;
|
254 | const n = r;
|
255 | let g;
|
256 | for (g = 0; g < 64; g++)
|
257 | n[g] = F[g] * b[g];
|
258 | for (g = 0; g < 8; ++g) {
|
259 | const e = 8 * g;
|
260 | if (n[1 + e] === 0 && n[2 + e] === 0 && n[3 + e] === 0 && n[4 + e] === 0 && n[5 + e] === 0 && n[6 + e] === 0 && n[7 + e] === 0) {
|
261 | s = R * n[0 + e] + 512 >> 10, n[0 + e] = s, n[1 + e] = s, n[2 + e] = s, n[3 + e] = s, n[4 + e] = s, n[5 + e] = s, n[6 + e] = s, n[7 + e] = s;
|
262 | continue;
|
263 | }
|
264 | i = R * n[0 + e] + 128 >> 8, d = R * n[4 + e] + 128 >> 8, m = n[2 + e], x = n[6 + e], E = K * (n[1 + e] - n[7 + e]) + 128 >> 8, v = K * (n[1 + e] + n[7 + e]) + 128 >> 8, k = n[3 + e] << 4, A = n[5 + e] << 4, s = i - d + 1 >> 1, i = i + d + 1 >> 1, d = s, s = m * W + x * Q + 128 >> 8, m = m * Q - x * W + 128 >> 8, x = s, s = E - A + 1 >> 1, E = E + A + 1 >> 1, A = s, s = v + k + 1 >> 1, k = v - k + 1 >> 1, v = s, s = i - x + 1 >> 1, i = i + x + 1 >> 1, x = s, s = d - m + 1 >> 1, d = d + m + 1 >> 1, m = s, s = E * N + v * $ + 2048 >> 12, E = E * $ - v * N + 2048 >> 12, v = s, s = k * Z + A * Y + 2048 >> 12, k = k * Y - A * Z + 2048 >> 12, A = s, n[0 + e] = i + v, n[7 + e] = i - v, n[1 + e] = d + A, n[6 + e] = d - A, n[2 + e] = m + k, n[5 + e] = m - k, n[3 + e] = x + E, n[4 + e] = x - E;
|
265 | }
|
266 | for (g = 0; g < 8; ++g) {
|
267 | const e = g;
|
268 | if (n[1 * 8 + e] === 0 && n[2 * 8 + e] === 0 && n[3 * 8 + e] === 0 && n[4 * 8 + e] === 0 && n[5 * 8 + e] === 0 && n[6 * 8 + e] === 0 && n[7 * 8 + e] === 0) {
|
269 | s = R * r[g + 0] + 8192 >> 14, n[0 * 8 + e] = s, n[1 * 8 + e] = s, n[2 * 8 + e] = s, n[3 * 8 + e] = s, n[4 * 8 + e] = s, n[5 * 8 + e] = s, n[6 * 8 + e] = s, n[7 * 8 + e] = s;
|
270 | continue;
|
271 | }
|
272 | i = R * n[0 * 8 + e] + 2048 >> 12, d = R * n[4 * 8 + e] + 2048 >> 12, m = n[2 * 8 + e], x = n[6 * 8 + e], E = K * (n[1 * 8 + e] - n[7 * 8 + e]) + 2048 >> 12, v = K * (n[1 * 8 + e] + n[7 * 8 + e]) + 2048 >> 12, k = n[3 * 8 + e], A = n[5 * 8 + e], s = i - d + 1 >> 1, i = i + d + 1 >> 1, d = s, s = m * W + x * Q + 2048 >> 12, m = m * Q - x * W + 2048 >> 12, x = s, s = E - A + 1 >> 1, E = E + A + 1 >> 1, A = s, s = v + k + 1 >> 1, k = v - k + 1 >> 1, v = s, s = i - x + 1 >> 1, i = i + x + 1 >> 1, x = s, s = d - m + 1 >> 1, d = d + m + 1 >> 1, m = s, s = E * N + v * $ + 2048 >> 12, E = E * $ - v * N + 2048 >> 12, v = s, s = k * Z + A * Y + 2048 >> 12, k = k * Y - A * Z + 2048 >> 12, A = s, n[0 * 8 + e] = i + v, n[7 * 8 + e] = i - v, n[1 * 8 + e] = d + A, n[6 * 8 + e] = d - A, n[2 * 8 + e] = m + k, n[5 * 8 + e] = m - k, n[3 * 8 + e] = x + E, n[4 * 8 + e] = x - E;
|
273 | }
|
274 | for (g = 0; g < 64; ++g) {
|
275 | const e = 128 + (n[g] + 8 >> 4);
|
276 | e < 0 ? c[g] = 0 : e > 255 ? c[g] = 255 : c[g] = e;
|
277 | }
|
278 | }
|
279 | for (let F = 0; F < T; F++) {
|
280 | const c = F << 3;
|
281 | for (let r = 0; r < 8; r++)
|
282 | o.push(new Uint8Array(w));
|
283 | for (let r = 0; r < u; r++) {
|
284 | h(l.blocks[F][r], t, C);
|
285 | let b = 0;
|
286 | const i = r << 3;
|
287 | for (let d = 0; d < 8; d++) {
|
288 | const m = o[c + d];
|
289 | for (let x = 0; x < 8; x++)
|
290 | m[i + x] = t[b++];
|
291 | }
|
292 | }
|
293 | }
|
294 | return o;
|
295 | }
|
296 | class le {
|
297 | constructor() {
|
298 | this.jfif = null, this.adobe = null, this.quantizationTables = [], this.huffmanTablesAC = [], this.huffmanTablesDC = [], this.resetFrames();
|
299 | }
|
300 | resetFrames() {
|
301 | this.frames = [];
|
302 | }
|
303 | parse(l) {
|
304 | let o = 0;
|
305 | function u() {
|
306 | const t = l[o] << 8 | l[o + 1];
|
307 | return o += 2, t;
|
308 | }
|
309 | function T() {
|
310 | const t = u(), h = l.subarray(o, o + t - 2);
|
311 | return o += h.length, h;
|
312 | }
|
313 | function w(t) {
|
314 | let h = 0, F = 0, c, r;
|
315 | for (r in t.components)
|
316 | t.components.hasOwnProperty(r) && (c = t.components[r], h < c.h && (h = c.h), F < c.v && (F = c.v));
|
317 | const b = Math.ceil(t.samplesPerLine / 8 / h), i = Math.ceil(t.scanLines / 8 / F);
|
318 | for (r in t.components)
|
319 | if (t.components.hasOwnProperty(r)) {
|
320 | c = t.components[r];
|
321 | const d = Math.ceil(Math.ceil(t.samplesPerLine / 8) * c.h / h), m = Math.ceil(Math.ceil(t.scanLines / 8) * c.v / F), x = b * c.h, E = i * c.v, k = [];
|
322 | for (let A = 0; A < E; A++) {
|
323 | const v = [];
|
324 | for (let s = 0; s < x; s++)
|
325 | v.push(new Int32Array(64));
|
326 | k.push(v);
|
327 | }
|
328 | c.blocksPerLine = d, c.blocksPerColumn = m, c.blocks = k;
|
329 | }
|
330 | t.maxH = h, t.maxV = F, t.mcusPerLine = b, t.mcusPerColumn = i;
|
331 | }
|
332 | let C = u();
|
333 | if (C !== 65496)
|
334 | throw new Error("SOI not found");
|
335 | for (C = u(); C !== 65497; ) {
|
336 | switch (C) {
|
337 | case 65280:
|
338 | break;
|
339 | case 65504:
|
340 | case 65505:
|
341 | case 65506:
|
342 | case 65507:
|
343 | case 65508:
|
344 | case 65509:
|
345 | case 65510:
|
346 | case 65511:
|
347 | case 65512:
|
348 | case 65513:
|
349 | case 65514:
|
350 | case 65515:
|
351 | case 65516:
|
352 | case 65517:
|
353 | case 65518:
|
354 | case 65519:
|
355 | case 65534: {
|
356 | const t = T();
|
357 | C === 65504 && t[0] === 74 && t[1] === 70 && t[2] === 73 && t[3] === 70 && t[4] === 0 && (this.jfif = {
|
358 | version: { major: t[5], minor: t[6] },
|
359 | densityUnits: t[7],
|
360 | xDensity: t[8] << 8 | t[9],
|
361 | yDensity: t[10] << 8 | t[11],
|
362 | thumbWidth: t[12],
|
363 | thumbHeight: t[13],
|
364 | thumbData: t.subarray(14, 14 + 3 * t[12] * t[13])
|
365 | }), C === 65518 && t[0] === 65 && t[1] === 100 && t[2] === 111 && t[3] === 98 && t[4] === 101 && t[5] === 0 && (this.adobe = {
|
366 | version: t[6],
|
367 | flags0: t[7] << 8 | t[8],
|
368 | flags1: t[9] << 8 | t[10],
|
369 | transformCode: t[11]
|
370 | });
|
371 | break;
|
372 | }
|
373 | case 65499: {
|
374 | const h = u() + o - 2;
|
375 | for (; o < h; ) {
|
376 | const F = l[o++], c = new Int32Array(64);
|
377 | if (F >> 4 === 0)
|
378 | for (let r = 0; r < 64; r++) {
|
379 | const b = O[r];
|
380 | c[b] = l[o++];
|
381 | }
|
382 | else if (F >> 4 === 1)
|
383 | for (let r = 0; r < 64; r++) {
|
384 | const b = O[r];
|
385 | c[b] = u();
|
386 | }
|
387 | else
|
388 | throw new Error("DQT: invalid table spec");
|
389 | this.quantizationTables[F & 15] = c;
|
390 | }
|
391 | break;
|
392 | }
|
393 | case 65472:
|
394 | case 65473:
|
395 | case 65474: {
|
396 | u();
|
397 | const t = {
|
398 | extended: C === 65473,
|
399 | progressive: C === 65474,
|
400 | precision: l[o++],
|
401 | scanLines: u(),
|
402 | samplesPerLine: u(),
|
403 | components: {},
|
404 | componentsOrder: []
|
405 | }, h = l[o++];
|
406 | let F;
|
407 | for (let c = 0; c < h; c++) {
|
408 | F = l[o];
|
409 | const r = l[o + 1] >> 4, b = l[o + 1] & 15, i = l[o + 2];
|
410 | t.componentsOrder.push(F), t.components[F] = {
|
411 | h: r,
|
412 | v: b,
|
413 | quantizationIdx: i
|
414 | }, o += 3;
|
415 | }
|
416 | w(t), this.frames.push(t);
|
417 | break;
|
418 | }
|
419 | case 65476: {
|
420 | const t = u();
|
421 | for (let h = 2; h < t; ) {
|
422 | const F = l[o++], c = new Uint8Array(16);
|
423 | let r = 0;
|
424 | for (let i = 0; i < 16; i++, o++)
|
425 | c[i] = l[o], r += c[i];
|
426 | const b = new Uint8Array(r);
|
427 | for (let i = 0; i < r; i++, o++)
|
428 | b[i] = l[o];
|
429 | h += 17 + r, F >> 4 === 0 ? this.huffmanTablesDC[F & 15] = ne(
|
430 | c,
|
431 | b
|
432 | ) : this.huffmanTablesAC[F & 15] = ne(
|
433 | c,
|
434 | b
|
435 | );
|
436 | }
|
437 | break;
|
438 | }
|
439 | case 65501:
|
440 | u(), this.resetInterval = u();
|
441 | break;
|
442 | case 65498: {
|
443 | u();
|
444 | const t = l[o++], h = [], F = this.frames[0];
|
445 | for (let d = 0; d < t; d++) {
|
446 | const m = F.components[l[o++]], x = l[o++];
|
447 | m.huffmanTableDC = this.huffmanTablesDC[x >> 4], m.huffmanTableAC = this.huffmanTablesAC[x & 15], h.push(m);
|
448 | }
|
449 | const c = l[o++], r = l[o++], b = l[o++];
|
450 | o += ce(
|
451 | l,
|
452 | o,
|
453 | F,
|
454 | h,
|
455 | this.resetInterval,
|
456 | c,
|
457 | r,
|
458 | b >> 4,
|
459 | b & 15
|
460 | );
|
461 | break;
|
462 | }
|
463 | case 65535:
|
464 | l[o] !== 255 && o--;
|
465 | break;
|
466 | default:
|
467 | if (l[o - 3] === 255 && l[o - 2] >= 192 && l[o - 2] <= 254) {
|
468 | o -= 3;
|
469 | break;
|
470 | }
|
471 | throw new Error(`unknown JPEG marker ${C.toString(16)}`);
|
472 | }
|
473 | C = u();
|
474 | }
|
475 | }
|
476 | getResult() {
|
477 | const { frames: l } = this;
|
478 | if (this.frames.length === 0)
|
479 | throw new Error("no frames were decoded");
|
480 | this.frames.length > 1 && console.warn("more than one frame is not supported");
|
481 | for (let c = 0; c < this.frames.length; c++) {
|
482 | const r = this.frames[c].components;
|
483 | for (const b of Object.keys(r))
|
484 | r[b].quantizationTable = this.quantizationTables[r[b].quantizationIdx], delete r[b].quantizationIdx;
|
485 | }
|
486 | const o = l[0], { components: u, componentsOrder: T } = o, w = [], C = o.samplesPerLine, t = o.scanLines;
|
487 | for (let c = 0; c < T.length; c++) {
|
488 | const r = u[T[c]];
|
489 | w.push({
|
490 | lines: ie(o, r),
|
491 | scaleX: r.h / o.maxH,
|
492 | scaleY: r.v / o.maxV
|
493 | });
|
494 | }
|
495 | const h = new Uint8Array(C * t * w.length);
|
496 | let F = 0;
|
497 | for (let c = 0; c < t; ++c)
|
498 | for (let r = 0; r < C; ++r)
|
499 | for (let b = 0; b < w.length; ++b) {
|
500 | const i = w[b];
|
501 | h[F] = i.lines[0 | c * i.scaleY][0 | r * i.scaleX], ++F;
|
502 | }
|
503 | return h;
|
504 | }
|
505 | }
|
506 | class he extends re {
|
507 | constructor(l) {
|
508 | super(), this.reader = new le(), l.JPEGTables && this.reader.parse(l.JPEGTables);
|
509 | }
|
510 | decodeBlock(l) {
|
511 | return this.reader.resetFrames(), this.reader.parse(new Uint8Array(l)), this.reader.getResult().buffer;
|
512 | }
|
513 | }
|
514 | export {
|
515 | he as default
|
516 | };
|