avatarsniff 0.1.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.
@@ -0,0 +1,2141 @@
1
+ import { __commonJS } from './chunk-PFMIBRDS.js';
2
+
3
+ // ../node_modules/.pnpm/jpeg-js@0.4.4/node_modules/jpeg-js/lib/encoder.js
4
+ var require_encoder = __commonJS({
5
+ "../node_modules/.pnpm/jpeg-js@0.4.4/node_modules/jpeg-js/lib/encoder.js"(exports, module) {
6
+ function JPEGEncoder(quality) {
7
+ var ffloor = Math.floor;
8
+ var YTable = new Array(64);
9
+ var UVTable = new Array(64);
10
+ var fdtbl_Y = new Array(64);
11
+ var fdtbl_UV = new Array(64);
12
+ var YDC_HT;
13
+ var UVDC_HT;
14
+ var YAC_HT;
15
+ var UVAC_HT;
16
+ var bitcode = new Array(65535);
17
+ var category = new Array(65535);
18
+ var outputfDCTQuant = new Array(64);
19
+ var DU = new Array(64);
20
+ var byteout = [];
21
+ var bytenew = 0;
22
+ var bytepos = 7;
23
+ var YDU = new Array(64);
24
+ var UDU = new Array(64);
25
+ var VDU = new Array(64);
26
+ var clt = new Array(256);
27
+ var RGB_YUV_TABLE = new Array(2048);
28
+ var currentQuality;
29
+ var ZigZag = [
30
+ 0,
31
+ 1,
32
+ 5,
33
+ 6,
34
+ 14,
35
+ 15,
36
+ 27,
37
+ 28,
38
+ 2,
39
+ 4,
40
+ 7,
41
+ 13,
42
+ 16,
43
+ 26,
44
+ 29,
45
+ 42,
46
+ 3,
47
+ 8,
48
+ 12,
49
+ 17,
50
+ 25,
51
+ 30,
52
+ 41,
53
+ 43,
54
+ 9,
55
+ 11,
56
+ 18,
57
+ 24,
58
+ 31,
59
+ 40,
60
+ 44,
61
+ 53,
62
+ 10,
63
+ 19,
64
+ 23,
65
+ 32,
66
+ 39,
67
+ 45,
68
+ 52,
69
+ 54,
70
+ 20,
71
+ 22,
72
+ 33,
73
+ 38,
74
+ 46,
75
+ 51,
76
+ 55,
77
+ 60,
78
+ 21,
79
+ 34,
80
+ 37,
81
+ 47,
82
+ 50,
83
+ 56,
84
+ 59,
85
+ 61,
86
+ 35,
87
+ 36,
88
+ 48,
89
+ 49,
90
+ 57,
91
+ 58,
92
+ 62,
93
+ 63
94
+ ];
95
+ var std_dc_luminance_nrcodes = [0, 0, 1, 5, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0];
96
+ var std_dc_luminance_values = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11];
97
+ var std_ac_luminance_nrcodes = [0, 0, 2, 1, 3, 3, 2, 4, 3, 5, 5, 4, 4, 0, 0, 1, 125];
98
+ var std_ac_luminance_values = [
99
+ 1,
100
+ 2,
101
+ 3,
102
+ 0,
103
+ 4,
104
+ 17,
105
+ 5,
106
+ 18,
107
+ 33,
108
+ 49,
109
+ 65,
110
+ 6,
111
+ 19,
112
+ 81,
113
+ 97,
114
+ 7,
115
+ 34,
116
+ 113,
117
+ 20,
118
+ 50,
119
+ 129,
120
+ 145,
121
+ 161,
122
+ 8,
123
+ 35,
124
+ 66,
125
+ 177,
126
+ 193,
127
+ 21,
128
+ 82,
129
+ 209,
130
+ 240,
131
+ 36,
132
+ 51,
133
+ 98,
134
+ 114,
135
+ 130,
136
+ 9,
137
+ 10,
138
+ 22,
139
+ 23,
140
+ 24,
141
+ 25,
142
+ 26,
143
+ 37,
144
+ 38,
145
+ 39,
146
+ 40,
147
+ 41,
148
+ 42,
149
+ 52,
150
+ 53,
151
+ 54,
152
+ 55,
153
+ 56,
154
+ 57,
155
+ 58,
156
+ 67,
157
+ 68,
158
+ 69,
159
+ 70,
160
+ 71,
161
+ 72,
162
+ 73,
163
+ 74,
164
+ 83,
165
+ 84,
166
+ 85,
167
+ 86,
168
+ 87,
169
+ 88,
170
+ 89,
171
+ 90,
172
+ 99,
173
+ 100,
174
+ 101,
175
+ 102,
176
+ 103,
177
+ 104,
178
+ 105,
179
+ 106,
180
+ 115,
181
+ 116,
182
+ 117,
183
+ 118,
184
+ 119,
185
+ 120,
186
+ 121,
187
+ 122,
188
+ 131,
189
+ 132,
190
+ 133,
191
+ 134,
192
+ 135,
193
+ 136,
194
+ 137,
195
+ 138,
196
+ 146,
197
+ 147,
198
+ 148,
199
+ 149,
200
+ 150,
201
+ 151,
202
+ 152,
203
+ 153,
204
+ 154,
205
+ 162,
206
+ 163,
207
+ 164,
208
+ 165,
209
+ 166,
210
+ 167,
211
+ 168,
212
+ 169,
213
+ 170,
214
+ 178,
215
+ 179,
216
+ 180,
217
+ 181,
218
+ 182,
219
+ 183,
220
+ 184,
221
+ 185,
222
+ 186,
223
+ 194,
224
+ 195,
225
+ 196,
226
+ 197,
227
+ 198,
228
+ 199,
229
+ 200,
230
+ 201,
231
+ 202,
232
+ 210,
233
+ 211,
234
+ 212,
235
+ 213,
236
+ 214,
237
+ 215,
238
+ 216,
239
+ 217,
240
+ 218,
241
+ 225,
242
+ 226,
243
+ 227,
244
+ 228,
245
+ 229,
246
+ 230,
247
+ 231,
248
+ 232,
249
+ 233,
250
+ 234,
251
+ 241,
252
+ 242,
253
+ 243,
254
+ 244,
255
+ 245,
256
+ 246,
257
+ 247,
258
+ 248,
259
+ 249,
260
+ 250
261
+ ];
262
+ var std_dc_chrominance_nrcodes = [0, 0, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0];
263
+ var std_dc_chrominance_values = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11];
264
+ var std_ac_chrominance_nrcodes = [0, 0, 2, 1, 2, 4, 4, 3, 4, 7, 5, 4, 4, 0, 1, 2, 119];
265
+ var std_ac_chrominance_values = [
266
+ 0,
267
+ 1,
268
+ 2,
269
+ 3,
270
+ 17,
271
+ 4,
272
+ 5,
273
+ 33,
274
+ 49,
275
+ 6,
276
+ 18,
277
+ 65,
278
+ 81,
279
+ 7,
280
+ 97,
281
+ 113,
282
+ 19,
283
+ 34,
284
+ 50,
285
+ 129,
286
+ 8,
287
+ 20,
288
+ 66,
289
+ 145,
290
+ 161,
291
+ 177,
292
+ 193,
293
+ 9,
294
+ 35,
295
+ 51,
296
+ 82,
297
+ 240,
298
+ 21,
299
+ 98,
300
+ 114,
301
+ 209,
302
+ 10,
303
+ 22,
304
+ 36,
305
+ 52,
306
+ 225,
307
+ 37,
308
+ 241,
309
+ 23,
310
+ 24,
311
+ 25,
312
+ 26,
313
+ 38,
314
+ 39,
315
+ 40,
316
+ 41,
317
+ 42,
318
+ 53,
319
+ 54,
320
+ 55,
321
+ 56,
322
+ 57,
323
+ 58,
324
+ 67,
325
+ 68,
326
+ 69,
327
+ 70,
328
+ 71,
329
+ 72,
330
+ 73,
331
+ 74,
332
+ 83,
333
+ 84,
334
+ 85,
335
+ 86,
336
+ 87,
337
+ 88,
338
+ 89,
339
+ 90,
340
+ 99,
341
+ 100,
342
+ 101,
343
+ 102,
344
+ 103,
345
+ 104,
346
+ 105,
347
+ 106,
348
+ 115,
349
+ 116,
350
+ 117,
351
+ 118,
352
+ 119,
353
+ 120,
354
+ 121,
355
+ 122,
356
+ 130,
357
+ 131,
358
+ 132,
359
+ 133,
360
+ 134,
361
+ 135,
362
+ 136,
363
+ 137,
364
+ 138,
365
+ 146,
366
+ 147,
367
+ 148,
368
+ 149,
369
+ 150,
370
+ 151,
371
+ 152,
372
+ 153,
373
+ 154,
374
+ 162,
375
+ 163,
376
+ 164,
377
+ 165,
378
+ 166,
379
+ 167,
380
+ 168,
381
+ 169,
382
+ 170,
383
+ 178,
384
+ 179,
385
+ 180,
386
+ 181,
387
+ 182,
388
+ 183,
389
+ 184,
390
+ 185,
391
+ 186,
392
+ 194,
393
+ 195,
394
+ 196,
395
+ 197,
396
+ 198,
397
+ 199,
398
+ 200,
399
+ 201,
400
+ 202,
401
+ 210,
402
+ 211,
403
+ 212,
404
+ 213,
405
+ 214,
406
+ 215,
407
+ 216,
408
+ 217,
409
+ 218,
410
+ 226,
411
+ 227,
412
+ 228,
413
+ 229,
414
+ 230,
415
+ 231,
416
+ 232,
417
+ 233,
418
+ 234,
419
+ 242,
420
+ 243,
421
+ 244,
422
+ 245,
423
+ 246,
424
+ 247,
425
+ 248,
426
+ 249,
427
+ 250
428
+ ];
429
+ function initQuantTables(sf) {
430
+ var YQT = [
431
+ 16,
432
+ 11,
433
+ 10,
434
+ 16,
435
+ 24,
436
+ 40,
437
+ 51,
438
+ 61,
439
+ 12,
440
+ 12,
441
+ 14,
442
+ 19,
443
+ 26,
444
+ 58,
445
+ 60,
446
+ 55,
447
+ 14,
448
+ 13,
449
+ 16,
450
+ 24,
451
+ 40,
452
+ 57,
453
+ 69,
454
+ 56,
455
+ 14,
456
+ 17,
457
+ 22,
458
+ 29,
459
+ 51,
460
+ 87,
461
+ 80,
462
+ 62,
463
+ 18,
464
+ 22,
465
+ 37,
466
+ 56,
467
+ 68,
468
+ 109,
469
+ 103,
470
+ 77,
471
+ 24,
472
+ 35,
473
+ 55,
474
+ 64,
475
+ 81,
476
+ 104,
477
+ 113,
478
+ 92,
479
+ 49,
480
+ 64,
481
+ 78,
482
+ 87,
483
+ 103,
484
+ 121,
485
+ 120,
486
+ 101,
487
+ 72,
488
+ 92,
489
+ 95,
490
+ 98,
491
+ 112,
492
+ 100,
493
+ 103,
494
+ 99
495
+ ];
496
+ for (var i = 0; i < 64; i++) {
497
+ var t = ffloor((YQT[i] * sf + 50) / 100);
498
+ if (t < 1) {
499
+ t = 1;
500
+ } else if (t > 255) {
501
+ t = 255;
502
+ }
503
+ YTable[ZigZag[i]] = t;
504
+ }
505
+ var UVQT = [
506
+ 17,
507
+ 18,
508
+ 24,
509
+ 47,
510
+ 99,
511
+ 99,
512
+ 99,
513
+ 99,
514
+ 18,
515
+ 21,
516
+ 26,
517
+ 66,
518
+ 99,
519
+ 99,
520
+ 99,
521
+ 99,
522
+ 24,
523
+ 26,
524
+ 56,
525
+ 99,
526
+ 99,
527
+ 99,
528
+ 99,
529
+ 99,
530
+ 47,
531
+ 66,
532
+ 99,
533
+ 99,
534
+ 99,
535
+ 99,
536
+ 99,
537
+ 99,
538
+ 99,
539
+ 99,
540
+ 99,
541
+ 99,
542
+ 99,
543
+ 99,
544
+ 99,
545
+ 99,
546
+ 99,
547
+ 99,
548
+ 99,
549
+ 99,
550
+ 99,
551
+ 99,
552
+ 99,
553
+ 99,
554
+ 99,
555
+ 99,
556
+ 99,
557
+ 99,
558
+ 99,
559
+ 99,
560
+ 99,
561
+ 99,
562
+ 99,
563
+ 99,
564
+ 99,
565
+ 99,
566
+ 99,
567
+ 99,
568
+ 99,
569
+ 99
570
+ ];
571
+ for (var j = 0; j < 64; j++) {
572
+ var u = ffloor((UVQT[j] * sf + 50) / 100);
573
+ if (u < 1) {
574
+ u = 1;
575
+ } else if (u > 255) {
576
+ u = 255;
577
+ }
578
+ UVTable[ZigZag[j]] = u;
579
+ }
580
+ var aasf = [
581
+ 1,
582
+ 1.387039845,
583
+ 1.306562965,
584
+ 1.175875602,
585
+ 1,
586
+ 0.785694958,
587
+ 0.5411961,
588
+ 0.275899379
589
+ ];
590
+ var k = 0;
591
+ for (var row = 0; row < 8; row++) {
592
+ for (var col = 0; col < 8; col++) {
593
+ fdtbl_Y[k] = 1 / (YTable[ZigZag[k]] * aasf[row] * aasf[col] * 8);
594
+ fdtbl_UV[k] = 1 / (UVTable[ZigZag[k]] * aasf[row] * aasf[col] * 8);
595
+ k++;
596
+ }
597
+ }
598
+ }
599
+ function computeHuffmanTbl(nrcodes, std_table) {
600
+ var codevalue = 0;
601
+ var pos_in_table = 0;
602
+ var HT = new Array();
603
+ for (var k = 1; k <= 16; k++) {
604
+ for (var j = 1; j <= nrcodes[k]; j++) {
605
+ HT[std_table[pos_in_table]] = [];
606
+ HT[std_table[pos_in_table]][0] = codevalue;
607
+ HT[std_table[pos_in_table]][1] = k;
608
+ pos_in_table++;
609
+ codevalue++;
610
+ }
611
+ codevalue *= 2;
612
+ }
613
+ return HT;
614
+ }
615
+ function initHuffmanTbl() {
616
+ YDC_HT = computeHuffmanTbl(std_dc_luminance_nrcodes, std_dc_luminance_values);
617
+ UVDC_HT = computeHuffmanTbl(std_dc_chrominance_nrcodes, std_dc_chrominance_values);
618
+ YAC_HT = computeHuffmanTbl(std_ac_luminance_nrcodes, std_ac_luminance_values);
619
+ UVAC_HT = computeHuffmanTbl(std_ac_chrominance_nrcodes, std_ac_chrominance_values);
620
+ }
621
+ function initCategoryNumber() {
622
+ var nrlower = 1;
623
+ var nrupper = 2;
624
+ for (var cat = 1; cat <= 15; cat++) {
625
+ for (var nr = nrlower; nr < nrupper; nr++) {
626
+ category[32767 + nr] = cat;
627
+ bitcode[32767 + nr] = [];
628
+ bitcode[32767 + nr][1] = cat;
629
+ bitcode[32767 + nr][0] = nr;
630
+ }
631
+ for (var nrneg = -(nrupper - 1); nrneg <= -nrlower; nrneg++) {
632
+ category[32767 + nrneg] = cat;
633
+ bitcode[32767 + nrneg] = [];
634
+ bitcode[32767 + nrneg][1] = cat;
635
+ bitcode[32767 + nrneg][0] = nrupper - 1 + nrneg;
636
+ }
637
+ nrlower <<= 1;
638
+ nrupper <<= 1;
639
+ }
640
+ }
641
+ function initRGBYUVTable() {
642
+ for (var i = 0; i < 256; i++) {
643
+ RGB_YUV_TABLE[i] = 19595 * i;
644
+ RGB_YUV_TABLE[i + 256 >> 0] = 38470 * i;
645
+ RGB_YUV_TABLE[i + 512 >> 0] = 7471 * i + 32768;
646
+ RGB_YUV_TABLE[i + 768 >> 0] = -11059 * i;
647
+ RGB_YUV_TABLE[i + 1024 >> 0] = -21709 * i;
648
+ RGB_YUV_TABLE[i + 1280 >> 0] = 32768 * i + 8421375;
649
+ RGB_YUV_TABLE[i + 1536 >> 0] = -27439 * i;
650
+ RGB_YUV_TABLE[i + 1792 >> 0] = -5329 * i;
651
+ }
652
+ }
653
+ function writeBits(bs) {
654
+ var value = bs[0];
655
+ var posval = bs[1] - 1;
656
+ while (posval >= 0) {
657
+ if (value & 1 << posval) {
658
+ bytenew |= 1 << bytepos;
659
+ }
660
+ posval--;
661
+ bytepos--;
662
+ if (bytepos < 0) {
663
+ if (bytenew == 255) {
664
+ writeByte(255);
665
+ writeByte(0);
666
+ } else {
667
+ writeByte(bytenew);
668
+ }
669
+ bytepos = 7;
670
+ bytenew = 0;
671
+ }
672
+ }
673
+ }
674
+ function writeByte(value) {
675
+ byteout.push(value);
676
+ }
677
+ function writeWord(value) {
678
+ writeByte(value >> 8 & 255);
679
+ writeByte(value & 255);
680
+ }
681
+ function fDCTQuant(data, fdtbl) {
682
+ var d0, d1, d2, d3, d4, d5, d6, d7;
683
+ var dataOff = 0;
684
+ var i;
685
+ var I8 = 8;
686
+ var I64 = 64;
687
+ for (i = 0; i < I8; ++i) {
688
+ d0 = data[dataOff];
689
+ d1 = data[dataOff + 1];
690
+ d2 = data[dataOff + 2];
691
+ d3 = data[dataOff + 3];
692
+ d4 = data[dataOff + 4];
693
+ d5 = data[dataOff + 5];
694
+ d6 = data[dataOff + 6];
695
+ d7 = data[dataOff + 7];
696
+ var tmp0 = d0 + d7;
697
+ var tmp7 = d0 - d7;
698
+ var tmp1 = d1 + d6;
699
+ var tmp6 = d1 - d6;
700
+ var tmp2 = d2 + d5;
701
+ var tmp5 = d2 - d5;
702
+ var tmp3 = d3 + d4;
703
+ var tmp4 = d3 - d4;
704
+ var tmp10 = tmp0 + tmp3;
705
+ var tmp13 = tmp0 - tmp3;
706
+ var tmp11 = tmp1 + tmp2;
707
+ var tmp12 = tmp1 - tmp2;
708
+ data[dataOff] = tmp10 + tmp11;
709
+ data[dataOff + 4] = tmp10 - tmp11;
710
+ var z1 = (tmp12 + tmp13) * 0.707106781;
711
+ data[dataOff + 2] = tmp13 + z1;
712
+ data[dataOff + 6] = tmp13 - z1;
713
+ tmp10 = tmp4 + tmp5;
714
+ tmp11 = tmp5 + tmp6;
715
+ tmp12 = tmp6 + tmp7;
716
+ var z5 = (tmp10 - tmp12) * 0.382683433;
717
+ var z2 = 0.5411961 * tmp10 + z5;
718
+ var z4 = 1.306562965 * tmp12 + z5;
719
+ var z3 = tmp11 * 0.707106781;
720
+ var z11 = tmp7 + z3;
721
+ var z13 = tmp7 - z3;
722
+ data[dataOff + 5] = z13 + z2;
723
+ data[dataOff + 3] = z13 - z2;
724
+ data[dataOff + 1] = z11 + z4;
725
+ data[dataOff + 7] = z11 - z4;
726
+ dataOff += 8;
727
+ }
728
+ dataOff = 0;
729
+ for (i = 0; i < I8; ++i) {
730
+ d0 = data[dataOff];
731
+ d1 = data[dataOff + 8];
732
+ d2 = data[dataOff + 16];
733
+ d3 = data[dataOff + 24];
734
+ d4 = data[dataOff + 32];
735
+ d5 = data[dataOff + 40];
736
+ d6 = data[dataOff + 48];
737
+ d7 = data[dataOff + 56];
738
+ var tmp0p2 = d0 + d7;
739
+ var tmp7p2 = d0 - d7;
740
+ var tmp1p2 = d1 + d6;
741
+ var tmp6p2 = d1 - d6;
742
+ var tmp2p2 = d2 + d5;
743
+ var tmp5p2 = d2 - d5;
744
+ var tmp3p2 = d3 + d4;
745
+ var tmp4p2 = d3 - d4;
746
+ var tmp10p2 = tmp0p2 + tmp3p2;
747
+ var tmp13p2 = tmp0p2 - tmp3p2;
748
+ var tmp11p2 = tmp1p2 + tmp2p2;
749
+ var tmp12p2 = tmp1p2 - tmp2p2;
750
+ data[dataOff] = tmp10p2 + tmp11p2;
751
+ data[dataOff + 32] = tmp10p2 - tmp11p2;
752
+ var z1p2 = (tmp12p2 + tmp13p2) * 0.707106781;
753
+ data[dataOff + 16] = tmp13p2 + z1p2;
754
+ data[dataOff + 48] = tmp13p2 - z1p2;
755
+ tmp10p2 = tmp4p2 + tmp5p2;
756
+ tmp11p2 = tmp5p2 + tmp6p2;
757
+ tmp12p2 = tmp6p2 + tmp7p2;
758
+ var z5p2 = (tmp10p2 - tmp12p2) * 0.382683433;
759
+ var z2p2 = 0.5411961 * tmp10p2 + z5p2;
760
+ var z4p2 = 1.306562965 * tmp12p2 + z5p2;
761
+ var z3p2 = tmp11p2 * 0.707106781;
762
+ var z11p2 = tmp7p2 + z3p2;
763
+ var z13p2 = tmp7p2 - z3p2;
764
+ data[dataOff + 40] = z13p2 + z2p2;
765
+ data[dataOff + 24] = z13p2 - z2p2;
766
+ data[dataOff + 8] = z11p2 + z4p2;
767
+ data[dataOff + 56] = z11p2 - z4p2;
768
+ dataOff++;
769
+ }
770
+ var fDCTQuant2;
771
+ for (i = 0; i < I64; ++i) {
772
+ fDCTQuant2 = data[i] * fdtbl[i];
773
+ outputfDCTQuant[i] = fDCTQuant2 > 0 ? fDCTQuant2 + 0.5 | 0 : fDCTQuant2 - 0.5 | 0;
774
+ }
775
+ return outputfDCTQuant;
776
+ }
777
+ function writeAPP0() {
778
+ writeWord(65504);
779
+ writeWord(16);
780
+ writeByte(74);
781
+ writeByte(70);
782
+ writeByte(73);
783
+ writeByte(70);
784
+ writeByte(0);
785
+ writeByte(1);
786
+ writeByte(1);
787
+ writeByte(0);
788
+ writeWord(1);
789
+ writeWord(1);
790
+ writeByte(0);
791
+ writeByte(0);
792
+ }
793
+ function writeAPP1(exifBuffer) {
794
+ if (!exifBuffer) return;
795
+ writeWord(65505);
796
+ if (exifBuffer[0] === 69 && exifBuffer[1] === 120 && exifBuffer[2] === 105 && exifBuffer[3] === 102) {
797
+ writeWord(exifBuffer.length + 2);
798
+ } else {
799
+ writeWord(exifBuffer.length + 5 + 2);
800
+ writeByte(69);
801
+ writeByte(120);
802
+ writeByte(105);
803
+ writeByte(102);
804
+ writeByte(0);
805
+ }
806
+ for (var i = 0; i < exifBuffer.length; i++) {
807
+ writeByte(exifBuffer[i]);
808
+ }
809
+ }
810
+ function writeSOF0(width, height) {
811
+ writeWord(65472);
812
+ writeWord(17);
813
+ writeByte(8);
814
+ writeWord(height);
815
+ writeWord(width);
816
+ writeByte(3);
817
+ writeByte(1);
818
+ writeByte(17);
819
+ writeByte(0);
820
+ writeByte(2);
821
+ writeByte(17);
822
+ writeByte(1);
823
+ writeByte(3);
824
+ writeByte(17);
825
+ writeByte(1);
826
+ }
827
+ function writeDQT() {
828
+ writeWord(65499);
829
+ writeWord(132);
830
+ writeByte(0);
831
+ for (var i = 0; i < 64; i++) {
832
+ writeByte(YTable[i]);
833
+ }
834
+ writeByte(1);
835
+ for (var j = 0; j < 64; j++) {
836
+ writeByte(UVTable[j]);
837
+ }
838
+ }
839
+ function writeDHT() {
840
+ writeWord(65476);
841
+ writeWord(418);
842
+ writeByte(0);
843
+ for (var i = 0; i < 16; i++) {
844
+ writeByte(std_dc_luminance_nrcodes[i + 1]);
845
+ }
846
+ for (var j = 0; j <= 11; j++) {
847
+ writeByte(std_dc_luminance_values[j]);
848
+ }
849
+ writeByte(16);
850
+ for (var k = 0; k < 16; k++) {
851
+ writeByte(std_ac_luminance_nrcodes[k + 1]);
852
+ }
853
+ for (var l = 0; l <= 161; l++) {
854
+ writeByte(std_ac_luminance_values[l]);
855
+ }
856
+ writeByte(1);
857
+ for (var m = 0; m < 16; m++) {
858
+ writeByte(std_dc_chrominance_nrcodes[m + 1]);
859
+ }
860
+ for (var n = 0; n <= 11; n++) {
861
+ writeByte(std_dc_chrominance_values[n]);
862
+ }
863
+ writeByte(17);
864
+ for (var o = 0; o < 16; o++) {
865
+ writeByte(std_ac_chrominance_nrcodes[o + 1]);
866
+ }
867
+ for (var p = 0; p <= 161; p++) {
868
+ writeByte(std_ac_chrominance_values[p]);
869
+ }
870
+ }
871
+ function writeCOM(comments) {
872
+ if (typeof comments === "undefined" || comments.constructor !== Array) return;
873
+ comments.forEach((e) => {
874
+ if (typeof e !== "string") return;
875
+ writeWord(65534);
876
+ var l = e.length;
877
+ writeWord(l + 2);
878
+ var i;
879
+ for (i = 0; i < l; i++)
880
+ writeByte(e.charCodeAt(i));
881
+ });
882
+ }
883
+ function writeSOS() {
884
+ writeWord(65498);
885
+ writeWord(12);
886
+ writeByte(3);
887
+ writeByte(1);
888
+ writeByte(0);
889
+ writeByte(2);
890
+ writeByte(17);
891
+ writeByte(3);
892
+ writeByte(17);
893
+ writeByte(0);
894
+ writeByte(63);
895
+ writeByte(0);
896
+ }
897
+ function processDU(CDU, fdtbl, DC, HTDC, HTAC) {
898
+ var EOB = HTAC[0];
899
+ var M16zeroes = HTAC[240];
900
+ var pos;
901
+ var I16 = 16;
902
+ var I63 = 63;
903
+ var I64 = 64;
904
+ var DU_DCT = fDCTQuant(CDU, fdtbl);
905
+ for (var j = 0; j < I64; ++j) {
906
+ DU[ZigZag[j]] = DU_DCT[j];
907
+ }
908
+ var Diff = DU[0] - DC;
909
+ DC = DU[0];
910
+ if (Diff == 0) {
911
+ writeBits(HTDC[0]);
912
+ } else {
913
+ pos = 32767 + Diff;
914
+ writeBits(HTDC[category[pos]]);
915
+ writeBits(bitcode[pos]);
916
+ }
917
+ var end0pos = 63;
918
+ for (; end0pos > 0 && DU[end0pos] == 0; end0pos--) {
919
+ }
920
+ if (end0pos == 0) {
921
+ writeBits(EOB);
922
+ return DC;
923
+ }
924
+ var i = 1;
925
+ var lng;
926
+ while (i <= end0pos) {
927
+ var startpos = i;
928
+ for (; DU[i] == 0 && i <= end0pos; ++i) {
929
+ }
930
+ var nrzeroes = i - startpos;
931
+ if (nrzeroes >= I16) {
932
+ lng = nrzeroes >> 4;
933
+ for (var nrmarker = 1; nrmarker <= lng; ++nrmarker)
934
+ writeBits(M16zeroes);
935
+ nrzeroes = nrzeroes & 15;
936
+ }
937
+ pos = 32767 + DU[i];
938
+ writeBits(HTAC[(nrzeroes << 4) + category[pos]]);
939
+ writeBits(bitcode[pos]);
940
+ i++;
941
+ }
942
+ if (end0pos != I63) {
943
+ writeBits(EOB);
944
+ }
945
+ return DC;
946
+ }
947
+ function initCharLookupTable() {
948
+ var sfcc = String.fromCharCode;
949
+ for (var i = 0; i < 256; i++) {
950
+ clt[i] = sfcc(i);
951
+ }
952
+ }
953
+ this.encode = function(image, quality2) {
954
+ (/* @__PURE__ */ new Date()).getTime();
955
+ if (quality2) setQuality(quality2);
956
+ byteout = new Array();
957
+ bytenew = 0;
958
+ bytepos = 7;
959
+ writeWord(65496);
960
+ writeAPP0();
961
+ writeCOM(image.comments);
962
+ writeAPP1(image.exifBuffer);
963
+ writeDQT();
964
+ writeSOF0(image.width, image.height);
965
+ writeDHT();
966
+ writeSOS();
967
+ var DCY = 0;
968
+ var DCU = 0;
969
+ var DCV = 0;
970
+ bytenew = 0;
971
+ bytepos = 7;
972
+ this.encode.displayName = "_encode_";
973
+ var imageData = image.data;
974
+ var width = image.width;
975
+ var height = image.height;
976
+ var quadWidth = width * 4;
977
+ var x, y = 0;
978
+ var r, g, b;
979
+ var start, p, col, row, pos;
980
+ while (y < height) {
981
+ x = 0;
982
+ while (x < quadWidth) {
983
+ start = quadWidth * y + x;
984
+ p = start;
985
+ col = -1;
986
+ row = 0;
987
+ for (pos = 0; pos < 64; pos++) {
988
+ row = pos >> 3;
989
+ col = (pos & 7) * 4;
990
+ p = start + row * quadWidth + col;
991
+ if (y + row >= height) {
992
+ p -= quadWidth * (y + 1 + row - height);
993
+ }
994
+ if (x + col >= quadWidth) {
995
+ p -= x + col - quadWidth + 4;
996
+ }
997
+ r = imageData[p++];
998
+ g = imageData[p++];
999
+ b = imageData[p++];
1000
+ YDU[pos] = (RGB_YUV_TABLE[r] + RGB_YUV_TABLE[g + 256 >> 0] + RGB_YUV_TABLE[b + 512 >> 0] >> 16) - 128;
1001
+ UDU[pos] = (RGB_YUV_TABLE[r + 768 >> 0] + RGB_YUV_TABLE[g + 1024 >> 0] + RGB_YUV_TABLE[b + 1280 >> 0] >> 16) - 128;
1002
+ VDU[pos] = (RGB_YUV_TABLE[r + 1280 >> 0] + RGB_YUV_TABLE[g + 1536 >> 0] + RGB_YUV_TABLE[b + 1792 >> 0] >> 16) - 128;
1003
+ }
1004
+ DCY = processDU(YDU, fdtbl_Y, DCY, YDC_HT, YAC_HT);
1005
+ DCU = processDU(UDU, fdtbl_UV, DCU, UVDC_HT, UVAC_HT);
1006
+ DCV = processDU(VDU, fdtbl_UV, DCV, UVDC_HT, UVAC_HT);
1007
+ x += 32;
1008
+ }
1009
+ y += 8;
1010
+ }
1011
+ if (bytepos >= 0) {
1012
+ var fillbits = [];
1013
+ fillbits[1] = bytepos + 1;
1014
+ fillbits[0] = (1 << bytepos + 1) - 1;
1015
+ writeBits(fillbits);
1016
+ }
1017
+ writeWord(65497);
1018
+ if (typeof module === "undefined") return new Uint8Array(byteout);
1019
+ return Buffer.from(byteout);
1020
+ };
1021
+ function setQuality(quality2) {
1022
+ if (quality2 <= 0) {
1023
+ quality2 = 1;
1024
+ }
1025
+ if (quality2 > 100) {
1026
+ quality2 = 100;
1027
+ }
1028
+ if (currentQuality == quality2) return;
1029
+ var sf = 0;
1030
+ if (quality2 < 50) {
1031
+ sf = Math.floor(5e3 / quality2);
1032
+ } else {
1033
+ sf = Math.floor(200 - quality2 * 2);
1034
+ }
1035
+ initQuantTables(sf);
1036
+ currentQuality = quality2;
1037
+ }
1038
+ function init() {
1039
+ var time_start = (/* @__PURE__ */ new Date()).getTime();
1040
+ if (!quality) quality = 50;
1041
+ initCharLookupTable();
1042
+ initHuffmanTbl();
1043
+ initCategoryNumber();
1044
+ initRGBYUVTable();
1045
+ setQuality(quality);
1046
+ (/* @__PURE__ */ new Date()).getTime() - time_start;
1047
+ }
1048
+ init();
1049
+ }
1050
+ if (typeof module !== "undefined") {
1051
+ module.exports = encode;
1052
+ } else if (typeof window !== "undefined") {
1053
+ window["jpeg-js"] = window["jpeg-js"] || {};
1054
+ window["jpeg-js"].encode = encode;
1055
+ }
1056
+ function encode(imgData, qu) {
1057
+ if (typeof qu === "undefined") qu = 50;
1058
+ var encoder = new JPEGEncoder(qu);
1059
+ var data = encoder.encode(imgData, qu);
1060
+ return {
1061
+ data,
1062
+ width: imgData.width,
1063
+ height: imgData.height
1064
+ };
1065
+ }
1066
+ }
1067
+ });
1068
+
1069
+ // ../node_modules/.pnpm/jpeg-js@0.4.4/node_modules/jpeg-js/lib/decoder.js
1070
+ var require_decoder = __commonJS({
1071
+ "../node_modules/.pnpm/jpeg-js@0.4.4/node_modules/jpeg-js/lib/decoder.js"(exports, module) {
1072
+ var JpegImage = (function jpegImage() {
1073
+ var dctZigZag = new Int32Array([
1074
+ 0,
1075
+ 1,
1076
+ 8,
1077
+ 16,
1078
+ 9,
1079
+ 2,
1080
+ 3,
1081
+ 10,
1082
+ 17,
1083
+ 24,
1084
+ 32,
1085
+ 25,
1086
+ 18,
1087
+ 11,
1088
+ 4,
1089
+ 5,
1090
+ 12,
1091
+ 19,
1092
+ 26,
1093
+ 33,
1094
+ 40,
1095
+ 48,
1096
+ 41,
1097
+ 34,
1098
+ 27,
1099
+ 20,
1100
+ 13,
1101
+ 6,
1102
+ 7,
1103
+ 14,
1104
+ 21,
1105
+ 28,
1106
+ 35,
1107
+ 42,
1108
+ 49,
1109
+ 56,
1110
+ 57,
1111
+ 50,
1112
+ 43,
1113
+ 36,
1114
+ 29,
1115
+ 22,
1116
+ 15,
1117
+ 23,
1118
+ 30,
1119
+ 37,
1120
+ 44,
1121
+ 51,
1122
+ 58,
1123
+ 59,
1124
+ 52,
1125
+ 45,
1126
+ 38,
1127
+ 31,
1128
+ 39,
1129
+ 46,
1130
+ 53,
1131
+ 60,
1132
+ 61,
1133
+ 54,
1134
+ 47,
1135
+ 55,
1136
+ 62,
1137
+ 63
1138
+ ]);
1139
+ var dctCos1 = 4017;
1140
+ var dctSin1 = 799;
1141
+ var dctCos3 = 3406;
1142
+ var dctSin3 = 2276;
1143
+ var dctCos6 = 1567;
1144
+ var dctSin6 = 3784;
1145
+ var dctSqrt2 = 5793;
1146
+ var dctSqrt1d2 = 2896;
1147
+ function constructor() {
1148
+ }
1149
+ function buildHuffmanTable(codeLengths, values) {
1150
+ var k = 0, code = [], i, j, length = 16;
1151
+ while (length > 0 && !codeLengths[length - 1])
1152
+ length--;
1153
+ code.push({ children: [], index: 0 });
1154
+ var p = code[0], q;
1155
+ for (i = 0; i < length; i++) {
1156
+ for (j = 0; j < codeLengths[i]; j++) {
1157
+ p = code.pop();
1158
+ p.children[p.index] = values[k];
1159
+ while (p.index > 0) {
1160
+ if (code.length === 0)
1161
+ throw new Error("Could not recreate Huffman Table");
1162
+ p = code.pop();
1163
+ }
1164
+ p.index++;
1165
+ code.push(p);
1166
+ while (code.length <= i) {
1167
+ code.push(q = { children: [], index: 0 });
1168
+ p.children[p.index] = q.children;
1169
+ p = q;
1170
+ }
1171
+ k++;
1172
+ }
1173
+ if (i + 1 < length) {
1174
+ code.push(q = { children: [], index: 0 });
1175
+ p.children[p.index] = q.children;
1176
+ p = q;
1177
+ }
1178
+ }
1179
+ return code[0].children;
1180
+ }
1181
+ function decodeScan(data, offset, frame, components, resetInterval, spectralStart, spectralEnd, successivePrev, successive, opts) {
1182
+ frame.precision;
1183
+ frame.samplesPerLine;
1184
+ frame.scanLines;
1185
+ var mcusPerLine = frame.mcusPerLine;
1186
+ var progressive = frame.progressive;
1187
+ frame.maxH; frame.maxV;
1188
+ var startOffset = offset, bitsData = 0, bitsCount = 0;
1189
+ function readBit() {
1190
+ if (bitsCount > 0) {
1191
+ bitsCount--;
1192
+ return bitsData >> bitsCount & 1;
1193
+ }
1194
+ bitsData = data[offset++];
1195
+ if (bitsData == 255) {
1196
+ var nextByte = data[offset++];
1197
+ if (nextByte) {
1198
+ throw new Error("unexpected marker: " + (bitsData << 8 | nextByte).toString(16));
1199
+ }
1200
+ }
1201
+ bitsCount = 7;
1202
+ return bitsData >>> 7;
1203
+ }
1204
+ function decodeHuffman(tree) {
1205
+ var node = tree, bit;
1206
+ while ((bit = readBit()) !== null) {
1207
+ node = node[bit];
1208
+ if (typeof node === "number")
1209
+ return node;
1210
+ if (typeof node !== "object")
1211
+ throw new Error("invalid huffman sequence");
1212
+ }
1213
+ return null;
1214
+ }
1215
+ function receive(length) {
1216
+ var n2 = 0;
1217
+ while (length > 0) {
1218
+ var bit = readBit();
1219
+ if (bit === null) return;
1220
+ n2 = n2 << 1 | bit;
1221
+ length--;
1222
+ }
1223
+ return n2;
1224
+ }
1225
+ function receiveAndExtend(length) {
1226
+ var n2 = receive(length);
1227
+ if (n2 >= 1 << length - 1)
1228
+ return n2;
1229
+ return n2 + (-1 << length) + 1;
1230
+ }
1231
+ function decodeBaseline(component2, zz) {
1232
+ var t = decodeHuffman(component2.huffmanTableDC);
1233
+ var diff = t === 0 ? 0 : receiveAndExtend(t);
1234
+ zz[0] = component2.pred += diff;
1235
+ var k2 = 1;
1236
+ while (k2 < 64) {
1237
+ var rs = decodeHuffman(component2.huffmanTableAC);
1238
+ var s = rs & 15, r = rs >> 4;
1239
+ if (s === 0) {
1240
+ if (r < 15)
1241
+ break;
1242
+ k2 += 16;
1243
+ continue;
1244
+ }
1245
+ k2 += r;
1246
+ var z = dctZigZag[k2];
1247
+ zz[z] = receiveAndExtend(s);
1248
+ k2++;
1249
+ }
1250
+ }
1251
+ function decodeDCFirst(component2, zz) {
1252
+ var t = decodeHuffman(component2.huffmanTableDC);
1253
+ var diff = t === 0 ? 0 : receiveAndExtend(t) << successive;
1254
+ zz[0] = component2.pred += diff;
1255
+ }
1256
+ function decodeDCSuccessive(component2, zz) {
1257
+ zz[0] |= readBit() << successive;
1258
+ }
1259
+ var eobrun = 0;
1260
+ function decodeACFirst(component2, zz) {
1261
+ if (eobrun > 0) {
1262
+ eobrun--;
1263
+ return;
1264
+ }
1265
+ var k2 = spectralStart, e = spectralEnd;
1266
+ while (k2 <= e) {
1267
+ var rs = decodeHuffman(component2.huffmanTableAC);
1268
+ var s = rs & 15, r = rs >> 4;
1269
+ if (s === 0) {
1270
+ if (r < 15) {
1271
+ eobrun = receive(r) + (1 << r) - 1;
1272
+ break;
1273
+ }
1274
+ k2 += 16;
1275
+ continue;
1276
+ }
1277
+ k2 += r;
1278
+ var z = dctZigZag[k2];
1279
+ zz[z] = receiveAndExtend(s) * (1 << successive);
1280
+ k2++;
1281
+ }
1282
+ }
1283
+ var successiveACState = 0, successiveACNextValue;
1284
+ function decodeACSuccessive(component2, zz) {
1285
+ var k2 = spectralStart, e = spectralEnd, r = 0;
1286
+ while (k2 <= e) {
1287
+ var z = dctZigZag[k2];
1288
+ var direction = zz[z] < 0 ? -1 : 1;
1289
+ switch (successiveACState) {
1290
+ case 0:
1291
+ var rs = decodeHuffman(component2.huffmanTableAC);
1292
+ var s = rs & 15, r = rs >> 4;
1293
+ if (s === 0) {
1294
+ if (r < 15) {
1295
+ eobrun = receive(r) + (1 << r);
1296
+ successiveACState = 4;
1297
+ } else {
1298
+ r = 16;
1299
+ successiveACState = 1;
1300
+ }
1301
+ } else {
1302
+ if (s !== 1)
1303
+ throw new Error("invalid ACn encoding");
1304
+ successiveACNextValue = receiveAndExtend(s);
1305
+ successiveACState = r ? 2 : 3;
1306
+ }
1307
+ continue;
1308
+ case 1:
1309
+ // skipping r zero items
1310
+ case 2:
1311
+ if (zz[z])
1312
+ zz[z] += (readBit() << successive) * direction;
1313
+ else {
1314
+ r--;
1315
+ if (r === 0)
1316
+ successiveACState = successiveACState == 2 ? 3 : 0;
1317
+ }
1318
+ break;
1319
+ case 3:
1320
+ if (zz[z])
1321
+ zz[z] += (readBit() << successive) * direction;
1322
+ else {
1323
+ zz[z] = successiveACNextValue << successive;
1324
+ successiveACState = 0;
1325
+ }
1326
+ break;
1327
+ case 4:
1328
+ if (zz[z])
1329
+ zz[z] += (readBit() << successive) * direction;
1330
+ break;
1331
+ }
1332
+ k2++;
1333
+ }
1334
+ if (successiveACState === 4) {
1335
+ eobrun--;
1336
+ if (eobrun === 0)
1337
+ successiveACState = 0;
1338
+ }
1339
+ }
1340
+ function decodeMcu(component2, decode2, mcu2, row, col) {
1341
+ var mcuRow = mcu2 / mcusPerLine | 0;
1342
+ var mcuCol = mcu2 % mcusPerLine;
1343
+ var blockRow = mcuRow * component2.v + row;
1344
+ var blockCol = mcuCol * component2.h + col;
1345
+ if (component2.blocks[blockRow] === void 0 && opts.tolerantDecoding)
1346
+ return;
1347
+ decode2(component2, component2.blocks[blockRow][blockCol]);
1348
+ }
1349
+ function decodeBlock(component2, decode2, mcu2) {
1350
+ var blockRow = mcu2 / component2.blocksPerLine | 0;
1351
+ var blockCol = mcu2 % component2.blocksPerLine;
1352
+ if (component2.blocks[blockRow] === void 0 && opts.tolerantDecoding)
1353
+ return;
1354
+ decode2(component2, component2.blocks[blockRow][blockCol]);
1355
+ }
1356
+ var componentsLength = components.length;
1357
+ var component, i, j, k, n;
1358
+ var decodeFn;
1359
+ if (progressive) {
1360
+ if (spectralStart === 0)
1361
+ decodeFn = successivePrev === 0 ? decodeDCFirst : decodeDCSuccessive;
1362
+ else
1363
+ decodeFn = successivePrev === 0 ? decodeACFirst : decodeACSuccessive;
1364
+ } else {
1365
+ decodeFn = decodeBaseline;
1366
+ }
1367
+ var mcu = 0, marker;
1368
+ var mcuExpected;
1369
+ if (componentsLength == 1) {
1370
+ mcuExpected = components[0].blocksPerLine * components[0].blocksPerColumn;
1371
+ } else {
1372
+ mcuExpected = mcusPerLine * frame.mcusPerColumn;
1373
+ }
1374
+ if (!resetInterval) resetInterval = mcuExpected;
1375
+ var h, v;
1376
+ while (mcu < mcuExpected) {
1377
+ for (i = 0; i < componentsLength; i++)
1378
+ components[i].pred = 0;
1379
+ eobrun = 0;
1380
+ if (componentsLength == 1) {
1381
+ component = components[0];
1382
+ for (n = 0; n < resetInterval; n++) {
1383
+ decodeBlock(component, decodeFn, mcu);
1384
+ mcu++;
1385
+ }
1386
+ } else {
1387
+ for (n = 0; n < resetInterval; n++) {
1388
+ for (i = 0; i < componentsLength; i++) {
1389
+ component = components[i];
1390
+ h = component.h;
1391
+ v = component.v;
1392
+ for (j = 0; j < v; j++) {
1393
+ for (k = 0; k < h; k++) {
1394
+ decodeMcu(component, decodeFn, mcu, j, k);
1395
+ }
1396
+ }
1397
+ }
1398
+ mcu++;
1399
+ if (mcu === mcuExpected) break;
1400
+ }
1401
+ }
1402
+ if (mcu === mcuExpected) {
1403
+ do {
1404
+ if (data[offset] === 255) {
1405
+ if (data[offset + 1] !== 0) {
1406
+ break;
1407
+ }
1408
+ }
1409
+ offset += 1;
1410
+ } while (offset < data.length - 2);
1411
+ }
1412
+ bitsCount = 0;
1413
+ marker = data[offset] << 8 | data[offset + 1];
1414
+ if (marker < 65280) {
1415
+ throw new Error("marker was not found");
1416
+ }
1417
+ if (marker >= 65488 && marker <= 65495) {
1418
+ offset += 2;
1419
+ } else
1420
+ break;
1421
+ }
1422
+ return offset - startOffset;
1423
+ }
1424
+ function buildComponentData(frame, component) {
1425
+ var lines = [];
1426
+ var blocksPerLine = component.blocksPerLine;
1427
+ var blocksPerColumn = component.blocksPerColumn;
1428
+ var samplesPerLine = blocksPerLine << 3;
1429
+ var R = new Int32Array(64), r = new Uint8Array(64);
1430
+ function quantizeAndInverse(zz, dataOut, dataIn) {
1431
+ var qt = component.quantizationTable;
1432
+ var v0, v1, v2, v3, v4, v5, v6, v7, t;
1433
+ var p = dataIn;
1434
+ var i2;
1435
+ for (i2 = 0; i2 < 64; i2++)
1436
+ p[i2] = zz[i2] * qt[i2];
1437
+ for (i2 = 0; i2 < 8; ++i2) {
1438
+ var row = 8 * i2;
1439
+ if (p[1 + row] == 0 && p[2 + row] == 0 && p[3 + row] == 0 && p[4 + row] == 0 && p[5 + row] == 0 && p[6 + row] == 0 && p[7 + row] == 0) {
1440
+ t = dctSqrt2 * p[0 + row] + 512 >> 10;
1441
+ p[0 + row] = t;
1442
+ p[1 + row] = t;
1443
+ p[2 + row] = t;
1444
+ p[3 + row] = t;
1445
+ p[4 + row] = t;
1446
+ p[5 + row] = t;
1447
+ p[6 + row] = t;
1448
+ p[7 + row] = t;
1449
+ continue;
1450
+ }
1451
+ v0 = dctSqrt2 * p[0 + row] + 128 >> 8;
1452
+ v1 = dctSqrt2 * p[4 + row] + 128 >> 8;
1453
+ v2 = p[2 + row];
1454
+ v3 = p[6 + row];
1455
+ v4 = dctSqrt1d2 * (p[1 + row] - p[7 + row]) + 128 >> 8;
1456
+ v7 = dctSqrt1d2 * (p[1 + row] + p[7 + row]) + 128 >> 8;
1457
+ v5 = p[3 + row] << 4;
1458
+ v6 = p[5 + row] << 4;
1459
+ t = v0 - v1 + 1 >> 1;
1460
+ v0 = v0 + v1 + 1 >> 1;
1461
+ v1 = t;
1462
+ t = v2 * dctSin6 + v3 * dctCos6 + 128 >> 8;
1463
+ v2 = v2 * dctCos6 - v3 * dctSin6 + 128 >> 8;
1464
+ v3 = t;
1465
+ t = v4 - v6 + 1 >> 1;
1466
+ v4 = v4 + v6 + 1 >> 1;
1467
+ v6 = t;
1468
+ t = v7 + v5 + 1 >> 1;
1469
+ v5 = v7 - v5 + 1 >> 1;
1470
+ v7 = t;
1471
+ t = v0 - v3 + 1 >> 1;
1472
+ v0 = v0 + v3 + 1 >> 1;
1473
+ v3 = t;
1474
+ t = v1 - v2 + 1 >> 1;
1475
+ v1 = v1 + v2 + 1 >> 1;
1476
+ v2 = t;
1477
+ t = v4 * dctSin3 + v7 * dctCos3 + 2048 >> 12;
1478
+ v4 = v4 * dctCos3 - v7 * dctSin3 + 2048 >> 12;
1479
+ v7 = t;
1480
+ t = v5 * dctSin1 + v6 * dctCos1 + 2048 >> 12;
1481
+ v5 = v5 * dctCos1 - v6 * dctSin1 + 2048 >> 12;
1482
+ v6 = t;
1483
+ p[0 + row] = v0 + v7;
1484
+ p[7 + row] = v0 - v7;
1485
+ p[1 + row] = v1 + v6;
1486
+ p[6 + row] = v1 - v6;
1487
+ p[2 + row] = v2 + v5;
1488
+ p[5 + row] = v2 - v5;
1489
+ p[3 + row] = v3 + v4;
1490
+ p[4 + row] = v3 - v4;
1491
+ }
1492
+ for (i2 = 0; i2 < 8; ++i2) {
1493
+ var col = i2;
1494
+ if (p[1 * 8 + col] == 0 && p[2 * 8 + col] == 0 && p[3 * 8 + col] == 0 && p[4 * 8 + col] == 0 && p[5 * 8 + col] == 0 && p[6 * 8 + col] == 0 && p[7 * 8 + col] == 0) {
1495
+ t = dctSqrt2 * dataIn[i2 + 0] + 8192 >> 14;
1496
+ p[0 * 8 + col] = t;
1497
+ p[1 * 8 + col] = t;
1498
+ p[2 * 8 + col] = t;
1499
+ p[3 * 8 + col] = t;
1500
+ p[4 * 8 + col] = t;
1501
+ p[5 * 8 + col] = t;
1502
+ p[6 * 8 + col] = t;
1503
+ p[7 * 8 + col] = t;
1504
+ continue;
1505
+ }
1506
+ v0 = dctSqrt2 * p[0 * 8 + col] + 2048 >> 12;
1507
+ v1 = dctSqrt2 * p[4 * 8 + col] + 2048 >> 12;
1508
+ v2 = p[2 * 8 + col];
1509
+ v3 = p[6 * 8 + col];
1510
+ v4 = dctSqrt1d2 * (p[1 * 8 + col] - p[7 * 8 + col]) + 2048 >> 12;
1511
+ v7 = dctSqrt1d2 * (p[1 * 8 + col] + p[7 * 8 + col]) + 2048 >> 12;
1512
+ v5 = p[3 * 8 + col];
1513
+ v6 = p[5 * 8 + col];
1514
+ t = v0 - v1 + 1 >> 1;
1515
+ v0 = v0 + v1 + 1 >> 1;
1516
+ v1 = t;
1517
+ t = v2 * dctSin6 + v3 * dctCos6 + 2048 >> 12;
1518
+ v2 = v2 * dctCos6 - v3 * dctSin6 + 2048 >> 12;
1519
+ v3 = t;
1520
+ t = v4 - v6 + 1 >> 1;
1521
+ v4 = v4 + v6 + 1 >> 1;
1522
+ v6 = t;
1523
+ t = v7 + v5 + 1 >> 1;
1524
+ v5 = v7 - v5 + 1 >> 1;
1525
+ v7 = t;
1526
+ t = v0 - v3 + 1 >> 1;
1527
+ v0 = v0 + v3 + 1 >> 1;
1528
+ v3 = t;
1529
+ t = v1 - v2 + 1 >> 1;
1530
+ v1 = v1 + v2 + 1 >> 1;
1531
+ v2 = t;
1532
+ t = v4 * dctSin3 + v7 * dctCos3 + 2048 >> 12;
1533
+ v4 = v4 * dctCos3 - v7 * dctSin3 + 2048 >> 12;
1534
+ v7 = t;
1535
+ t = v5 * dctSin1 + v6 * dctCos1 + 2048 >> 12;
1536
+ v5 = v5 * dctCos1 - v6 * dctSin1 + 2048 >> 12;
1537
+ v6 = t;
1538
+ p[0 * 8 + col] = v0 + v7;
1539
+ p[7 * 8 + col] = v0 - v7;
1540
+ p[1 * 8 + col] = v1 + v6;
1541
+ p[6 * 8 + col] = v1 - v6;
1542
+ p[2 * 8 + col] = v2 + v5;
1543
+ p[5 * 8 + col] = v2 - v5;
1544
+ p[3 * 8 + col] = v3 + v4;
1545
+ p[4 * 8 + col] = v3 - v4;
1546
+ }
1547
+ for (i2 = 0; i2 < 64; ++i2) {
1548
+ var sample2 = 128 + (p[i2] + 8 >> 4);
1549
+ dataOut[i2] = sample2 < 0 ? 0 : sample2 > 255 ? 255 : sample2;
1550
+ }
1551
+ }
1552
+ requestMemoryAllocation(samplesPerLine * blocksPerColumn * 8);
1553
+ var i, j;
1554
+ for (var blockRow = 0; blockRow < blocksPerColumn; blockRow++) {
1555
+ var scanLine = blockRow << 3;
1556
+ for (i = 0; i < 8; i++)
1557
+ lines.push(new Uint8Array(samplesPerLine));
1558
+ for (var blockCol = 0; blockCol < blocksPerLine; blockCol++) {
1559
+ quantizeAndInverse(component.blocks[blockRow][blockCol], r, R);
1560
+ var offset = 0, sample = blockCol << 3;
1561
+ for (j = 0; j < 8; j++) {
1562
+ var line = lines[scanLine + j];
1563
+ for (i = 0; i < 8; i++)
1564
+ line[sample + i] = r[offset++];
1565
+ }
1566
+ }
1567
+ }
1568
+ return lines;
1569
+ }
1570
+ function clampTo8bit(a) {
1571
+ return a < 0 ? 0 : a > 255 ? 255 : a;
1572
+ }
1573
+ constructor.prototype = {
1574
+ load: function load(path) {
1575
+ var xhr = new XMLHttpRequest();
1576
+ xhr.open("GET", path, true);
1577
+ xhr.responseType = "arraybuffer";
1578
+ xhr.onload = (function() {
1579
+ var data = new Uint8Array(xhr.response || xhr.mozResponseArrayBuffer);
1580
+ this.parse(data);
1581
+ if (this.onload)
1582
+ this.onload();
1583
+ }).bind(this);
1584
+ xhr.send(null);
1585
+ },
1586
+ parse: function parse(data) {
1587
+ var maxResolutionInPixels = this.opts.maxResolutionInMP * 1e3 * 1e3;
1588
+ var offset = 0; data.length;
1589
+ function readUint16() {
1590
+ var value = data[offset] << 8 | data[offset + 1];
1591
+ offset += 2;
1592
+ return value;
1593
+ }
1594
+ function readDataBlock() {
1595
+ var length2 = readUint16();
1596
+ var array = data.subarray(offset, offset + length2 - 2);
1597
+ offset += array.length;
1598
+ return array;
1599
+ }
1600
+ function prepareComponents(frame2) {
1601
+ var maxH2 = 1, maxV2 = 1;
1602
+ var component2, componentId2;
1603
+ for (componentId2 in frame2.components) {
1604
+ if (frame2.components.hasOwnProperty(componentId2)) {
1605
+ component2 = frame2.components[componentId2];
1606
+ if (maxH2 < component2.h) maxH2 = component2.h;
1607
+ if (maxV2 < component2.v) maxV2 = component2.v;
1608
+ }
1609
+ }
1610
+ var mcusPerLine = Math.ceil(frame2.samplesPerLine / 8 / maxH2);
1611
+ var mcusPerColumn = Math.ceil(frame2.scanLines / 8 / maxV2);
1612
+ for (componentId2 in frame2.components) {
1613
+ if (frame2.components.hasOwnProperty(componentId2)) {
1614
+ component2 = frame2.components[componentId2];
1615
+ var blocksPerLine = Math.ceil(Math.ceil(frame2.samplesPerLine / 8) * component2.h / maxH2);
1616
+ var blocksPerColumn = Math.ceil(Math.ceil(frame2.scanLines / 8) * component2.v / maxV2);
1617
+ var blocksPerLineForMcu = mcusPerLine * component2.h;
1618
+ var blocksPerColumnForMcu = mcusPerColumn * component2.v;
1619
+ var blocksToAllocate = blocksPerColumnForMcu * blocksPerLineForMcu;
1620
+ var blocks = [];
1621
+ requestMemoryAllocation(blocksToAllocate * 256);
1622
+ for (var i2 = 0; i2 < blocksPerColumnForMcu; i2++) {
1623
+ var row = [];
1624
+ for (var j2 = 0; j2 < blocksPerLineForMcu; j2++)
1625
+ row.push(new Int32Array(64));
1626
+ blocks.push(row);
1627
+ }
1628
+ component2.blocksPerLine = blocksPerLine;
1629
+ component2.blocksPerColumn = blocksPerColumn;
1630
+ component2.blocks = blocks;
1631
+ }
1632
+ }
1633
+ frame2.maxH = maxH2;
1634
+ frame2.maxV = maxV2;
1635
+ frame2.mcusPerLine = mcusPerLine;
1636
+ frame2.mcusPerColumn = mcusPerColumn;
1637
+ }
1638
+ var jfif = null;
1639
+ var adobe = null;
1640
+ var frame, resetInterval;
1641
+ var quantizationTables = [], frames = [];
1642
+ var huffmanTablesAC = [], huffmanTablesDC = [];
1643
+ var fileMarker = readUint16();
1644
+ var malformedDataOffset = -1;
1645
+ this.comments = [];
1646
+ if (fileMarker != 65496) {
1647
+ throw new Error("SOI not found");
1648
+ }
1649
+ fileMarker = readUint16();
1650
+ while (fileMarker != 65497) {
1651
+ var i, j;
1652
+ switch (fileMarker) {
1653
+ case 65280:
1654
+ break;
1655
+ case 65504:
1656
+ // APP0 (Application Specific)
1657
+ case 65505:
1658
+ // APP1
1659
+ case 65506:
1660
+ // APP2
1661
+ case 65507:
1662
+ // APP3
1663
+ case 65508:
1664
+ // APP4
1665
+ case 65509:
1666
+ // APP5
1667
+ case 65510:
1668
+ // APP6
1669
+ case 65511:
1670
+ // APP7
1671
+ case 65512:
1672
+ // APP8
1673
+ case 65513:
1674
+ // APP9
1675
+ case 65514:
1676
+ // APP10
1677
+ case 65515:
1678
+ // APP11
1679
+ case 65516:
1680
+ // APP12
1681
+ case 65517:
1682
+ // APP13
1683
+ case 65518:
1684
+ // APP14
1685
+ case 65519:
1686
+ // APP15
1687
+ case 65534:
1688
+ var appData = readDataBlock();
1689
+ if (fileMarker === 65534) {
1690
+ var comment = String.fromCharCode.apply(null, appData);
1691
+ this.comments.push(comment);
1692
+ }
1693
+ if (fileMarker === 65504) {
1694
+ if (appData[0] === 74 && appData[1] === 70 && appData[2] === 73 && appData[3] === 70 && appData[4] === 0) {
1695
+ jfif = {
1696
+ version: { major: appData[5], minor: appData[6] },
1697
+ densityUnits: appData[7],
1698
+ xDensity: appData[8] << 8 | appData[9],
1699
+ yDensity: appData[10] << 8 | appData[11],
1700
+ thumbWidth: appData[12],
1701
+ thumbHeight: appData[13],
1702
+ thumbData: appData.subarray(14, 14 + 3 * appData[12] * appData[13])
1703
+ };
1704
+ }
1705
+ }
1706
+ if (fileMarker === 65505) {
1707
+ if (appData[0] === 69 && appData[1] === 120 && appData[2] === 105 && appData[3] === 102 && appData[4] === 0) {
1708
+ this.exifBuffer = appData.subarray(5, appData.length);
1709
+ }
1710
+ }
1711
+ if (fileMarker === 65518) {
1712
+ if (appData[0] === 65 && appData[1] === 100 && appData[2] === 111 && appData[3] === 98 && appData[4] === 101 && appData[5] === 0) {
1713
+ adobe = {
1714
+ version: appData[6],
1715
+ flags0: appData[7] << 8 | appData[8],
1716
+ flags1: appData[9] << 8 | appData[10],
1717
+ transformCode: appData[11]
1718
+ };
1719
+ }
1720
+ }
1721
+ break;
1722
+ case 65499:
1723
+ var quantizationTablesLength = readUint16();
1724
+ var quantizationTablesEnd = quantizationTablesLength + offset - 2;
1725
+ while (offset < quantizationTablesEnd) {
1726
+ var quantizationTableSpec = data[offset++];
1727
+ requestMemoryAllocation(64 * 4);
1728
+ var tableData = new Int32Array(64);
1729
+ if (quantizationTableSpec >> 4 === 0) {
1730
+ for (j = 0; j < 64; j++) {
1731
+ var z = dctZigZag[j];
1732
+ tableData[z] = data[offset++];
1733
+ }
1734
+ } else if (quantizationTableSpec >> 4 === 1) {
1735
+ for (j = 0; j < 64; j++) {
1736
+ var z = dctZigZag[j];
1737
+ tableData[z] = readUint16();
1738
+ }
1739
+ } else
1740
+ throw new Error("DQT: invalid table spec");
1741
+ quantizationTables[quantizationTableSpec & 15] = tableData;
1742
+ }
1743
+ break;
1744
+ case 65472:
1745
+ // SOF0 (Start of Frame, Baseline DCT)
1746
+ case 65473:
1747
+ // SOF1 (Start of Frame, Extended DCT)
1748
+ case 65474:
1749
+ readUint16();
1750
+ frame = {};
1751
+ frame.extended = fileMarker === 65473;
1752
+ frame.progressive = fileMarker === 65474;
1753
+ frame.precision = data[offset++];
1754
+ frame.scanLines = readUint16();
1755
+ frame.samplesPerLine = readUint16();
1756
+ frame.components = {};
1757
+ frame.componentsOrder = [];
1758
+ var pixelsInFrame = frame.scanLines * frame.samplesPerLine;
1759
+ if (pixelsInFrame > maxResolutionInPixels) {
1760
+ var exceededAmount = Math.ceil((pixelsInFrame - maxResolutionInPixels) / 1e6);
1761
+ throw new Error(`maxResolutionInMP limit exceeded by ${exceededAmount}MP`);
1762
+ }
1763
+ var componentsCount = data[offset++], componentId;
1764
+ for (i = 0; i < componentsCount; i++) {
1765
+ componentId = data[offset];
1766
+ var h = data[offset + 1] >> 4;
1767
+ var v = data[offset + 1] & 15;
1768
+ var qId = data[offset + 2];
1769
+ if (h <= 0 || v <= 0) {
1770
+ throw new Error("Invalid sampling factor, expected values above 0");
1771
+ }
1772
+ frame.componentsOrder.push(componentId);
1773
+ frame.components[componentId] = {
1774
+ h,
1775
+ v,
1776
+ quantizationIdx: qId
1777
+ };
1778
+ offset += 3;
1779
+ }
1780
+ prepareComponents(frame);
1781
+ frames.push(frame);
1782
+ break;
1783
+ case 65476:
1784
+ var huffmanLength = readUint16();
1785
+ for (i = 2; i < huffmanLength; ) {
1786
+ var huffmanTableSpec = data[offset++];
1787
+ var codeLengths = new Uint8Array(16);
1788
+ var codeLengthSum = 0;
1789
+ for (j = 0; j < 16; j++, offset++) {
1790
+ codeLengthSum += codeLengths[j] = data[offset];
1791
+ }
1792
+ requestMemoryAllocation(16 + codeLengthSum);
1793
+ var huffmanValues = new Uint8Array(codeLengthSum);
1794
+ for (j = 0; j < codeLengthSum; j++, offset++)
1795
+ huffmanValues[j] = data[offset];
1796
+ i += 17 + codeLengthSum;
1797
+ (huffmanTableSpec >> 4 === 0 ? huffmanTablesDC : huffmanTablesAC)[huffmanTableSpec & 15] = buildHuffmanTable(codeLengths, huffmanValues);
1798
+ }
1799
+ break;
1800
+ case 65501:
1801
+ readUint16();
1802
+ resetInterval = readUint16();
1803
+ break;
1804
+ case 65500:
1805
+ readUint16();
1806
+ readUint16();
1807
+ break;
1808
+ case 65498:
1809
+ readUint16();
1810
+ var selectorsCount = data[offset++];
1811
+ var components = [], component;
1812
+ for (i = 0; i < selectorsCount; i++) {
1813
+ component = frame.components[data[offset++]];
1814
+ var tableSpec = data[offset++];
1815
+ component.huffmanTableDC = huffmanTablesDC[tableSpec >> 4];
1816
+ component.huffmanTableAC = huffmanTablesAC[tableSpec & 15];
1817
+ components.push(component);
1818
+ }
1819
+ var spectralStart = data[offset++];
1820
+ var spectralEnd = data[offset++];
1821
+ var successiveApproximation = data[offset++];
1822
+ var processed = decodeScan(
1823
+ data,
1824
+ offset,
1825
+ frame,
1826
+ components,
1827
+ resetInterval,
1828
+ spectralStart,
1829
+ spectralEnd,
1830
+ successiveApproximation >> 4,
1831
+ successiveApproximation & 15,
1832
+ this.opts
1833
+ );
1834
+ offset += processed;
1835
+ break;
1836
+ case 65535:
1837
+ if (data[offset] !== 255) {
1838
+ offset--;
1839
+ }
1840
+ break;
1841
+ default:
1842
+ if (data[offset - 3] == 255 && data[offset - 2] >= 192 && data[offset - 2] <= 254) {
1843
+ offset -= 3;
1844
+ break;
1845
+ } else if (fileMarker === 224 || fileMarker == 225) {
1846
+ if (malformedDataOffset !== -1) {
1847
+ throw new Error(`first unknown JPEG marker at offset ${malformedDataOffset.toString(16)}, second unknown JPEG marker ${fileMarker.toString(16)} at offset ${(offset - 1).toString(16)}`);
1848
+ }
1849
+ malformedDataOffset = offset - 1;
1850
+ const nextOffset = readUint16();
1851
+ if (data[offset + nextOffset - 2] === 255) {
1852
+ offset += nextOffset - 2;
1853
+ break;
1854
+ }
1855
+ }
1856
+ throw new Error("unknown JPEG marker " + fileMarker.toString(16));
1857
+ }
1858
+ fileMarker = readUint16();
1859
+ }
1860
+ if (frames.length != 1)
1861
+ throw new Error("only single frame JPEGs supported");
1862
+ for (var i = 0; i < frames.length; i++) {
1863
+ var cp = frames[i].components;
1864
+ for (var j in cp) {
1865
+ cp[j].quantizationTable = quantizationTables[cp[j].quantizationIdx];
1866
+ delete cp[j].quantizationIdx;
1867
+ }
1868
+ }
1869
+ this.width = frame.samplesPerLine;
1870
+ this.height = frame.scanLines;
1871
+ this.jfif = jfif;
1872
+ this.adobe = adobe;
1873
+ this.components = [];
1874
+ for (var i = 0; i < frame.componentsOrder.length; i++) {
1875
+ var component = frame.components[frame.componentsOrder[i]];
1876
+ this.components.push({
1877
+ lines: buildComponentData(frame, component),
1878
+ scaleX: component.h / frame.maxH,
1879
+ scaleY: component.v / frame.maxV
1880
+ });
1881
+ }
1882
+ },
1883
+ getData: function getData(width, height) {
1884
+ var scaleX = this.width / width, scaleY = this.height / height;
1885
+ var component1, component2, component3, component4;
1886
+ var component1Line, component2Line, component3Line, component4Line;
1887
+ var x, y;
1888
+ var offset = 0;
1889
+ var Y, Cb, Cr, K, C, M, Ye, R, G, B;
1890
+ var colorTransform;
1891
+ var dataLength = width * height * this.components.length;
1892
+ requestMemoryAllocation(dataLength);
1893
+ var data = new Uint8Array(dataLength);
1894
+ switch (this.components.length) {
1895
+ case 1:
1896
+ component1 = this.components[0];
1897
+ for (y = 0; y < height; y++) {
1898
+ component1Line = component1.lines[0 | y * component1.scaleY * scaleY];
1899
+ for (x = 0; x < width; x++) {
1900
+ Y = component1Line[0 | x * component1.scaleX * scaleX];
1901
+ data[offset++] = Y;
1902
+ }
1903
+ }
1904
+ break;
1905
+ case 2:
1906
+ component1 = this.components[0];
1907
+ component2 = this.components[1];
1908
+ for (y = 0; y < height; y++) {
1909
+ component1Line = component1.lines[0 | y * component1.scaleY * scaleY];
1910
+ component2Line = component2.lines[0 | y * component2.scaleY * scaleY];
1911
+ for (x = 0; x < width; x++) {
1912
+ Y = component1Line[0 | x * component1.scaleX * scaleX];
1913
+ data[offset++] = Y;
1914
+ Y = component2Line[0 | x * component2.scaleX * scaleX];
1915
+ data[offset++] = Y;
1916
+ }
1917
+ }
1918
+ break;
1919
+ case 3:
1920
+ colorTransform = true;
1921
+ if (this.adobe && this.adobe.transformCode)
1922
+ colorTransform = true;
1923
+ else if (typeof this.opts.colorTransform !== "undefined")
1924
+ colorTransform = !!this.opts.colorTransform;
1925
+ component1 = this.components[0];
1926
+ component2 = this.components[1];
1927
+ component3 = this.components[2];
1928
+ for (y = 0; y < height; y++) {
1929
+ component1Line = component1.lines[0 | y * component1.scaleY * scaleY];
1930
+ component2Line = component2.lines[0 | y * component2.scaleY * scaleY];
1931
+ component3Line = component3.lines[0 | y * component3.scaleY * scaleY];
1932
+ for (x = 0; x < width; x++) {
1933
+ if (!colorTransform) {
1934
+ R = component1Line[0 | x * component1.scaleX * scaleX];
1935
+ G = component2Line[0 | x * component2.scaleX * scaleX];
1936
+ B = component3Line[0 | x * component3.scaleX * scaleX];
1937
+ } else {
1938
+ Y = component1Line[0 | x * component1.scaleX * scaleX];
1939
+ Cb = component2Line[0 | x * component2.scaleX * scaleX];
1940
+ Cr = component3Line[0 | x * component3.scaleX * scaleX];
1941
+ R = clampTo8bit(Y + 1.402 * (Cr - 128));
1942
+ G = clampTo8bit(Y - 0.3441363 * (Cb - 128) - 0.71413636 * (Cr - 128));
1943
+ B = clampTo8bit(Y + 1.772 * (Cb - 128));
1944
+ }
1945
+ data[offset++] = R;
1946
+ data[offset++] = G;
1947
+ data[offset++] = B;
1948
+ }
1949
+ }
1950
+ break;
1951
+ case 4:
1952
+ if (!this.adobe)
1953
+ throw new Error("Unsupported color mode (4 components)");
1954
+ colorTransform = false;
1955
+ if (this.adobe && this.adobe.transformCode)
1956
+ colorTransform = true;
1957
+ else if (typeof this.opts.colorTransform !== "undefined")
1958
+ colorTransform = !!this.opts.colorTransform;
1959
+ component1 = this.components[0];
1960
+ component2 = this.components[1];
1961
+ component3 = this.components[2];
1962
+ component4 = this.components[3];
1963
+ for (y = 0; y < height; y++) {
1964
+ component1Line = component1.lines[0 | y * component1.scaleY * scaleY];
1965
+ component2Line = component2.lines[0 | y * component2.scaleY * scaleY];
1966
+ component3Line = component3.lines[0 | y * component3.scaleY * scaleY];
1967
+ component4Line = component4.lines[0 | y * component4.scaleY * scaleY];
1968
+ for (x = 0; x < width; x++) {
1969
+ if (!colorTransform) {
1970
+ C = component1Line[0 | x * component1.scaleX * scaleX];
1971
+ M = component2Line[0 | x * component2.scaleX * scaleX];
1972
+ Ye = component3Line[0 | x * component3.scaleX * scaleX];
1973
+ K = component4Line[0 | x * component4.scaleX * scaleX];
1974
+ } else {
1975
+ Y = component1Line[0 | x * component1.scaleX * scaleX];
1976
+ Cb = component2Line[0 | x * component2.scaleX * scaleX];
1977
+ Cr = component3Line[0 | x * component3.scaleX * scaleX];
1978
+ K = component4Line[0 | x * component4.scaleX * scaleX];
1979
+ C = 255 - clampTo8bit(Y + 1.402 * (Cr - 128));
1980
+ M = 255 - clampTo8bit(Y - 0.3441363 * (Cb - 128) - 0.71413636 * (Cr - 128));
1981
+ Ye = 255 - clampTo8bit(Y + 1.772 * (Cb - 128));
1982
+ }
1983
+ data[offset++] = 255 - C;
1984
+ data[offset++] = 255 - M;
1985
+ data[offset++] = 255 - Ye;
1986
+ data[offset++] = 255 - K;
1987
+ }
1988
+ }
1989
+ break;
1990
+ default:
1991
+ throw new Error("Unsupported color mode");
1992
+ }
1993
+ return data;
1994
+ },
1995
+ copyToImageData: function copyToImageData(imageData, formatAsRGBA) {
1996
+ var width = imageData.width, height = imageData.height;
1997
+ var imageDataArray = imageData.data;
1998
+ var data = this.getData(width, height);
1999
+ var i = 0, j = 0, x, y;
2000
+ var Y, K, C, M, R, G, B;
2001
+ switch (this.components.length) {
2002
+ case 1:
2003
+ for (y = 0; y < height; y++) {
2004
+ for (x = 0; x < width; x++) {
2005
+ Y = data[i++];
2006
+ imageDataArray[j++] = Y;
2007
+ imageDataArray[j++] = Y;
2008
+ imageDataArray[j++] = Y;
2009
+ if (formatAsRGBA) {
2010
+ imageDataArray[j++] = 255;
2011
+ }
2012
+ }
2013
+ }
2014
+ break;
2015
+ case 3:
2016
+ for (y = 0; y < height; y++) {
2017
+ for (x = 0; x < width; x++) {
2018
+ R = data[i++];
2019
+ G = data[i++];
2020
+ B = data[i++];
2021
+ imageDataArray[j++] = R;
2022
+ imageDataArray[j++] = G;
2023
+ imageDataArray[j++] = B;
2024
+ if (formatAsRGBA) {
2025
+ imageDataArray[j++] = 255;
2026
+ }
2027
+ }
2028
+ }
2029
+ break;
2030
+ case 4:
2031
+ for (y = 0; y < height; y++) {
2032
+ for (x = 0; x < width; x++) {
2033
+ C = data[i++];
2034
+ M = data[i++];
2035
+ Y = data[i++];
2036
+ K = data[i++];
2037
+ R = 255 - clampTo8bit(C * (1 - K / 255) + K);
2038
+ G = 255 - clampTo8bit(M * (1 - K / 255) + K);
2039
+ B = 255 - clampTo8bit(Y * (1 - K / 255) + K);
2040
+ imageDataArray[j++] = R;
2041
+ imageDataArray[j++] = G;
2042
+ imageDataArray[j++] = B;
2043
+ if (formatAsRGBA) {
2044
+ imageDataArray[j++] = 255;
2045
+ }
2046
+ }
2047
+ }
2048
+ break;
2049
+ default:
2050
+ throw new Error("Unsupported color mode");
2051
+ }
2052
+ }
2053
+ };
2054
+ var totalBytesAllocated = 0;
2055
+ var maxMemoryUsageBytes = 0;
2056
+ function requestMemoryAllocation(increaseAmount = 0) {
2057
+ var totalMemoryImpactBytes = totalBytesAllocated + increaseAmount;
2058
+ if (totalMemoryImpactBytes > maxMemoryUsageBytes) {
2059
+ var exceededAmount = Math.ceil((totalMemoryImpactBytes - maxMemoryUsageBytes) / 1024 / 1024);
2060
+ throw new Error(`maxMemoryUsageInMB limit exceeded by at least ${exceededAmount}MB`);
2061
+ }
2062
+ totalBytesAllocated = totalMemoryImpactBytes;
2063
+ }
2064
+ constructor.resetMaxMemoryUsage = function(maxMemoryUsageBytes_) {
2065
+ totalBytesAllocated = 0;
2066
+ maxMemoryUsageBytes = maxMemoryUsageBytes_;
2067
+ };
2068
+ constructor.getBytesAllocated = function() {
2069
+ return totalBytesAllocated;
2070
+ };
2071
+ constructor.requestMemoryAllocation = requestMemoryAllocation;
2072
+ return constructor;
2073
+ })();
2074
+ if (typeof module !== "undefined") {
2075
+ module.exports = decode;
2076
+ } else if (typeof window !== "undefined") {
2077
+ window["jpeg-js"] = window["jpeg-js"] || {};
2078
+ window["jpeg-js"].decode = decode;
2079
+ }
2080
+ function decode(jpegData, userOpts = {}) {
2081
+ var defaultOpts = {
2082
+ // "undefined" means "Choose whether to transform colors based on the image’s color model."
2083
+ colorTransform: void 0,
2084
+ useTArray: false,
2085
+ formatAsRGBA: true,
2086
+ tolerantDecoding: true,
2087
+ maxResolutionInMP: 100,
2088
+ // Don't decode more than 100 megapixels
2089
+ maxMemoryUsageInMB: 512
2090
+ // Don't decode if memory footprint is more than 512MB
2091
+ };
2092
+ var opts = { ...defaultOpts, ...userOpts };
2093
+ var arr = new Uint8Array(jpegData);
2094
+ var decoder = new JpegImage();
2095
+ decoder.opts = opts;
2096
+ JpegImage.resetMaxMemoryUsage(opts.maxMemoryUsageInMB * 1024 * 1024);
2097
+ decoder.parse(arr);
2098
+ var channels = opts.formatAsRGBA ? 4 : 3;
2099
+ var bytesNeeded = decoder.width * decoder.height * channels;
2100
+ try {
2101
+ JpegImage.requestMemoryAllocation(bytesNeeded);
2102
+ var image = {
2103
+ width: decoder.width,
2104
+ height: decoder.height,
2105
+ exifBuffer: decoder.exifBuffer,
2106
+ data: opts.useTArray ? new Uint8Array(bytesNeeded) : Buffer.alloc(bytesNeeded)
2107
+ };
2108
+ if (decoder.comments.length > 0) {
2109
+ image["comments"] = decoder.comments;
2110
+ }
2111
+ } catch (err) {
2112
+ if (err instanceof RangeError) {
2113
+ throw new Error("Could not allocate enough memory for the image. Required: " + bytesNeeded);
2114
+ }
2115
+ if (err instanceof ReferenceError) {
2116
+ if (err.message === "Buffer is not defined") {
2117
+ throw new Error("Buffer is not globally defined in this environment. Consider setting useTArray to true");
2118
+ }
2119
+ }
2120
+ throw err;
2121
+ }
2122
+ decoder.copyToImageData(image, opts.formatAsRGBA);
2123
+ return image;
2124
+ }
2125
+ }
2126
+ });
2127
+
2128
+ // ../node_modules/.pnpm/jpeg-js@0.4.4/node_modules/jpeg-js/index.js
2129
+ var require_jpeg_js = __commonJS({
2130
+ "../node_modules/.pnpm/jpeg-js@0.4.4/node_modules/jpeg-js/index.js"(exports, module) {
2131
+ var encode = require_encoder();
2132
+ var decode = require_decoder();
2133
+ module.exports = {
2134
+ encode,
2135
+ decode
2136
+ };
2137
+ }
2138
+ });
2139
+ var jpegJs6X443IYI = require_jpeg_js();
2140
+
2141
+ export { jpegJs6X443IYI as default };