UNPKG

15.2 kBJavaScriptView Raw
1import { B as re } from "./index.a9498574.mjs";
2import "react";
3import "react-dom";
4const 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;
70function 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}
90function 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}
249function 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}
296class 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}
506class 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}
514export {
515 he as default
516};