@twin.org/image 0.0.4-next.1 → 0.0.4-next.11
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.
|
@@ -80,7 +80,9 @@ export class JpegEncoder {
|
|
|
80
80
|
0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8,
|
|
81
81
|
0xf9, 0xfa
|
|
82
82
|
];
|
|
83
|
-
/**
|
|
83
|
+
/**
|
|
84
|
+
* @internal
|
|
85
|
+
*/
|
|
84
86
|
static _SIG_ZAG = [
|
|
85
87
|
0, 1, 5, 6, 14, 15, 27, 28, 2, 4, 7, 13, 16, 26, 29, 42, 3, 8, 12, 17, 25, 30, 41, 43, 9, 11,
|
|
86
88
|
18, 24, 31, 40, 44, 53, 10, 19, 23, 32, 39, 45, 52, 54, 20, 22, 33, 38, 46, 51, 55, 60, 21, 34,
|
|
@@ -286,6 +288,9 @@ export class JpegEncoder {
|
|
|
286
288
|
return new Uint8Array(this._byteOut);
|
|
287
289
|
}
|
|
288
290
|
/**
|
|
291
|
+
* Set the JPEG quantization quality.
|
|
292
|
+
* @param quality The quality value to apply.
|
|
293
|
+
* @throws GeneralError if the quality is outside the supported range.
|
|
289
294
|
* @internal
|
|
290
295
|
*/
|
|
291
296
|
setQuality(quality) {
|
|
@@ -302,6 +307,8 @@ export class JpegEncoder {
|
|
|
302
307
|
this.initQuantTables(sf);
|
|
303
308
|
}
|
|
304
309
|
/**
|
|
310
|
+
* Initialize the quantization tables for the supplied scale factor.
|
|
311
|
+
* @param sf The quantization scale factor.
|
|
305
312
|
* @internal
|
|
306
313
|
*/
|
|
307
314
|
initQuantTables(sf) {
|
|
@@ -346,6 +353,10 @@ export class JpegEncoder {
|
|
|
346
353
|
}
|
|
347
354
|
}
|
|
348
355
|
/**
|
|
356
|
+
* Build a Huffman lookup table from the supplied code counts and values.
|
|
357
|
+
* @param nrCodes The number of codes for each bit length.
|
|
358
|
+
* @param stdTable The symbol values to assign in code order.
|
|
359
|
+
* @returns The generated Huffman table.
|
|
349
360
|
* @internal
|
|
350
361
|
*/
|
|
351
362
|
computeHuffmanTbl(nrCodes, stdTable) {
|
|
@@ -365,6 +376,7 @@ export class JpegEncoder {
|
|
|
365
376
|
return HT;
|
|
366
377
|
}
|
|
367
378
|
/**
|
|
379
|
+
* Initialize the standard JPEG Huffman tables used during encoding.
|
|
368
380
|
* @internal
|
|
369
381
|
*/
|
|
370
382
|
initHuffmanTbl() {
|
|
@@ -374,6 +386,7 @@ export class JpegEncoder {
|
|
|
374
386
|
this._uVacHashTable = this.computeHuffmanTbl(JpegEncoder._STD_AC_CHROMINANCE_NR_CODES, JpegEncoder._STD_AC_CHROMINANCE_VALUES);
|
|
375
387
|
}
|
|
376
388
|
/**
|
|
389
|
+
* Initialize the category and bitcode lookup tables for coefficient encoding.
|
|
377
390
|
* @internal
|
|
378
391
|
*/
|
|
379
392
|
initCategoryNumber() {
|
|
@@ -399,6 +412,7 @@ export class JpegEncoder {
|
|
|
399
412
|
}
|
|
400
413
|
}
|
|
401
414
|
/**
|
|
415
|
+
* Initialize the RGB to YUV conversion lookup table.
|
|
402
416
|
* @internal
|
|
403
417
|
*/
|
|
404
418
|
initRGBYUVTable() {
|
|
@@ -414,6 +428,8 @@ export class JpegEncoder {
|
|
|
414
428
|
}
|
|
415
429
|
}
|
|
416
430
|
/**
|
|
431
|
+
* Write a variable-length bit sequence into the JPEG output buffer.
|
|
432
|
+
* @param bs The bit value and bit length pair to write.
|
|
417
433
|
* @internal
|
|
418
434
|
*/
|
|
419
435
|
writeBits(bs) {
|
|
@@ -439,12 +455,16 @@ export class JpegEncoder {
|
|
|
439
455
|
}
|
|
440
456
|
}
|
|
441
457
|
/**
|
|
458
|
+
* Write a single byte to the JPEG output buffer.
|
|
459
|
+
* @param value The byte value to write.
|
|
442
460
|
* @internal
|
|
443
461
|
*/
|
|
444
462
|
writeByte(value) {
|
|
445
463
|
this._byteOut.push(value);
|
|
446
464
|
}
|
|
447
465
|
/**
|
|
466
|
+
* Write a 16-bit word to the JPEG output buffer.
|
|
467
|
+
* @param value The word value to write.
|
|
448
468
|
* @internal
|
|
449
469
|
*/
|
|
450
470
|
writeWord(value) {
|
|
@@ -452,6 +472,10 @@ export class JpegEncoder {
|
|
|
452
472
|
this.writeByte(value & 0xff);
|
|
453
473
|
}
|
|
454
474
|
/**
|
|
475
|
+
* Apply the forward DCT and quantization table to an 8x8 block.
|
|
476
|
+
* @param data The source coefficient block.
|
|
477
|
+
* @param fdTbl The quantization scaling table.
|
|
478
|
+
* @returns The quantized coefficient block.
|
|
455
479
|
* @internal
|
|
456
480
|
*/
|
|
457
481
|
fDCTQuant(data, fdTbl) {
|
|
@@ -569,6 +593,7 @@ export class JpegEncoder {
|
|
|
569
593
|
return this._outputFDctQuant;
|
|
570
594
|
}
|
|
571
595
|
/**
|
|
596
|
+
* Write the JFIF APP0 segment.
|
|
572
597
|
* @internal
|
|
573
598
|
*/
|
|
574
599
|
writeAPP0() {
|
|
@@ -589,6 +614,9 @@ export class JpegEncoder {
|
|
|
589
614
|
this.writeByte(0); // thumb n height
|
|
590
615
|
}
|
|
591
616
|
/**
|
|
617
|
+
* Write the baseline frame header.
|
|
618
|
+
* @param width The image width.
|
|
619
|
+
* @param height The image height.
|
|
592
620
|
* @internal
|
|
593
621
|
*/
|
|
594
622
|
writeSOF0(width, height) {
|
|
@@ -609,6 +637,7 @@ export class JpegEncoder {
|
|
|
609
637
|
this.writeByte(1); // QTV
|
|
610
638
|
}
|
|
611
639
|
/**
|
|
640
|
+
* Write the quantization tables segment.
|
|
612
641
|
* @internal
|
|
613
642
|
*/
|
|
614
643
|
writeDQT() {
|
|
@@ -624,6 +653,7 @@ export class JpegEncoder {
|
|
|
624
653
|
}
|
|
625
654
|
}
|
|
626
655
|
/**
|
|
656
|
+
* Write the Huffman tables segment.
|
|
627
657
|
* @internal
|
|
628
658
|
*/
|
|
629
659
|
writeDHT() {
|
|
@@ -659,6 +689,7 @@ export class JpegEncoder {
|
|
|
659
689
|
}
|
|
660
690
|
}
|
|
661
691
|
/**
|
|
692
|
+
* Write the start-of-scan segment.
|
|
662
693
|
* @internal
|
|
663
694
|
*/
|
|
664
695
|
writeSOS() {
|
|
@@ -676,6 +707,13 @@ export class JpegEncoder {
|
|
|
676
707
|
this.writeByte(0); // Bf
|
|
677
708
|
}
|
|
678
709
|
/**
|
|
710
|
+
* Encode a single 8x8 data unit.
|
|
711
|
+
* @param cdu The coefficient data unit to encode.
|
|
712
|
+
* @param fdTbl The quantization scaling table for the component.
|
|
713
|
+
* @param passedDC The previous DC coefficient.
|
|
714
|
+
* @param htdc The Huffman table for DC coefficients.
|
|
715
|
+
* @param htac The Huffman table for AC coefficients.
|
|
716
|
+
* @returns The encoded DC coefficient for the next block.
|
|
679
717
|
* @internal
|
|
680
718
|
*/
|
|
681
719
|
processDU(cdu, fdTbl, passedDC, htdc, htac) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jpegEncoder.js","sourceRoot":"","sources":["../../../src/encoders/jpegEncoder.ts"],"names":[],"mappings":"AAAA,gCAAgC;AAChC,uCAAuC;AACvC,+BAA+B;AAC/B,uCAAuC;AACvC,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAG9C;;;GAGG;AACH,MAAM,OAAO,WAAW;IACvB;;OAEG;IACI,MAAM,CAAU,UAAU,iBAAiC;IAElE;;OAEG;IACK,MAAM,CAAU,0BAA0B,GAAa;QAC9D,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;KACjD,CAAC;IAEF;;OAEG;IACK,MAAM,CAAU,wBAAwB,GAAa;QAC5D,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE;KACpC,CAAC;IAEF;;OAEG;IACK,MAAM,CAAU,0BAA0B,GAAa;QAC9D,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI;KACpD,CAAC;IAEF;;OAEG;IACK,MAAM,CAAU,wBAAwB,GAAa;QAC5D,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;QAC9F,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;QAC9F,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;QAC9F,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;QAC9F,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;QAC9F,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;QAC9F,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;QAC9F,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;QAC9F,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;QAC9F,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,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","sourcesContent":["// Copyright 2024 IOTA Stiftung.\n// SPDX-License-Identifier: Apache-2.0.\n/* eslint-disable no-bitwise */\n/* eslint-disable no-mixed-operators */\nimport { GeneralError } from \"@twin.org/core\";\nimport { nameof } from \"@twin.org/nameof\";\n\n/**\n * JPEG Encoder.\n * Based on JPEG encoder ported to JavaScript and optimized by Andreas Ritter.\n */\nexport class JpegEncoder {\n\t/**\n\t * Runtime name for the class.\n\t */\n\tpublic static readonly CLASS_NAME: string = nameof<JpegEncoder>();\n\n\t/**\n\t * @internal\n\t */\n\tprivate static readonly _STD_DC_LUMINANCE_NR_CODES: number[] = [\n\t\t0, 0, 1, 5, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0\n\t];\n\n\t/**\n\t * @internal\n\t */\n\tprivate static readonly _STD_DC_LUMINANCE_VALUES: number[] = [\n\t\t0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11\n\t];\n\n\t/**\n\t * @internal\n\t */\n\tprivate static readonly _STD_AC_LUMINANCE_NR_CODES: number[] = [\n\t\t0, 0, 2, 1, 3, 3, 2, 4, 3, 5, 5, 4, 4, 0, 0, 1, 0x7d\n\t];\n\n\t/**\n\t * @internal\n\t */\n\tprivate static readonly _STD_AC_LUMINANCE_VALUES: number[] = [\n\t\t0x01, 0x02, 0x03, 0x00, 0x04, 0x11, 0x05, 0x12, 0x21, 0x31, 0x41, 0x06, 0x13, 0x51, 0x61, 0x07,\n\t\t0x22, 0x71, 0x14, 0x32, 0x81, 0x91, 0xa1, 0x08, 0x23, 0x42, 0xb1, 0xc1, 0x15, 0x52, 0xd1, 0xf0,\n\t\t0x24, 0x33, 0x62, 0x72, 0x82, 0x09, 0x0a, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x25, 0x26, 0x27, 0x28,\n\t\t0x29, 0x2a, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49,\n\t\t0x4a, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69,\n\t\t0x6a, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89,\n\t\t0x8a, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9a, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7,\n\t\t0xa8, 0xa9, 0xaa, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xc2, 0xc3, 0xc4, 0xc5,\n\t\t0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xe1, 0xe2,\n\t\t0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8,\n\t\t0xf9, 0xfa\n\t];\n\n\t/**\n\t * @internal\n\t */\n\tprivate static readonly _STD_DC_CHROMINANCE_NR_CODES: number[] = [\n\t\t0, 0, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0\n\t];\n\n\t/**\n\t * @internal\n\t */\n\tprivate static readonly _STD_DC_CHROMINANCE_VALUES: number[] = [\n\t\t0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11\n\t];\n\n\t/**\n\t * @internal\n\t */\n\tprivate static readonly _STD_AC_CHROMINANCE_NR_CODES: number[] = [\n\t\t0, 0, 2, 1, 2, 4, 4, 3, 4, 7, 5, 4, 4, 0, 1, 2, 0x77\n\t];\n\n\t/**\n\t * @internal\n\t */\n\tprivate static readonly _STD_AC_CHROMINANCE_VALUES: number[] = [\n\t\t0x00, 0x01, 0x02, 0x03, 0x11, 0x04, 0x05, 0x21, 0x31, 0x06, 0x12, 0x41, 0x51, 0x07, 0x61, 0x71,\n\t\t0x13, 0x22, 0x32, 0x81, 0x08, 0x14, 0x42, 0x91, 0xa1, 0xb1, 0xc1, 0x09, 0x23, 0x33, 0x52, 0xf0,\n\t\t0x15, 0x62, 0x72, 0xd1, 0x0a, 0x16, 0x24, 0x34, 0xe1, 0x25, 0xf1, 0x17, 0x18, 0x19, 0x1a, 0x26,\n\t\t0x27, 0x28, 0x29, 0x2a, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48,\n\t\t0x49, 0x4a, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68,\n\t\t0x69, 0x6a, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,\n\t\t0x88, 0x89, 0x8a, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9a, 0xa2, 0xa3, 0xa4, 0xa5,\n\t\t0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xc2, 0xc3,\n\t\t0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda,\n\t\t0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8,\n\t\t0xf9, 0xfa\n\t];\n\n\t/** @internal */\n\tprivate static readonly _SIG_ZAG: number[] = [\n\t\t0, 1, 5, 6, 14, 15, 27, 28, 2, 4, 7, 13, 16, 26, 29, 42, 3, 8, 12, 17, 25, 30, 41, 43, 9, 11,\n\t\t18, 24, 31, 40, 44, 53, 10, 19, 23, 32, 39, 45, 52, 54, 20, 22, 33, 38, 46, 51, 55, 60, 21, 34,\n\t\t37, 47, 50, 56, 59, 61, 35, 36, 48, 49, 57, 58, 62, 63\n\t];\n\n\t/**\n\t * @internal\n\t */\n\tprivate readonly _yTable: number[];\n\n\t/**\n\t * @internal\n\t */\n\tprivate readonly _uvTable: number[];\n\n\t/**\n\t * @internal\n\t */\n\tprivate readonly _fdTblY: number[];\n\n\t/**\n\t * @internal\n\t */\n\tprivate readonly _fdTblUV: number[];\n\n\t/**\n\t * @internal\n\t */\n\tprivate _ydcHashTable: number[][] | undefined;\n\n\t/**\n\t * @internal\n\t */\n\tprivate _uVdcHashTable: number[][] | undefined;\n\n\t/**\n\t * @internal\n\t */\n\tprivate _yacHashTable: number[][] | undefined;\n\n\t/**\n\t * @internal\n\t */\n\tprivate _uVacHashTable: number[][] | undefined;\n\n\t/**\n\t * @internal\n\t */\n\tprivate readonly _bitCode: number[][];\n\n\t/**\n\t * @internal\n\t */\n\tprivate readonly _category: number[];\n\n\t/**\n\t * @internal\n\t */\n\tprivate readonly _outputFDctQuant: number[];\n\n\t/**\n\t * @internal\n\t */\n\tprivate readonly _du: number[];\n\n\t/**\n\t * @internal\n\t */\n\tprivate _byteOut: number[];\n\n\t/**\n\t * @internal\n\t */\n\tprivate _byteNew: number;\n\n\t/**\n\t * @internal\n\t */\n\tprivate _bytePos: number;\n\n\t/**\n\t * @internal\n\t */\n\tprivate readonly _ydu: number[];\n\n\t/**\n\t * @internal\n\t */\n\tprivate readonly _udu: number[];\n\n\t/**\n\t * @internal\n\t */\n\tprivate readonly _vdu: number[];\n\n\t/**\n\t * @internal\n\t */\n\tprivate readonly _rgbYuvTable: number[];\n\n\t/**\n\t * Create a new instance of JpegEncoder.\n\t */\n\tconstructor() {\n\t\tthis._yTable = Array.from({ length: 64 });\n\t\tthis._uvTable = Array.from({ length: 64 });\n\t\tthis._fdTblY = Array.from({ length: 64 });\n\t\tthis._fdTblUV = Array.from({ length: 64 });\n\n\t\tthis._bitCode = Array.from({ length: 65535 });\n\t\tthis._category = Array.from({ length: 65535 });\n\t\tthis._outputFDctQuant = Array.from({ length: 64 });\n\t\tthis._du = Array.from({ length: 64 });\n\t\tthis._byteOut = [];\n\t\tthis._byteNew = 0;\n\t\tthis._bytePos = 7;\n\n\t\tthis._ydu = Array.from({ length: 64 });\n\t\tthis._udu = Array.from({ length: 64 });\n\t\tthis._vdu = Array.from({ length: 64 });\n\t\tthis._rgbYuvTable = Array.from({ length: 2048 });\n\n\t\tthis.initHuffmanTbl();\n\t\tthis.initCategoryNumber();\n\t\tthis.initRGBYUVTable();\n\t}\n\n\t/**\n\t * Encode the image with the given quality.\n\t * @param width The width of the image to encode.\n\t * @param height The height of the image to encode.\n\t * @param imageData The data for the image.\n\t * @param quality The quality to encode the image at.\n\t * @returns The data for the encoded image.\n\t */\n\tpublic encode(width: number, height: number, imageData: Uint8Array, quality: number): Uint8Array {\n\t\tthis.setQuality(quality);\n\n\t\t// Initialize bit writer\n\t\tthis._byteOut = [];\n\t\tthis._byteNew = 0;\n\t\tthis._bytePos = 7;\n\n\t\t// Add JPEG headers\n\t\tthis.writeWord(0xffd8); // SOI\n\t\tthis.writeAPP0();\n\t\tthis.writeDQT();\n\t\tthis.writeSOF0(width, height);\n\t\tthis.writeDHT();\n\t\tthis.writeSOS();\n\n\t\t// Encode 8x8 macro blocks\n\t\tlet DCY = 0;\n\t\tlet DCU = 0;\n\t\tlet DCV = 0;\n\n\t\tthis._byteNew = 0;\n\t\tthis._bytePos = 7;\n\n\t\tconst quadWidth = width * 4;\n\n\t\tlet x;\n\t\tlet y = 0;\n\t\tlet r;\n\t\tlet g;\n\t\tlet b;\n\t\tlet start;\n\t\tlet p;\n\t\tlet col;\n\t\tlet row;\n\t\tlet pos;\n\t\twhile (y < height) {\n\t\t\tx = 0;\n\t\t\twhile (x < quadWidth) {\n\t\t\t\tstart = quadWidth * y + x;\n\n\t\t\t\tfor (pos = 0; pos < 64; pos++) {\n\t\t\t\t\trow = pos >> 3; // /8\n\t\t\t\t\tcol = (pos & 7) * 4; // %8\n\t\t\t\t\tp = start + row * quadWidth + col;\n\n\t\t\t\t\tif (y + row >= height) {\n\t\t\t\t\t\t// padding bottom\n\t\t\t\t\t\tp -= quadWidth * (y + 1 + row - height);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (x + col >= quadWidth) {\n\t\t\t\t\t\t// padding right\n\t\t\t\t\t\tp -= x + col - quadWidth + 4;\n\t\t\t\t\t}\n\n\t\t\t\t\tr = imageData[p++];\n\t\t\t\t\tg = imageData[p++];\n\t\t\t\t\tb = imageData[p];\n\n\t\t\t\t\t// use lookup table (slightly faster)\n\t\t\t\t\tthis._ydu[pos] =\n\t\t\t\t\t\t((this._rgbYuvTable[r] +\n\t\t\t\t\t\t\tthis._rgbYuvTable[Math.trunc(g + 256)] +\n\t\t\t\t\t\t\tthis._rgbYuvTable[Math.trunc(b + 512)]) >>\n\t\t\t\t\t\t\t16) -\n\t\t\t\t\t\t128;\n\t\t\t\t\tthis._udu[pos] =\n\t\t\t\t\t\t((this._rgbYuvTable[Math.trunc(r + 768)] +\n\t\t\t\t\t\t\tthis._rgbYuvTable[Math.trunc(g + 1024)] +\n\t\t\t\t\t\t\tthis._rgbYuvTable[Math.trunc(b + 1280)]) >>\n\t\t\t\t\t\t\t16) -\n\t\t\t\t\t\t128;\n\t\t\t\t\tthis._vdu[pos] =\n\t\t\t\t\t\t((this._rgbYuvTable[Math.trunc(r + 1280)] +\n\t\t\t\t\t\t\tthis._rgbYuvTable[Math.trunc(g + 1536)] +\n\t\t\t\t\t\t\tthis._rgbYuvTable[Math.trunc(b + 1792)]) >>\n\t\t\t\t\t\t\t16) -\n\t\t\t\t\t\t128;\n\t\t\t\t}\n\n\t\t\t\tif (this._ydcHashTable && this._yacHashTable) {\n\t\t\t\t\tDCY = this.processDU(\n\t\t\t\t\t\tthis._ydu,\n\t\t\t\t\t\tthis._fdTblY,\n\t\t\t\t\t\tDCY,\n\t\t\t\t\t\tthis._ydcHashTable,\n\t\t\t\t\t\tthis._yacHashTable\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tif (this._uVdcHashTable && this._uVacHashTable) {\n\t\t\t\t\tDCU = this.processDU(\n\t\t\t\t\t\tthis._udu,\n\t\t\t\t\t\tthis._fdTblUV,\n\t\t\t\t\t\tDCU,\n\t\t\t\t\t\tthis._uVdcHashTable,\n\t\t\t\t\t\tthis._uVacHashTable\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tif (this._uVdcHashTable && this._uVacHashTable) {\n\t\t\t\t\tDCV = this.processDU(\n\t\t\t\t\t\tthis._vdu,\n\t\t\t\t\t\tthis._fdTblUV,\n\t\t\t\t\t\tDCV,\n\t\t\t\t\t\tthis._uVdcHashTable,\n\t\t\t\t\t\tthis._uVacHashTable\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tx += 32;\n\t\t\t}\n\t\t\ty += 8;\n\t\t}\n\n\t\t// Do the bit alignment of the EOI marker\n\t\tif (this._bytePos >= 0) {\n\t\t\tconst fillBits = [];\n\t\t\tfillBits[1] = this._bytePos + 1;\n\t\t\tfillBits[0] = (1 << (this._bytePos + 1)) - 1;\n\t\t\tthis.writeBits(fillBits);\n\t\t}\n\n\t\tthis.writeWord(0xffd9); // EOI\n\n\t\treturn new Uint8Array(this._byteOut);\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tprivate setQuality(quality: number): void {\n\t\tif (quality <= 0 || quality > 100) {\n\t\t\tthrow new GeneralError(JpegEncoder.CLASS_NAME, \"invalidQuality\", { value: quality });\n\t\t}\n\n\t\tlet sf;\n\t\tif (quality < 50) {\n\t\t\tsf = Math.floor(5000 / quality);\n\t\t} else {\n\t\t\tsf = Math.floor(200 - quality * 2);\n\t\t}\n\n\t\tthis.initQuantTables(sf);\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tprivate initQuantTables(sf: number): void {\n\t\tconst YQT = [\n\t\t\t16, 11, 10, 16, 24, 40, 51, 61, 12, 12, 14, 19, 26, 58, 60, 55, 14, 13, 16, 24, 40, 57, 69,\n\t\t\t56, 14, 17, 22, 29, 51, 87, 80, 62, 18, 22, 37, 56, 68, 109, 103, 77, 24, 35, 55, 64, 81, 104,\n\t\t\t113, 92, 49, 64, 78, 87, 103, 121, 120, 101, 72, 92, 95, 98, 112, 100, 103, 99\n\t\t];\n\n\t\tfor (let i = 0; i < 64; i++) {\n\t\t\tlet t = Math.floor((YQT[i] * sf + 50) / 100);\n\t\t\tif (t < 1) {\n\t\t\t\tt = 1;\n\t\t\t} else if (t > 255) {\n\t\t\t\tt = 255;\n\t\t\t}\n\t\t\tthis._yTable[JpegEncoder._SIG_ZAG[i]] = t;\n\t\t}\n\t\tconst UVQT = [\n\t\t\t17, 18, 24, 47, 99, 99, 99, 99, 18, 21, 26, 66, 99, 99, 99, 99, 24, 26, 56, 99, 99, 99, 99,\n\t\t\t99, 47, 66, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99,\n\t\t\t99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99\n\t\t];\n\t\tfor (let j = 0; j < 64; j++) {\n\t\t\tlet u = Math.floor((UVQT[j] * sf + 50) / 100);\n\t\t\tif (u < 1) {\n\t\t\t\tu = 1;\n\t\t\t} else if (u > 255) {\n\t\t\t\tu = 255;\n\t\t\t}\n\t\t\tthis._uvTable[JpegEncoder._SIG_ZAG[j]] = u;\n\t\t}\n\t\tconst aAsf = [1, 1.387039845, 1.306562965, 1.175875602, 1, 0.785694958, 0.5411961, 0.275899379];\n\t\tlet k = 0;\n\t\tfor (let row = 0; row < 8; row++) {\n\t\t\tfor (let col = 0; col < 8; col++) {\n\t\t\t\tthis._fdTblY[k] = 1 / (this._yTable[JpegEncoder._SIG_ZAG[k]] * aAsf[row] * aAsf[col] * 8);\n\t\t\t\tthis._fdTblUV[k] = 1 / (this._uvTable[JpegEncoder._SIG_ZAG[k]] * aAsf[row] * aAsf[col] * 8);\n\t\t\t\tk++;\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tprivate computeHuffmanTbl(nrCodes: number[], stdTable: number[]): number[][] {\n\t\tlet codeValue = 0;\n\t\tlet posInTable = 0;\n\t\tconst HT: number[][] = [];\n\t\tfor (let k = 1; k <= 16; k++) {\n\t\t\tfor (let j = 1; j <= nrCodes[k]; j++) {\n\t\t\t\tHT[stdTable[posInTable]] = [];\n\t\t\t\tHT[stdTable[posInTable]][0] = codeValue;\n\t\t\t\tHT[stdTable[posInTable]][1] = k;\n\t\t\t\tposInTable++;\n\t\t\t\tcodeValue++;\n\t\t\t}\n\t\t\tcodeValue *= 2;\n\t\t}\n\t\treturn HT;\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tprivate initHuffmanTbl(): void {\n\t\tthis._ydcHashTable = this.computeHuffmanTbl(\n\t\t\tJpegEncoder._STD_DC_LUMINANCE_NR_CODES,\n\t\t\tJpegEncoder._STD_DC_LUMINANCE_VALUES\n\t\t);\n\t\tthis._uVdcHashTable = this.computeHuffmanTbl(\n\t\t\tJpegEncoder._STD_DC_CHROMINANCE_NR_CODES,\n\t\t\tJpegEncoder._STD_DC_CHROMINANCE_VALUES\n\t\t);\n\t\tthis._yacHashTable = this.computeHuffmanTbl(\n\t\t\tJpegEncoder._STD_AC_LUMINANCE_NR_CODES,\n\t\t\tJpegEncoder._STD_AC_LUMINANCE_VALUES\n\t\t);\n\t\tthis._uVacHashTable = this.computeHuffmanTbl(\n\t\t\tJpegEncoder._STD_AC_CHROMINANCE_NR_CODES,\n\t\t\tJpegEncoder._STD_AC_CHROMINANCE_VALUES\n\t\t);\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tprivate initCategoryNumber(): void {\n\t\tlet nrLower = 1;\n\t\tlet nrUpper = 2;\n\t\tfor (let cat = 1; cat <= 15; cat++) {\n\t\t\t// Positive numbers\n\t\t\tfor (let nr = nrLower; nr < nrUpper; nr++) {\n\t\t\t\tthis._category[32767 + nr] = cat;\n\t\t\t\tthis._bitCode[32767 + nr] = [];\n\t\t\t\tthis._bitCode[32767 + nr][1] = cat;\n\t\t\t\tthis._bitCode[32767 + nr][0] = nr;\n\t\t\t}\n\t\t\t// Negative numbers\n\t\t\tfor (let nrNeg = -(nrUpper - 1); nrNeg <= -nrLower; nrNeg++) {\n\t\t\t\tthis._category[32767 + nrNeg] = cat;\n\t\t\t\tthis._bitCode[32767 + nrNeg] = [];\n\t\t\t\tthis._bitCode[32767 + nrNeg][1] = cat;\n\t\t\t\tthis._bitCode[32767 + nrNeg][0] = nrUpper - 1 + nrNeg;\n\t\t\t}\n\t\t\tnrLower <<= 1;\n\t\t\tnrUpper <<= 1;\n\t\t}\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tprivate initRGBYUVTable(): void {\n\t\tfor (let i = 0; i < 256; i++) {\n\t\t\tthis._rgbYuvTable[i] = 19595 * i;\n\t\t\tthis._rgbYuvTable[Math.trunc(i + 256)] = 38470 * i;\n\t\t\tthis._rgbYuvTable[Math.trunc(i + 512)] = 7471 * i + 0x8000;\n\t\t\tthis._rgbYuvTable[Math.trunc(i + 768)] = -11059 * i;\n\t\t\tthis._rgbYuvTable[Math.trunc(i + 1024)] = -21709 * i;\n\t\t\tthis._rgbYuvTable[Math.trunc(i + 1280)] = 32768 * i + 0x807fff;\n\t\t\tthis._rgbYuvTable[Math.trunc(i + 1536)] = -27439 * i;\n\t\t\tthis._rgbYuvTable[Math.trunc(i + 1792)] = -5329 * i;\n\t\t}\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tprivate writeBits(bs: number[]): void {\n\t\tconst value = bs[0];\n\t\tlet posVal = bs[1] - 1;\n\t\twhile (posVal >= 0) {\n\t\t\tif (value & (1 << posVal)) {\n\t\t\t\tthis._byteNew |= 1 << this._bytePos;\n\t\t\t}\n\t\t\tposVal--;\n\t\t\tthis._bytePos--;\n\t\t\tif (this._bytePos < 0) {\n\t\t\t\tif (this._byteNew === 0xff) {\n\t\t\t\t\tthis.writeByte(0xff);\n\t\t\t\t\tthis.writeByte(0);\n\t\t\t\t} else {\n\t\t\t\t\tthis.writeByte(this._byteNew);\n\t\t\t\t}\n\t\t\t\tthis._bytePos = 7;\n\t\t\t\tthis._byteNew = 0;\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tprivate writeByte(value: number): void {\n\t\tthis._byteOut.push(value);\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tprivate writeWord(value: number): void {\n\t\tthis.writeByte((value >> 8) & 0xff);\n\t\tthis.writeByte(value & 0xff);\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tprivate fDCTQuant(data: number[], fdTbl: number[]): number[] {\n\t\tlet d0;\n\t\tlet d1;\n\t\tlet d2;\n\t\tlet d3;\n\t\tlet d4;\n\t\tlet d5;\n\t\tlet d6;\n\t\tlet d7;\n\t\t/* Pass 1: process rows. */\n\t\tlet dataOff = 0;\n\t\tlet i;\n\t\tconst I8 = 8;\n\t\tconst I64 = 64;\n\t\tfor (i = 0; i < I8; ++i) {\n\t\t\td0 = data[dataOff];\n\t\t\td1 = data[dataOff + 1];\n\t\t\td2 = data[dataOff + 2];\n\t\t\td3 = data[dataOff + 3];\n\t\t\td4 = data[dataOff + 4];\n\t\t\td5 = data[dataOff + 5];\n\t\t\td6 = data[dataOff + 6];\n\t\t\td7 = data[dataOff + 7];\n\n\t\t\tconst tmp0 = d0 + d7;\n\t\t\tconst tmp7 = d0 - d7;\n\t\t\tconst tmp1 = d1 + d6;\n\t\t\tconst tmp6 = d1 - d6;\n\t\t\tconst tmp2 = d2 + d5;\n\t\t\tconst tmp5 = d2 - d5;\n\t\t\tconst tmp3 = d3 + d4;\n\t\t\tconst tmp4 = d3 - d4;\n\n\t\t\t/* Even part */\n\t\t\tlet tmp10 = tmp0 + tmp3; /* phase 2 */\n\t\t\tconst tmp13 = tmp0 - tmp3;\n\t\t\tlet tmp11 = tmp1 + tmp2;\n\t\t\tlet tmp12 = tmp1 - tmp2;\n\n\t\t\tdata[dataOff] = tmp10 + tmp11; /* phase 3 */\n\t\t\tdata[dataOff + 4] = tmp10 - tmp11;\n\n\t\t\tconst z1 = (tmp12 + tmp13) * 0.707106781; /* c4 */\n\t\t\tdata[dataOff + 2] = tmp13 + z1; /* phase 5 */\n\t\t\tdata[dataOff + 6] = tmp13 - z1;\n\n\t\t\t/* Odd part */\n\t\t\ttmp10 = tmp4 + tmp5; /* phase 2 */\n\t\t\ttmp11 = tmp5 + tmp6;\n\t\t\ttmp12 = tmp6 + tmp7;\n\n\t\t\t/* The rotator is modified from fig 4-8 to avoid extra negations. */\n\t\t\tconst z5 = (tmp10 - tmp12) * 0.382683433; /* c6 */\n\t\t\tconst z2 = 0.5411961 * tmp10 + z5; /* c2-c6 */\n\t\t\tconst z4 = 1.306562965 * tmp12 + z5; /* c2+c6 */\n\t\t\tconst z3 = tmp11 * 0.707106781; /* c4 */\n\n\t\t\tconst z11 = tmp7 + z3; /* phase 5 */\n\t\t\tconst z13 = tmp7 - z3;\n\n\t\t\tdata[dataOff + 5] = z13 + z2; /* phase 6 */\n\t\t\tdata[dataOff + 3] = z13 - z2;\n\t\t\tdata[dataOff + 1] = z11 + z4;\n\t\t\tdata[dataOff + 7] = z11 - z4;\n\n\t\t\tdataOff += 8; /* advance pointer to next row */\n\t\t}\n\n\t\t/* Pass 2: process columns. */\n\t\tdataOff = 0;\n\t\tfor (i = 0; i < I8; ++i) {\n\t\t\td0 = data[dataOff];\n\t\t\td1 = data[dataOff + 8];\n\t\t\td2 = data[dataOff + 16];\n\t\t\td3 = data[dataOff + 24];\n\t\t\td4 = data[dataOff + 32];\n\t\t\td5 = data[dataOff + 40];\n\t\t\td6 = data[dataOff + 48];\n\t\t\td7 = data[dataOff + 56];\n\n\t\t\tconst tmp0p2 = d0 + d7;\n\t\t\tconst tmp7p2 = d0 - d7;\n\t\t\tconst tmp1p2 = d1 + d6;\n\t\t\tconst tmp6p2 = d1 - d6;\n\t\t\tconst tmp2p2 = d2 + d5;\n\t\t\tconst tmp5p2 = d2 - d5;\n\t\t\tconst tmp3p2 = d3 + d4;\n\t\t\tconst tmp4p2 = d3 - d4;\n\n\t\t\t/* Even part */\n\t\t\tlet tmp10p2 = tmp0p2 + tmp3p2; /* phase 2 */\n\t\t\tconst tmp13p2 = tmp0p2 - tmp3p2;\n\t\t\tlet tmp11p2 = tmp1p2 + tmp2p2;\n\t\t\tlet tmp12p2 = tmp1p2 - tmp2p2;\n\n\t\t\tdata[dataOff] = tmp10p2 + tmp11p2; /* phase 3 */\n\t\t\tdata[dataOff + 32] = tmp10p2 - tmp11p2;\n\n\t\t\tconst z1p2 = (tmp12p2 + tmp13p2) * 0.707106781; /* c4 */\n\t\t\tdata[dataOff + 16] = tmp13p2 + z1p2; /* phase 5 */\n\t\t\tdata[dataOff + 48] = tmp13p2 - z1p2;\n\n\t\t\t/* Odd part */\n\t\t\ttmp10p2 = tmp4p2 + tmp5p2; /* phase 2 */\n\t\t\ttmp11p2 = tmp5p2 + tmp6p2;\n\t\t\ttmp12p2 = tmp6p2 + tmp7p2;\n\n\t\t\t/* The rotator is modified from fig 4-8 to avoid extra negations. */\n\t\t\tconst z5p2 = (tmp10p2 - tmp12p2) * 0.382683433; /* c6 */\n\t\t\tconst z2p2 = 0.5411961 * tmp10p2 + z5p2; /* c2-c6 */\n\t\t\tconst z4p2 = 1.306562965 * tmp12p2 + z5p2; /* c2+c6 */\n\t\t\tconst z3p2 = tmp11p2 * 0.707106781; /* c4 */\n\n\t\t\tconst z11p2 = tmp7p2 + z3p2; /* phase 5 */\n\t\t\tconst z13p2 = tmp7p2 - z3p2;\n\n\t\t\tdata[dataOff + 40] = z13p2 + z2p2; /* phase 6 */\n\t\t\tdata[dataOff + 24] = z13p2 - z2p2;\n\t\t\tdata[dataOff + 8] = z11p2 + z4p2;\n\t\t\tdata[dataOff + 56] = z11p2 - z4p2;\n\n\t\t\tdataOff++; /* advance pointer to next column */\n\t\t}\n\n\t\t// Quantize/descale the coefficients\n\t\tlet fDCTQuant;\n\t\tfor (i = 0; i < I64; ++i) {\n\t\t\t// Apply the quantization and scaling factor & Round to nearest integer\n\t\t\tfDCTQuant = data[i] * fdTbl[i];\n\t\t\tthis._outputFDctQuant[i] =\n\t\t\t\tfDCTQuant > 0 ? Math.trunc(fDCTQuant + 0.5) : Math.trunc(fDCTQuant - 0.5);\n\t\t}\n\t\treturn this._outputFDctQuant;\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tprivate writeAPP0(): void {\n\t\tthis.writeWord(0xffe0); // marker\n\t\tthis.writeWord(16); // length\n\t\tthis.writeByte(0x4a); // J\n\t\tthis.writeByte(0x46); // F\n\t\tthis.writeByte(0x49); // I\n\t\tthis.writeByte(0x46); // F\n\t\t// cspell:disable-next-line\n\t\tthis.writeByte(0); // = \"JFIF\",'\\0'\n\t\tthis.writeByte(1); // version hi\n\t\tthis.writeByte(1); // version lo\n\t\tthis.writeByte(0); // xy units\n\t\tthis.writeWord(1); // x density\n\t\tthis.writeWord(1); // y density\n\t\tthis.writeByte(0); // thumb n width\n\t\tthis.writeByte(0); // thumb n height\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tprivate writeSOF0(width: number, height: number): void {\n\t\tthis.writeWord(0xffc0); // marker\n\t\tthis.writeWord(17); // length, true color YUV JPG\n\t\tthis.writeByte(8); // precision\n\t\tthis.writeWord(height);\n\t\tthis.writeWord(width);\n\t\tthis.writeByte(3); // nr of components\n\t\tthis.writeByte(1); // IdY\n\t\tthis.writeByte(0x11); // HVY\n\t\tthis.writeByte(0); // QTY\n\t\tthis.writeByte(2); // IdU\n\t\tthis.writeByte(0x11); // HVU\n\t\tthis.writeByte(1); // QTU\n\t\tthis.writeByte(3); // IdV\n\t\tthis.writeByte(0x11); // HVV\n\t\tthis.writeByte(1); // QTV\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tprivate writeDQT(): void {\n\t\tthis.writeWord(0xffdb); // marker\n\t\tthis.writeWord(132); // length\n\t\tthis.writeByte(0);\n\t\tfor (let i = 0; i < 64; i++) {\n\t\t\tthis.writeByte(this._yTable[i]);\n\t\t}\n\t\tthis.writeByte(1);\n\t\tfor (let j = 0; j < 64; j++) {\n\t\t\tthis.writeByte(this._uvTable[j]);\n\t\t}\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tprivate writeDHT(): void {\n\t\tthis.writeWord(0xffc4); // marker\n\t\tthis.writeWord(0x01a2); // length\n\n\t\tthis.writeByte(0); // HTYDc info\n\t\tfor (let i = 0; i < 16; i++) {\n\t\t\tthis.writeByte(JpegEncoder._STD_DC_LUMINANCE_NR_CODES[i + 1]);\n\t\t}\n\t\tfor (let j = 0; j <= 11; j++) {\n\t\t\tthis.writeByte(JpegEncoder._STD_DC_LUMINANCE_VALUES[j]);\n\t\t}\n\n\t\tthis.writeByte(0x10); // HTYAc info\n\t\tfor (let k = 0; k < 16; k++) {\n\t\t\tthis.writeByte(JpegEncoder._STD_AC_LUMINANCE_NR_CODES[k + 1]);\n\t\t}\n\t\tfor (let l = 0; l <= 161; l++) {\n\t\t\tthis.writeByte(JpegEncoder._STD_AC_LUMINANCE_VALUES[l]);\n\t\t}\n\n\t\tthis.writeByte(1); // HTUDc info\n\t\tfor (let m = 0; m < 16; m++) {\n\t\t\tthis.writeByte(JpegEncoder._STD_DC_CHROMINANCE_NR_CODES[m + 1]);\n\t\t}\n\t\tfor (let n = 0; n <= 11; n++) {\n\t\t\tthis.writeByte(JpegEncoder._STD_DC_CHROMINANCE_VALUES[n]);\n\t\t}\n\n\t\tthis.writeByte(0x11); // HTUAc info\n\t\tfor (let o = 0; o < 16; o++) {\n\t\t\tthis.writeByte(JpegEncoder._STD_AC_CHROMINANCE_NR_CODES[o + 1]);\n\t\t}\n\t\tfor (let p = 0; p <= 161; p++) {\n\t\t\tthis.writeByte(JpegEncoder._STD_AC_CHROMINANCE_VALUES[p]);\n\t\t}\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tprivate writeSOS(): void {\n\t\tthis.writeWord(0xffda); // marker\n\t\tthis.writeWord(12); // length\n\t\tthis.writeByte(3); // nr of components\n\t\tthis.writeByte(1); // IdY\n\t\tthis.writeByte(0); // HTY\n\t\tthis.writeByte(2); // IdU\n\t\tthis.writeByte(0x11); // HTU\n\t\tthis.writeByte(3); // IdV\n\t\tthis.writeByte(0x11); // HTV\n\t\tthis.writeByte(0); // Ss\n\t\tthis.writeByte(0x3f); // Se\n\t\tthis.writeByte(0); // Bf\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tprivate processDU(\n\t\tcdu: number[],\n\t\tfdTbl: number[],\n\t\tpassedDC: number,\n\t\thtdc: number[][],\n\t\thtac: number[][]\n\t): number {\n\t\tlet DC = passedDC;\n\t\tconst EOB = htac[0x00];\n\t\tconst m16zeroes = htac[0xf0];\n\t\tlet pos;\n\t\tconst I16 = 16;\n\t\tconst I63 = 63;\n\t\tconst I64 = 64;\n\t\tconst DU_DCT = this.fDCTQuant(cdu, fdTbl);\n\t\t// ZigZag reorder\n\t\tfor (let j = 0; j < I64; ++j) {\n\t\t\tthis._du[JpegEncoder._SIG_ZAG[j]] = DU_DCT[j];\n\t\t}\n\t\tconst diff = this._du[0] - DC;\n\t\tDC = this._du[0];\n\t\t// Encode DC\n\t\tif (diff === 0) {\n\t\t\tthis.writeBits(htdc[0]); // Diff might be 0\n\t\t} else {\n\t\t\tpos = 32767 + diff;\n\t\t\tthis.writeBits(htdc[this._category[pos]]);\n\t\t\tthis.writeBits(this._bitCode[pos]);\n\t\t}\n\t\t// Encode ACs\n\t\tlet end0pos = 63; // was const... which is crazy\n\t\tfor (; end0pos > 0 && this._du[end0pos] === 0; end0pos--) {}\n\t\t// end0pos = first element in reverse order !=0\n\t\tif (end0pos === 0) {\n\t\t\tthis.writeBits(EOB);\n\t\t\treturn DC;\n\t\t}\n\t\tlet i = 1;\n\t\tlet lng;\n\t\twhile (i <= end0pos) {\n\t\t\tconst startPos = i;\n\t\t\tfor (; this._du[i] === 0 && i <= end0pos; ++i) {}\n\t\t\tlet nrZeroes = i - startPos;\n\t\t\tif (nrZeroes >= I16) {\n\t\t\t\tlng = nrZeroes >> 4;\n\t\t\t\tfor (let nrMarker = 1; nrMarker <= lng; ++nrMarker) {\n\t\t\t\t\tthis.writeBits(m16zeroes);\n\t\t\t\t}\n\t\t\t\tnrZeroes &= 0xf;\n\t\t\t}\n\t\t\tpos = 32767 + this._du[i];\n\t\t\tthis.writeBits(htac[(nrZeroes << 4) + this._category[pos]]);\n\t\t\tthis.writeBits(this._bitCode[pos]);\n\t\t\ti++;\n\t\t}\n\t\tif (end0pos !== I63) {\n\t\t\tthis.writeBits(EOB);\n\t\t}\n\t\treturn DC;\n\t}\n}\n"]}
|
|
1
|
+
{"version":3,"file":"jpegEncoder.js","sourceRoot":"","sources":["../../../src/encoders/jpegEncoder.ts"],"names":[],"mappings":"AAAA,gCAAgC;AAChC,uCAAuC;AACvC,+BAA+B;AAC/B,uCAAuC;AACvC,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAG9C;;;GAGG;AACH,MAAM,OAAO,WAAW;IACvB;;OAEG;IACI,MAAM,CAAU,UAAU,iBAAiC;IAElE;;OAEG;IACK,MAAM,CAAU,0BAA0B,GAAa;QAC9D,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;KACjD,CAAC;IAEF;;OAEG;IACK,MAAM,CAAU,wBAAwB,GAAa;QAC5D,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE;KACpC,CAAC;IAEF;;OAEG;IACK,MAAM,CAAU,0BAA0B,GAAa;QAC9D,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI;KACpD,CAAC;IAEF;;OAEG;IACK,MAAM,CAAU,wBAAwB,GAAa;QAC5D,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;QAC9F,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;QAC9F,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;QAC9F,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;QAC9F,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;QAC9F,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;QAC9F,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;QAC9F,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;QAC9F,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;QAC9F,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,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","sourcesContent":["// Copyright 2024 IOTA Stiftung.\n// SPDX-License-Identifier: Apache-2.0.\n/* eslint-disable no-bitwise */\n/* eslint-disable no-mixed-operators */\nimport { GeneralError } from \"@twin.org/core\";\nimport { nameof } from \"@twin.org/nameof\";\n\n/**\n * JPEG Encoder.\n * Based on JPEG encoder ported to JavaScript and optimized by Andreas Ritter.\n */\nexport class JpegEncoder {\n\t/**\n\t * Runtime name for the class.\n\t */\n\tpublic static readonly CLASS_NAME: string = nameof<JpegEncoder>();\n\n\t/**\n\t * @internal\n\t */\n\tprivate static readonly _STD_DC_LUMINANCE_NR_CODES: number[] = [\n\t\t0, 0, 1, 5, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0\n\t];\n\n\t/**\n\t * @internal\n\t */\n\tprivate static readonly _STD_DC_LUMINANCE_VALUES: number[] = [\n\t\t0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11\n\t];\n\n\t/**\n\t * @internal\n\t */\n\tprivate static readonly _STD_AC_LUMINANCE_NR_CODES: number[] = [\n\t\t0, 0, 2, 1, 3, 3, 2, 4, 3, 5, 5, 4, 4, 0, 0, 1, 0x7d\n\t];\n\n\t/**\n\t * @internal\n\t */\n\tprivate static readonly _STD_AC_LUMINANCE_VALUES: number[] = [\n\t\t0x01, 0x02, 0x03, 0x00, 0x04, 0x11, 0x05, 0x12, 0x21, 0x31, 0x41, 0x06, 0x13, 0x51, 0x61, 0x07,\n\t\t0x22, 0x71, 0x14, 0x32, 0x81, 0x91, 0xa1, 0x08, 0x23, 0x42, 0xb1, 0xc1, 0x15, 0x52, 0xd1, 0xf0,\n\t\t0x24, 0x33, 0x62, 0x72, 0x82, 0x09, 0x0a, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x25, 0x26, 0x27, 0x28,\n\t\t0x29, 0x2a, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49,\n\t\t0x4a, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69,\n\t\t0x6a, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89,\n\t\t0x8a, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9a, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7,\n\t\t0xa8, 0xa9, 0xaa, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xc2, 0xc3, 0xc4, 0xc5,\n\t\t0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xe1, 0xe2,\n\t\t0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8,\n\t\t0xf9, 0xfa\n\t];\n\n\t/**\n\t * @internal\n\t */\n\tprivate static readonly _STD_DC_CHROMINANCE_NR_CODES: number[] = [\n\t\t0, 0, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0\n\t];\n\n\t/**\n\t * @internal\n\t */\n\tprivate static readonly _STD_DC_CHROMINANCE_VALUES: number[] = [\n\t\t0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11\n\t];\n\n\t/**\n\t * @internal\n\t */\n\tprivate static readonly _STD_AC_CHROMINANCE_NR_CODES: number[] = [\n\t\t0, 0, 2, 1, 2, 4, 4, 3, 4, 7, 5, 4, 4, 0, 1, 2, 0x77\n\t];\n\n\t/**\n\t * @internal\n\t */\n\tprivate static readonly _STD_AC_CHROMINANCE_VALUES: number[] = [\n\t\t0x00, 0x01, 0x02, 0x03, 0x11, 0x04, 0x05, 0x21, 0x31, 0x06, 0x12, 0x41, 0x51, 0x07, 0x61, 0x71,\n\t\t0x13, 0x22, 0x32, 0x81, 0x08, 0x14, 0x42, 0x91, 0xa1, 0xb1, 0xc1, 0x09, 0x23, 0x33, 0x52, 0xf0,\n\t\t0x15, 0x62, 0x72, 0xd1, 0x0a, 0x16, 0x24, 0x34, 0xe1, 0x25, 0xf1, 0x17, 0x18, 0x19, 0x1a, 0x26,\n\t\t0x27, 0x28, 0x29, 0x2a, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48,\n\t\t0x49, 0x4a, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68,\n\t\t0x69, 0x6a, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,\n\t\t0x88, 0x89, 0x8a, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9a, 0xa2, 0xa3, 0xa4, 0xa5,\n\t\t0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xc2, 0xc3,\n\t\t0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda,\n\t\t0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8,\n\t\t0xf9, 0xfa\n\t];\n\n\t/**\n\t * @internal\n\t */\n\tprivate static readonly _SIG_ZAG: number[] = [\n\t\t0, 1, 5, 6, 14, 15, 27, 28, 2, 4, 7, 13, 16, 26, 29, 42, 3, 8, 12, 17, 25, 30, 41, 43, 9, 11,\n\t\t18, 24, 31, 40, 44, 53, 10, 19, 23, 32, 39, 45, 52, 54, 20, 22, 33, 38, 46, 51, 55, 60, 21, 34,\n\t\t37, 47, 50, 56, 59, 61, 35, 36, 48, 49, 57, 58, 62, 63\n\t];\n\n\t/**\n\t * @internal\n\t */\n\tprivate readonly _yTable: number[];\n\n\t/**\n\t * @internal\n\t */\n\tprivate readonly _uvTable: number[];\n\n\t/**\n\t * @internal\n\t */\n\tprivate readonly _fdTblY: number[];\n\n\t/**\n\t * @internal\n\t */\n\tprivate readonly _fdTblUV: number[];\n\n\t/**\n\t * @internal\n\t */\n\tprivate _ydcHashTable: number[][] | undefined;\n\n\t/**\n\t * @internal\n\t */\n\tprivate _uVdcHashTable: number[][] | undefined;\n\n\t/**\n\t * @internal\n\t */\n\tprivate _yacHashTable: number[][] | undefined;\n\n\t/**\n\t * @internal\n\t */\n\tprivate _uVacHashTable: number[][] | undefined;\n\n\t/**\n\t * @internal\n\t */\n\tprivate readonly _bitCode: number[][];\n\n\t/**\n\t * @internal\n\t */\n\tprivate readonly _category: number[];\n\n\t/**\n\t * @internal\n\t */\n\tprivate readonly _outputFDctQuant: number[];\n\n\t/**\n\t * @internal\n\t */\n\tprivate readonly _du: number[];\n\n\t/**\n\t * @internal\n\t */\n\tprivate _byteOut: number[];\n\n\t/**\n\t * @internal\n\t */\n\tprivate _byteNew: number;\n\n\t/**\n\t * @internal\n\t */\n\tprivate _bytePos: number;\n\n\t/**\n\t * @internal\n\t */\n\tprivate readonly _ydu: number[];\n\n\t/**\n\t * @internal\n\t */\n\tprivate readonly _udu: number[];\n\n\t/**\n\t * @internal\n\t */\n\tprivate readonly _vdu: number[];\n\n\t/**\n\t * @internal\n\t */\n\tprivate readonly _rgbYuvTable: number[];\n\n\t/**\n\t * Create a new instance of JpegEncoder.\n\t */\n\tconstructor() {\n\t\tthis._yTable = Array.from({ length: 64 });\n\t\tthis._uvTable = Array.from({ length: 64 });\n\t\tthis._fdTblY = Array.from({ length: 64 });\n\t\tthis._fdTblUV = Array.from({ length: 64 });\n\n\t\tthis._bitCode = Array.from({ length: 65535 });\n\t\tthis._category = Array.from({ length: 65535 });\n\t\tthis._outputFDctQuant = Array.from({ length: 64 });\n\t\tthis._du = Array.from({ length: 64 });\n\t\tthis._byteOut = [];\n\t\tthis._byteNew = 0;\n\t\tthis._bytePos = 7;\n\n\t\tthis._ydu = Array.from({ length: 64 });\n\t\tthis._udu = Array.from({ length: 64 });\n\t\tthis._vdu = Array.from({ length: 64 });\n\t\tthis._rgbYuvTable = Array.from({ length: 2048 });\n\n\t\tthis.initHuffmanTbl();\n\t\tthis.initCategoryNumber();\n\t\tthis.initRGBYUVTable();\n\t}\n\n\t/**\n\t * Encode the image with the given quality.\n\t * @param width The width of the image to encode.\n\t * @param height The height of the image to encode.\n\t * @param imageData The data for the image.\n\t * @param quality The quality to encode the image at.\n\t * @returns The data for the encoded image.\n\t */\n\tpublic encode(width: number, height: number, imageData: Uint8Array, quality: number): Uint8Array {\n\t\tthis.setQuality(quality);\n\n\t\t// Initialize bit writer\n\t\tthis._byteOut = [];\n\t\tthis._byteNew = 0;\n\t\tthis._bytePos = 7;\n\n\t\t// Add JPEG headers\n\t\tthis.writeWord(0xffd8); // SOI\n\t\tthis.writeAPP0();\n\t\tthis.writeDQT();\n\t\tthis.writeSOF0(width, height);\n\t\tthis.writeDHT();\n\t\tthis.writeSOS();\n\n\t\t// Encode 8x8 macro blocks\n\t\tlet DCY = 0;\n\t\tlet DCU = 0;\n\t\tlet DCV = 0;\n\n\t\tthis._byteNew = 0;\n\t\tthis._bytePos = 7;\n\n\t\tconst quadWidth = width * 4;\n\n\t\tlet x;\n\t\tlet y = 0;\n\t\tlet r;\n\t\tlet g;\n\t\tlet b;\n\t\tlet start;\n\t\tlet p;\n\t\tlet col;\n\t\tlet row;\n\t\tlet pos;\n\t\twhile (y < height) {\n\t\t\tx = 0;\n\t\t\twhile (x < quadWidth) {\n\t\t\t\tstart = quadWidth * y + x;\n\n\t\t\t\tfor (pos = 0; pos < 64; pos++) {\n\t\t\t\t\trow = pos >> 3; // /8\n\t\t\t\t\tcol = (pos & 7) * 4; // %8\n\t\t\t\t\tp = start + row * quadWidth + col;\n\n\t\t\t\t\tif (y + row >= height) {\n\t\t\t\t\t\t// padding bottom\n\t\t\t\t\t\tp -= quadWidth * (y + 1 + row - height);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (x + col >= quadWidth) {\n\t\t\t\t\t\t// padding right\n\t\t\t\t\t\tp -= x + col - quadWidth + 4;\n\t\t\t\t\t}\n\n\t\t\t\t\tr = imageData[p++];\n\t\t\t\t\tg = imageData[p++];\n\t\t\t\t\tb = imageData[p];\n\n\t\t\t\t\t// use lookup table (slightly faster)\n\t\t\t\t\tthis._ydu[pos] =\n\t\t\t\t\t\t((this._rgbYuvTable[r] +\n\t\t\t\t\t\t\tthis._rgbYuvTable[Math.trunc(g + 256)] +\n\t\t\t\t\t\t\tthis._rgbYuvTable[Math.trunc(b + 512)]) >>\n\t\t\t\t\t\t\t16) -\n\t\t\t\t\t\t128;\n\t\t\t\t\tthis._udu[pos] =\n\t\t\t\t\t\t((this._rgbYuvTable[Math.trunc(r + 768)] +\n\t\t\t\t\t\t\tthis._rgbYuvTable[Math.trunc(g + 1024)] +\n\t\t\t\t\t\t\tthis._rgbYuvTable[Math.trunc(b + 1280)]) >>\n\t\t\t\t\t\t\t16) -\n\t\t\t\t\t\t128;\n\t\t\t\t\tthis._vdu[pos] =\n\t\t\t\t\t\t((this._rgbYuvTable[Math.trunc(r + 1280)] +\n\t\t\t\t\t\t\tthis._rgbYuvTable[Math.trunc(g + 1536)] +\n\t\t\t\t\t\t\tthis._rgbYuvTable[Math.trunc(b + 1792)]) >>\n\t\t\t\t\t\t\t16) -\n\t\t\t\t\t\t128;\n\t\t\t\t}\n\n\t\t\t\tif (this._ydcHashTable && this._yacHashTable) {\n\t\t\t\t\tDCY = this.processDU(\n\t\t\t\t\t\tthis._ydu,\n\t\t\t\t\t\tthis._fdTblY,\n\t\t\t\t\t\tDCY,\n\t\t\t\t\t\tthis._ydcHashTable,\n\t\t\t\t\t\tthis._yacHashTable\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tif (this._uVdcHashTable && this._uVacHashTable) {\n\t\t\t\t\tDCU = this.processDU(\n\t\t\t\t\t\tthis._udu,\n\t\t\t\t\t\tthis._fdTblUV,\n\t\t\t\t\t\tDCU,\n\t\t\t\t\t\tthis._uVdcHashTable,\n\t\t\t\t\t\tthis._uVacHashTable\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tif (this._uVdcHashTable && this._uVacHashTable) {\n\t\t\t\t\tDCV = this.processDU(\n\t\t\t\t\t\tthis._vdu,\n\t\t\t\t\t\tthis._fdTblUV,\n\t\t\t\t\t\tDCV,\n\t\t\t\t\t\tthis._uVdcHashTable,\n\t\t\t\t\t\tthis._uVacHashTable\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tx += 32;\n\t\t\t}\n\t\t\ty += 8;\n\t\t}\n\n\t\t// Do the bit alignment of the EOI marker\n\t\tif (this._bytePos >= 0) {\n\t\t\tconst fillBits = [];\n\t\t\tfillBits[1] = this._bytePos + 1;\n\t\t\tfillBits[0] = (1 << (this._bytePos + 1)) - 1;\n\t\t\tthis.writeBits(fillBits);\n\t\t}\n\n\t\tthis.writeWord(0xffd9); // EOI\n\n\t\treturn new Uint8Array(this._byteOut);\n\t}\n\n\t/**\n\t * Set the JPEG quantization quality.\n\t * @param quality The quality value to apply.\n\t * @throws GeneralError if the quality is outside the supported range.\n\t * @internal\n\t */\n\tprivate setQuality(quality: number): void {\n\t\tif (quality <= 0 || quality > 100) {\n\t\t\tthrow new GeneralError(JpegEncoder.CLASS_NAME, \"invalidQuality\", { value: quality });\n\t\t}\n\n\t\tlet sf;\n\t\tif (quality < 50) {\n\t\t\tsf = Math.floor(5000 / quality);\n\t\t} else {\n\t\t\tsf = Math.floor(200 - quality * 2);\n\t\t}\n\n\t\tthis.initQuantTables(sf);\n\t}\n\n\t/**\n\t * Initialize the quantization tables for the supplied scale factor.\n\t * @param sf The quantization scale factor.\n\t * @internal\n\t */\n\tprivate initQuantTables(sf: number): void {\n\t\tconst YQT = [\n\t\t\t16, 11, 10, 16, 24, 40, 51, 61, 12, 12, 14, 19, 26, 58, 60, 55, 14, 13, 16, 24, 40, 57, 69,\n\t\t\t56, 14, 17, 22, 29, 51, 87, 80, 62, 18, 22, 37, 56, 68, 109, 103, 77, 24, 35, 55, 64, 81, 104,\n\t\t\t113, 92, 49, 64, 78, 87, 103, 121, 120, 101, 72, 92, 95, 98, 112, 100, 103, 99\n\t\t];\n\n\t\tfor (let i = 0; i < 64; i++) {\n\t\t\tlet t = Math.floor((YQT[i] * sf + 50) / 100);\n\t\t\tif (t < 1) {\n\t\t\t\tt = 1;\n\t\t\t} else if (t > 255) {\n\t\t\t\tt = 255;\n\t\t\t}\n\t\t\tthis._yTable[JpegEncoder._SIG_ZAG[i]] = t;\n\t\t}\n\t\tconst UVQT = [\n\t\t\t17, 18, 24, 47, 99, 99, 99, 99, 18, 21, 26, 66, 99, 99, 99, 99, 24, 26, 56, 99, 99, 99, 99,\n\t\t\t99, 47, 66, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99,\n\t\t\t99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99\n\t\t];\n\t\tfor (let j = 0; j < 64; j++) {\n\t\t\tlet u = Math.floor((UVQT[j] * sf + 50) / 100);\n\t\t\tif (u < 1) {\n\t\t\t\tu = 1;\n\t\t\t} else if (u > 255) {\n\t\t\t\tu = 255;\n\t\t\t}\n\t\t\tthis._uvTable[JpegEncoder._SIG_ZAG[j]] = u;\n\t\t}\n\t\tconst aAsf = [1, 1.387039845, 1.306562965, 1.175875602, 1, 0.785694958, 0.5411961, 0.275899379];\n\t\tlet k = 0;\n\t\tfor (let row = 0; row < 8; row++) {\n\t\t\tfor (let col = 0; col < 8; col++) {\n\t\t\t\tthis._fdTblY[k] = 1 / (this._yTable[JpegEncoder._SIG_ZAG[k]] * aAsf[row] * aAsf[col] * 8);\n\t\t\t\tthis._fdTblUV[k] = 1 / (this._uvTable[JpegEncoder._SIG_ZAG[k]] * aAsf[row] * aAsf[col] * 8);\n\t\t\t\tk++;\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Build a Huffman lookup table from the supplied code counts and values.\n\t * @param nrCodes The number of codes for each bit length.\n\t * @param stdTable The symbol values to assign in code order.\n\t * @returns The generated Huffman table.\n\t * @internal\n\t */\n\tprivate computeHuffmanTbl(nrCodes: number[], stdTable: number[]): number[][] {\n\t\tlet codeValue = 0;\n\t\tlet posInTable = 0;\n\t\tconst HT: number[][] = [];\n\t\tfor (let k = 1; k <= 16; k++) {\n\t\t\tfor (let j = 1; j <= nrCodes[k]; j++) {\n\t\t\t\tHT[stdTable[posInTable]] = [];\n\t\t\t\tHT[stdTable[posInTable]][0] = codeValue;\n\t\t\t\tHT[stdTable[posInTable]][1] = k;\n\t\t\t\tposInTable++;\n\t\t\t\tcodeValue++;\n\t\t\t}\n\t\t\tcodeValue *= 2;\n\t\t}\n\t\treturn HT;\n\t}\n\n\t/**\n\t * Initialize the standard JPEG Huffman tables used during encoding.\n\t * @internal\n\t */\n\tprivate initHuffmanTbl(): void {\n\t\tthis._ydcHashTable = this.computeHuffmanTbl(\n\t\t\tJpegEncoder._STD_DC_LUMINANCE_NR_CODES,\n\t\t\tJpegEncoder._STD_DC_LUMINANCE_VALUES\n\t\t);\n\t\tthis._uVdcHashTable = this.computeHuffmanTbl(\n\t\t\tJpegEncoder._STD_DC_CHROMINANCE_NR_CODES,\n\t\t\tJpegEncoder._STD_DC_CHROMINANCE_VALUES\n\t\t);\n\t\tthis._yacHashTable = this.computeHuffmanTbl(\n\t\t\tJpegEncoder._STD_AC_LUMINANCE_NR_CODES,\n\t\t\tJpegEncoder._STD_AC_LUMINANCE_VALUES\n\t\t);\n\t\tthis._uVacHashTable = this.computeHuffmanTbl(\n\t\t\tJpegEncoder._STD_AC_CHROMINANCE_NR_CODES,\n\t\t\tJpegEncoder._STD_AC_CHROMINANCE_VALUES\n\t\t);\n\t}\n\n\t/**\n\t * Initialize the category and bitcode lookup tables for coefficient encoding.\n\t * @internal\n\t */\n\tprivate initCategoryNumber(): void {\n\t\tlet nrLower = 1;\n\t\tlet nrUpper = 2;\n\t\tfor (let cat = 1; cat <= 15; cat++) {\n\t\t\t// Positive numbers\n\t\t\tfor (let nr = nrLower; nr < nrUpper; nr++) {\n\t\t\t\tthis._category[32767 + nr] = cat;\n\t\t\t\tthis._bitCode[32767 + nr] = [];\n\t\t\t\tthis._bitCode[32767 + nr][1] = cat;\n\t\t\t\tthis._bitCode[32767 + nr][0] = nr;\n\t\t\t}\n\t\t\t// Negative numbers\n\t\t\tfor (let nrNeg = -(nrUpper - 1); nrNeg <= -nrLower; nrNeg++) {\n\t\t\t\tthis._category[32767 + nrNeg] = cat;\n\t\t\t\tthis._bitCode[32767 + nrNeg] = [];\n\t\t\t\tthis._bitCode[32767 + nrNeg][1] = cat;\n\t\t\t\tthis._bitCode[32767 + nrNeg][0] = nrUpper - 1 + nrNeg;\n\t\t\t}\n\t\t\tnrLower <<= 1;\n\t\t\tnrUpper <<= 1;\n\t\t}\n\t}\n\n\t/**\n\t * Initialize the RGB to YUV conversion lookup table.\n\t * @internal\n\t */\n\tprivate initRGBYUVTable(): void {\n\t\tfor (let i = 0; i < 256; i++) {\n\t\t\tthis._rgbYuvTable[i] = 19595 * i;\n\t\t\tthis._rgbYuvTable[Math.trunc(i + 256)] = 38470 * i;\n\t\t\tthis._rgbYuvTable[Math.trunc(i + 512)] = 7471 * i + 0x8000;\n\t\t\tthis._rgbYuvTable[Math.trunc(i + 768)] = -11059 * i;\n\t\t\tthis._rgbYuvTable[Math.trunc(i + 1024)] = -21709 * i;\n\t\t\tthis._rgbYuvTable[Math.trunc(i + 1280)] = 32768 * i + 0x807fff;\n\t\t\tthis._rgbYuvTable[Math.trunc(i + 1536)] = -27439 * i;\n\t\t\tthis._rgbYuvTable[Math.trunc(i + 1792)] = -5329 * i;\n\t\t}\n\t}\n\n\t/**\n\t * Write a variable-length bit sequence into the JPEG output buffer.\n\t * @param bs The bit value and bit length pair to write.\n\t * @internal\n\t */\n\tprivate writeBits(bs: number[]): void {\n\t\tconst value = bs[0];\n\t\tlet posVal = bs[1] - 1;\n\t\twhile (posVal >= 0) {\n\t\t\tif (value & (1 << posVal)) {\n\t\t\t\tthis._byteNew |= 1 << this._bytePos;\n\t\t\t}\n\t\t\tposVal--;\n\t\t\tthis._bytePos--;\n\t\t\tif (this._bytePos < 0) {\n\t\t\t\tif (this._byteNew === 0xff) {\n\t\t\t\t\tthis.writeByte(0xff);\n\t\t\t\t\tthis.writeByte(0);\n\t\t\t\t} else {\n\t\t\t\t\tthis.writeByte(this._byteNew);\n\t\t\t\t}\n\t\t\t\tthis._bytePos = 7;\n\t\t\t\tthis._byteNew = 0;\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Write a single byte to the JPEG output buffer.\n\t * @param value The byte value to write.\n\t * @internal\n\t */\n\tprivate writeByte(value: number): void {\n\t\tthis._byteOut.push(value);\n\t}\n\n\t/**\n\t * Write a 16-bit word to the JPEG output buffer.\n\t * @param value The word value to write.\n\t * @internal\n\t */\n\tprivate writeWord(value: number): void {\n\t\tthis.writeByte((value >> 8) & 0xff);\n\t\tthis.writeByte(value & 0xff);\n\t}\n\n\t/**\n\t * Apply the forward DCT and quantization table to an 8x8 block.\n\t * @param data The source coefficient block.\n\t * @param fdTbl The quantization scaling table.\n\t * @returns The quantized coefficient block.\n\t * @internal\n\t */\n\tprivate fDCTQuant(data: number[], fdTbl: number[]): number[] {\n\t\tlet d0;\n\t\tlet d1;\n\t\tlet d2;\n\t\tlet d3;\n\t\tlet d4;\n\t\tlet d5;\n\t\tlet d6;\n\t\tlet d7;\n\t\t/* Pass 1: process rows. */\n\t\tlet dataOff = 0;\n\t\tlet i;\n\t\tconst I8 = 8;\n\t\tconst I64 = 64;\n\t\tfor (i = 0; i < I8; ++i) {\n\t\t\td0 = data[dataOff];\n\t\t\td1 = data[dataOff + 1];\n\t\t\td2 = data[dataOff + 2];\n\t\t\td3 = data[dataOff + 3];\n\t\t\td4 = data[dataOff + 4];\n\t\t\td5 = data[dataOff + 5];\n\t\t\td6 = data[dataOff + 6];\n\t\t\td7 = data[dataOff + 7];\n\n\t\t\tconst tmp0 = d0 + d7;\n\t\t\tconst tmp7 = d0 - d7;\n\t\t\tconst tmp1 = d1 + d6;\n\t\t\tconst tmp6 = d1 - d6;\n\t\t\tconst tmp2 = d2 + d5;\n\t\t\tconst tmp5 = d2 - d5;\n\t\t\tconst tmp3 = d3 + d4;\n\t\t\tconst tmp4 = d3 - d4;\n\n\t\t\t/* Even part */\n\t\t\tlet tmp10 = tmp0 + tmp3; /* phase 2 */\n\t\t\tconst tmp13 = tmp0 - tmp3;\n\t\t\tlet tmp11 = tmp1 + tmp2;\n\t\t\tlet tmp12 = tmp1 - tmp2;\n\n\t\t\tdata[dataOff] = tmp10 + tmp11; /* phase 3 */\n\t\t\tdata[dataOff + 4] = tmp10 - tmp11;\n\n\t\t\tconst z1 = (tmp12 + tmp13) * 0.707106781; /* c4 */\n\t\t\tdata[dataOff + 2] = tmp13 + z1; /* phase 5 */\n\t\t\tdata[dataOff + 6] = tmp13 - z1;\n\n\t\t\t/* Odd part */\n\t\t\ttmp10 = tmp4 + tmp5; /* phase 2 */\n\t\t\ttmp11 = tmp5 + tmp6;\n\t\t\ttmp12 = tmp6 + tmp7;\n\n\t\t\t/* The rotator is modified from fig 4-8 to avoid extra negations. */\n\t\t\tconst z5 = (tmp10 - tmp12) * 0.382683433; /* c6 */\n\t\t\tconst z2 = 0.5411961 * tmp10 + z5; /* c2-c6 */\n\t\t\tconst z4 = 1.306562965 * tmp12 + z5; /* c2+c6 */\n\t\t\tconst z3 = tmp11 * 0.707106781; /* c4 */\n\n\t\t\tconst z11 = tmp7 + z3; /* phase 5 */\n\t\t\tconst z13 = tmp7 - z3;\n\n\t\t\tdata[dataOff + 5] = z13 + z2; /* phase 6 */\n\t\t\tdata[dataOff + 3] = z13 - z2;\n\t\t\tdata[dataOff + 1] = z11 + z4;\n\t\t\tdata[dataOff + 7] = z11 - z4;\n\n\t\t\tdataOff += 8; /* advance pointer to next row */\n\t\t}\n\n\t\t/* Pass 2: process columns. */\n\t\tdataOff = 0;\n\t\tfor (i = 0; i < I8; ++i) {\n\t\t\td0 = data[dataOff];\n\t\t\td1 = data[dataOff + 8];\n\t\t\td2 = data[dataOff + 16];\n\t\t\td3 = data[dataOff + 24];\n\t\t\td4 = data[dataOff + 32];\n\t\t\td5 = data[dataOff + 40];\n\t\t\td6 = data[dataOff + 48];\n\t\t\td7 = data[dataOff + 56];\n\n\t\t\tconst tmp0p2 = d0 + d7;\n\t\t\tconst tmp7p2 = d0 - d7;\n\t\t\tconst tmp1p2 = d1 + d6;\n\t\t\tconst tmp6p2 = d1 - d6;\n\t\t\tconst tmp2p2 = d2 + d5;\n\t\t\tconst tmp5p2 = d2 - d5;\n\t\t\tconst tmp3p2 = d3 + d4;\n\t\t\tconst tmp4p2 = d3 - d4;\n\n\t\t\t/* Even part */\n\t\t\tlet tmp10p2 = tmp0p2 + tmp3p2; /* phase 2 */\n\t\t\tconst tmp13p2 = tmp0p2 - tmp3p2;\n\t\t\tlet tmp11p2 = tmp1p2 + tmp2p2;\n\t\t\tlet tmp12p2 = tmp1p2 - tmp2p2;\n\n\t\t\tdata[dataOff] = tmp10p2 + tmp11p2; /* phase 3 */\n\t\t\tdata[dataOff + 32] = tmp10p2 - tmp11p2;\n\n\t\t\tconst z1p2 = (tmp12p2 + tmp13p2) * 0.707106781; /* c4 */\n\t\t\tdata[dataOff + 16] = tmp13p2 + z1p2; /* phase 5 */\n\t\t\tdata[dataOff + 48] = tmp13p2 - z1p2;\n\n\t\t\t/* Odd part */\n\t\t\ttmp10p2 = tmp4p2 + tmp5p2; /* phase 2 */\n\t\t\ttmp11p2 = tmp5p2 + tmp6p2;\n\t\t\ttmp12p2 = tmp6p2 + tmp7p2;\n\n\t\t\t/* The rotator is modified from fig 4-8 to avoid extra negations. */\n\t\t\tconst z5p2 = (tmp10p2 - tmp12p2) * 0.382683433; /* c6 */\n\t\t\tconst z2p2 = 0.5411961 * tmp10p2 + z5p2; /* c2-c6 */\n\t\t\tconst z4p2 = 1.306562965 * tmp12p2 + z5p2; /* c2+c6 */\n\t\t\tconst z3p2 = tmp11p2 * 0.707106781; /* c4 */\n\n\t\t\tconst z11p2 = tmp7p2 + z3p2; /* phase 5 */\n\t\t\tconst z13p2 = tmp7p2 - z3p2;\n\n\t\t\tdata[dataOff + 40] = z13p2 + z2p2; /* phase 6 */\n\t\t\tdata[dataOff + 24] = z13p2 - z2p2;\n\t\t\tdata[dataOff + 8] = z11p2 + z4p2;\n\t\t\tdata[dataOff + 56] = z11p2 - z4p2;\n\n\t\t\tdataOff++; /* advance pointer to next column */\n\t\t}\n\n\t\t// Quantize/descale the coefficients\n\t\tlet fDCTQuant;\n\t\tfor (i = 0; i < I64; ++i) {\n\t\t\t// Apply the quantization and scaling factor & Round to nearest integer\n\t\t\tfDCTQuant = data[i] * fdTbl[i];\n\t\t\tthis._outputFDctQuant[i] =\n\t\t\t\tfDCTQuant > 0 ? Math.trunc(fDCTQuant + 0.5) : Math.trunc(fDCTQuant - 0.5);\n\t\t}\n\t\treturn this._outputFDctQuant;\n\t}\n\n\t/**\n\t * Write the JFIF APP0 segment.\n\t * @internal\n\t */\n\tprivate writeAPP0(): void {\n\t\tthis.writeWord(0xffe0); // marker\n\t\tthis.writeWord(16); // length\n\t\tthis.writeByte(0x4a); // J\n\t\tthis.writeByte(0x46); // F\n\t\tthis.writeByte(0x49); // I\n\t\tthis.writeByte(0x46); // F\n\t\t// cspell:disable-next-line\n\t\tthis.writeByte(0); // = \"JFIF\",'\\0'\n\t\tthis.writeByte(1); // version hi\n\t\tthis.writeByte(1); // version lo\n\t\tthis.writeByte(0); // xy units\n\t\tthis.writeWord(1); // x density\n\t\tthis.writeWord(1); // y density\n\t\tthis.writeByte(0); // thumb n width\n\t\tthis.writeByte(0); // thumb n height\n\t}\n\n\t/**\n\t * Write the baseline frame header.\n\t * @param width The image width.\n\t * @param height The image height.\n\t * @internal\n\t */\n\tprivate writeSOF0(width: number, height: number): void {\n\t\tthis.writeWord(0xffc0); // marker\n\t\tthis.writeWord(17); // length, true color YUV JPG\n\t\tthis.writeByte(8); // precision\n\t\tthis.writeWord(height);\n\t\tthis.writeWord(width);\n\t\tthis.writeByte(3); // nr of components\n\t\tthis.writeByte(1); // IdY\n\t\tthis.writeByte(0x11); // HVY\n\t\tthis.writeByte(0); // QTY\n\t\tthis.writeByte(2); // IdU\n\t\tthis.writeByte(0x11); // HVU\n\t\tthis.writeByte(1); // QTU\n\t\tthis.writeByte(3); // IdV\n\t\tthis.writeByte(0x11); // HVV\n\t\tthis.writeByte(1); // QTV\n\t}\n\n\t/**\n\t * Write the quantization tables segment.\n\t * @internal\n\t */\n\tprivate writeDQT(): void {\n\t\tthis.writeWord(0xffdb); // marker\n\t\tthis.writeWord(132); // length\n\t\tthis.writeByte(0);\n\t\tfor (let i = 0; i < 64; i++) {\n\t\t\tthis.writeByte(this._yTable[i]);\n\t\t}\n\t\tthis.writeByte(1);\n\t\tfor (let j = 0; j < 64; j++) {\n\t\t\tthis.writeByte(this._uvTable[j]);\n\t\t}\n\t}\n\n\t/**\n\t * Write the Huffman tables segment.\n\t * @internal\n\t */\n\tprivate writeDHT(): void {\n\t\tthis.writeWord(0xffc4); // marker\n\t\tthis.writeWord(0x01a2); // length\n\n\t\tthis.writeByte(0); // HTYDc info\n\t\tfor (let i = 0; i < 16; i++) {\n\t\t\tthis.writeByte(JpegEncoder._STD_DC_LUMINANCE_NR_CODES[i + 1]);\n\t\t}\n\t\tfor (let j = 0; j <= 11; j++) {\n\t\t\tthis.writeByte(JpegEncoder._STD_DC_LUMINANCE_VALUES[j]);\n\t\t}\n\n\t\tthis.writeByte(0x10); // HTYAc info\n\t\tfor (let k = 0; k < 16; k++) {\n\t\t\tthis.writeByte(JpegEncoder._STD_AC_LUMINANCE_NR_CODES[k + 1]);\n\t\t}\n\t\tfor (let l = 0; l <= 161; l++) {\n\t\t\tthis.writeByte(JpegEncoder._STD_AC_LUMINANCE_VALUES[l]);\n\t\t}\n\n\t\tthis.writeByte(1); // HTUDc info\n\t\tfor (let m = 0; m < 16; m++) {\n\t\t\tthis.writeByte(JpegEncoder._STD_DC_CHROMINANCE_NR_CODES[m + 1]);\n\t\t}\n\t\tfor (let n = 0; n <= 11; n++) {\n\t\t\tthis.writeByte(JpegEncoder._STD_DC_CHROMINANCE_VALUES[n]);\n\t\t}\n\n\t\tthis.writeByte(0x11); // HTUAc info\n\t\tfor (let o = 0; o < 16; o++) {\n\t\t\tthis.writeByte(JpegEncoder._STD_AC_CHROMINANCE_NR_CODES[o + 1]);\n\t\t}\n\t\tfor (let p = 0; p <= 161; p++) {\n\t\t\tthis.writeByte(JpegEncoder._STD_AC_CHROMINANCE_VALUES[p]);\n\t\t}\n\t}\n\n\t/**\n\t * Write the start-of-scan segment.\n\t * @internal\n\t */\n\tprivate writeSOS(): void {\n\t\tthis.writeWord(0xffda); // marker\n\t\tthis.writeWord(12); // length\n\t\tthis.writeByte(3); // nr of components\n\t\tthis.writeByte(1); // IdY\n\t\tthis.writeByte(0); // HTY\n\t\tthis.writeByte(2); // IdU\n\t\tthis.writeByte(0x11); // HTU\n\t\tthis.writeByte(3); // IdV\n\t\tthis.writeByte(0x11); // HTV\n\t\tthis.writeByte(0); // Ss\n\t\tthis.writeByte(0x3f); // Se\n\t\tthis.writeByte(0); // Bf\n\t}\n\n\t/**\n\t * Encode a single 8x8 data unit.\n\t * @param cdu The coefficient data unit to encode.\n\t * @param fdTbl The quantization scaling table for the component.\n\t * @param passedDC The previous DC coefficient.\n\t * @param htdc The Huffman table for DC coefficients.\n\t * @param htac The Huffman table for AC coefficients.\n\t * @returns The encoded DC coefficient for the next block.\n\t * @internal\n\t */\n\tprivate processDU(\n\t\tcdu: number[],\n\t\tfdTbl: number[],\n\t\tpassedDC: number,\n\t\thtdc: number[][],\n\t\thtac: number[][]\n\t): number {\n\t\tlet DC = passedDC;\n\t\tconst EOB = htac[0x00];\n\t\tconst m16zeroes = htac[0xf0];\n\t\tlet pos;\n\t\tconst I16 = 16;\n\t\tconst I63 = 63;\n\t\tconst I64 = 64;\n\t\tconst DU_DCT = this.fDCTQuant(cdu, fdTbl);\n\t\t// ZigZag reorder\n\t\tfor (let j = 0; j < I64; ++j) {\n\t\t\tthis._du[JpegEncoder._SIG_ZAG[j]] = DU_DCT[j];\n\t\t}\n\t\tconst diff = this._du[0] - DC;\n\t\tDC = this._du[0];\n\t\t// Encode DC\n\t\tif (diff === 0) {\n\t\t\tthis.writeBits(htdc[0]); // Diff might be 0\n\t\t} else {\n\t\t\tpos = 32767 + diff;\n\t\t\tthis.writeBits(htdc[this._category[pos]]);\n\t\t\tthis.writeBits(this._bitCode[pos]);\n\t\t}\n\t\t// Encode ACs\n\t\tlet end0pos = 63; // was const... which is crazy\n\t\tfor (; end0pos > 0 && this._du[end0pos] === 0; end0pos--) {}\n\t\t// end0pos = first element in reverse order !=0\n\t\tif (end0pos === 0) {\n\t\t\tthis.writeBits(EOB);\n\t\t\treturn DC;\n\t\t}\n\t\tlet i = 1;\n\t\tlet lng;\n\t\twhile (i <= end0pos) {\n\t\t\tconst startPos = i;\n\t\t\tfor (; this._du[i] === 0 && i <= end0pos; ++i) {}\n\t\t\tlet nrZeroes = i - startPos;\n\t\t\tif (nrZeroes >= I16) {\n\t\t\t\tlng = nrZeroes >> 4;\n\t\t\t\tfor (let nrMarker = 1; nrMarker <= lng; ++nrMarker) {\n\t\t\t\t\tthis.writeBits(m16zeroes);\n\t\t\t\t}\n\t\t\t\tnrZeroes &= 0xf;\n\t\t\t}\n\t\t\tpos = 32767 + this._du[i];\n\t\t\tthis.writeBits(htac[(nrZeroes << 4) + this._category[pos]]);\n\t\t\tthis.writeBits(this._bitCode[pos]);\n\t\t\ti++;\n\t\t}\n\t\tif (end0pos !== I63) {\n\t\t\tthis.writeBits(EOB);\n\t\t}\n\t\treturn DC;\n\t}\n}\n"]}
|
|
@@ -161,6 +161,13 @@ export class PngEncoder {
|
|
|
161
161
|
return new Uint8Array(data.buffer.slice(0, offset));
|
|
162
162
|
}
|
|
163
163
|
/**
|
|
164
|
+
* Compress the supplied frames into PNG-ready image data.
|
|
165
|
+
* @param buffers The source frame buffers.
|
|
166
|
+
* @param w The image width.
|
|
167
|
+
* @param h The image height.
|
|
168
|
+
* @param ps The palette size target.
|
|
169
|
+
* @param forbidPlte True if palette output must be avoided.
|
|
170
|
+
* @returns The compressed image data and frame metadata.
|
|
164
171
|
* @internal
|
|
165
172
|
*/
|
|
166
173
|
async compressPNG(buffers, w, h, ps, forbidPlte) {
|
|
@@ -177,6 +184,14 @@ export class PngEncoder {
|
|
|
177
184
|
return out;
|
|
178
185
|
}
|
|
179
186
|
/**
|
|
187
|
+
* Prepare frame data, colour type, and palette information for PNG encoding.
|
|
188
|
+
* @param inBuffers The source frame buffers.
|
|
189
|
+
* @param w The image width.
|
|
190
|
+
* @param h The image height.
|
|
191
|
+
* @param inPs The requested palette size.
|
|
192
|
+
* @param forGIF Whether the output is being prepared for GIF-style constraints.
|
|
193
|
+
* @param forbidPlte True if palette output must be avoided.
|
|
194
|
+
* @returns The processed frame data and PNG metadata.
|
|
180
195
|
* @internal
|
|
181
196
|
*/
|
|
182
197
|
compress(inBuffers, w, h, inPs, forGIF, forbidPlte) {
|
|
@@ -391,6 +406,13 @@ export class PngEncoder {
|
|
|
391
406
|
return { cType, depth, plte: pLte, gotAlpha, frames };
|
|
392
407
|
}
|
|
393
408
|
/**
|
|
409
|
+
* Apply PNG filters and choose the smallest compressed result.
|
|
410
|
+
* @param img The raw frame image data.
|
|
411
|
+
* @param h The frame height.
|
|
412
|
+
* @param bpp The bytes per pixel.
|
|
413
|
+
* @param bpl The bytes per line.
|
|
414
|
+
* @param data The working filter buffer.
|
|
415
|
+
* @returns The deflated filtered image data.
|
|
394
416
|
* @internal
|
|
395
417
|
*/
|
|
396
418
|
async filterZero(img, h, bpp, bpl, data) {
|
|
@@ -419,6 +441,13 @@ export class PngEncoder {
|
|
|
419
441
|
return fls[ti];
|
|
420
442
|
}
|
|
421
443
|
/**
|
|
444
|
+
* Write one filtered scanline into the working PNG buffer.
|
|
445
|
+
* @param data The output buffer that receives the filtered data.
|
|
446
|
+
* @param img The source image bytes.
|
|
447
|
+
* @param y The scanline index.
|
|
448
|
+
* @param bpl The bytes per line.
|
|
449
|
+
* @param bpp The bytes per pixel.
|
|
450
|
+
* @param type The PNG filter type to apply.
|
|
422
451
|
* @internal
|
|
423
452
|
*/
|
|
424
453
|
filterLine(data, img, y, bpl, bpp, type) {
|
|
@@ -488,6 +517,11 @@ export class PngEncoder {
|
|
|
488
517
|
}
|
|
489
518
|
}
|
|
490
519
|
/**
|
|
520
|
+
* Calculate the Paeth predictor for PNG filtering.
|
|
521
|
+
* @param a The left value.
|
|
522
|
+
* @param b The above value.
|
|
523
|
+
* @param c The upper-left value.
|
|
524
|
+
* @returns The predicted byte value.
|
|
491
525
|
* @internal
|
|
492
526
|
*/
|
|
493
527
|
paeth(a, b, c) {
|
|
@@ -504,6 +538,10 @@ export class PngEncoder {
|
|
|
504
538
|
return c;
|
|
505
539
|
}
|
|
506
540
|
/**
|
|
541
|
+
* Write an ASCII string into the output buffer.
|
|
542
|
+
* @param data The destination buffer.
|
|
543
|
+
* @param p The offset to start writing at.
|
|
544
|
+
* @param s The ASCII string to write.
|
|
507
545
|
* @internal
|
|
508
546
|
*/
|
|
509
547
|
writeASCII(data, p, s) {
|
|
@@ -512,6 +550,10 @@ export class PngEncoder {
|
|
|
512
550
|
}
|
|
513
551
|
}
|
|
514
552
|
/**
|
|
553
|
+
* Write a 32-bit unsigned integer into the output buffer.
|
|
554
|
+
* @param buff The destination buffer.
|
|
555
|
+
* @param p The offset to write at.
|
|
556
|
+
* @param n The value to write.
|
|
515
557
|
* @internal
|
|
516
558
|
*/
|
|
517
559
|
writeUint(buff, p, n) {
|
|
@@ -521,6 +563,10 @@ export class PngEncoder {
|
|
|
521
563
|
buff[p + 3] = n & 255;
|
|
522
564
|
}
|
|
523
565
|
/**
|
|
566
|
+
* Write a 16-bit unsigned integer into the output buffer.
|
|
567
|
+
* @param buff The destination buffer.
|
|
568
|
+
* @param p The offset to write at.
|
|
569
|
+
* @param n The value to write.
|
|
524
570
|
* @internal
|
|
525
571
|
*/
|
|
526
572
|
writeUshort(buff, p, n) {
|
|
@@ -528,6 +574,17 @@ export class PngEncoder {
|
|
|
528
574
|
buff[p + 1] = n & 255;
|
|
529
575
|
}
|
|
530
576
|
/**
|
|
577
|
+
* Copy or blend a tile of RGBA pixels into a target image.
|
|
578
|
+
* @param sb The source buffer.
|
|
579
|
+
* @param sw The source width.
|
|
580
|
+
* @param sh The source height.
|
|
581
|
+
* @param tb The target buffer.
|
|
582
|
+
* @param tw The target width.
|
|
583
|
+
* @param th The target height.
|
|
584
|
+
* @param xOffset The horizontal offset between the source and target.
|
|
585
|
+
* @param yOffset The vertical offset between the source and target.
|
|
586
|
+
* @param mode The copy or blend mode.
|
|
587
|
+
* @returns True if the requested operation succeeded; otherwise, false.
|
|
531
588
|
* @internal
|
|
532
589
|
*/
|
|
533
590
|
copyTile(sb, sw, sh, tb, tw, th, xOffset, yOffset, mode) {
|
|
@@ -613,12 +670,23 @@ export class PngEncoder {
|
|
|
613
670
|
return true;
|
|
614
671
|
}
|
|
615
672
|
/**
|
|
673
|
+
* Calculate the CRC for a slice of the buffer.
|
|
674
|
+
* @param b The source buffer.
|
|
675
|
+
* @param o The slice offset.
|
|
676
|
+
* @param l The slice length.
|
|
677
|
+
* @returns The computed CRC value.
|
|
616
678
|
* @internal
|
|
617
679
|
*/
|
|
618
680
|
crc(b, o, l) {
|
|
619
681
|
return this.crcUpdate(0xffffffff, b, o, l) ^ 0xffffffff;
|
|
620
682
|
}
|
|
621
683
|
/**
|
|
684
|
+
* Update a CRC value with additional bytes.
|
|
685
|
+
* @param c The current CRC accumulator.
|
|
686
|
+
* @param buf The source buffer.
|
|
687
|
+
* @param off The offset to start reading from.
|
|
688
|
+
* @param len The number of bytes to process.
|
|
689
|
+
* @returns The updated CRC value.
|
|
622
690
|
* @internal
|
|
623
691
|
*/
|
|
624
692
|
crcUpdate(c, buf, off, len) {
|
|
@@ -630,6 +698,8 @@ export class PngEncoder {
|
|
|
630
698
|
return localC;
|
|
631
699
|
}
|
|
632
700
|
/**
|
|
701
|
+
* Build the PNG CRC lookup table.
|
|
702
|
+
* @returns The CRC lookup table.
|
|
633
703
|
* @internal
|
|
634
704
|
*/
|
|
635
705
|
crcTable() {
|
|
@@ -649,6 +719,11 @@ export class PngEncoder {
|
|
|
649
719
|
return tab;
|
|
650
720
|
}
|
|
651
721
|
/**
|
|
722
|
+
* Quantize the supplied frames to a reduced palette.
|
|
723
|
+
* @param buffers The source frame buffers.
|
|
724
|
+
* @param ps The target palette size.
|
|
725
|
+
* @param roundAlpha Whether alpha values should be rounded to binary transparency.
|
|
726
|
+
* @returns The quantized frame buffers and palette leaf nodes.
|
|
652
727
|
* @internal
|
|
653
728
|
*/
|
|
654
729
|
quantize(buffers, ps, roundAlpha) {
|
|
@@ -756,6 +831,11 @@ export class PngEncoder {
|
|
|
756
831
|
return { buffers: outBuffers, plte: leafs };
|
|
757
832
|
}
|
|
758
833
|
/**
|
|
834
|
+
* Gather covariance and mean statistics for a range of RGBA pixels.
|
|
835
|
+
* @param nImg The source pixel buffer.
|
|
836
|
+
* @param i0 The inclusive start offset.
|
|
837
|
+
* @param i1 The exclusive end offset.
|
|
838
|
+
* @returns The accumulated statistics for the range.
|
|
759
839
|
* @internal
|
|
760
840
|
*/
|
|
761
841
|
quantizeStats(nImg, i0, i1) {
|
|
@@ -791,6 +871,12 @@ export class PngEncoder {
|
|
|
791
871
|
return { R, m, N };
|
|
792
872
|
}
|
|
793
873
|
/**
|
|
874
|
+
* Derive quantization metrics from accumulated colour statistics.
|
|
875
|
+
* @param stats The accumulated statistics.
|
|
876
|
+
* @param stats.R The covariance accumulator matrix.
|
|
877
|
+
* @param stats.m The colour channel sums.
|
|
878
|
+
* @param stats.N The number of pixels in the sample.
|
|
879
|
+
* @returns The derived quantization metrics.
|
|
794
880
|
* @internal
|
|
795
881
|
*/
|
|
796
882
|
quantizeEStats(stats) {
|
|
@@ -853,6 +939,15 @@ export class PngEncoder {
|
|
|
853
939
|
};
|
|
854
940
|
}
|
|
855
941
|
/**
|
|
942
|
+
* Measure the signed distance of a colour sample from the split plane.
|
|
943
|
+
* @param est The split estimator.
|
|
944
|
+
* @param est.e The split plane normal vector.
|
|
945
|
+
* @param est.eMq The split plane offset.
|
|
946
|
+
* @param r The red channel value.
|
|
947
|
+
* @param g The green channel value.
|
|
948
|
+
* @param b The blue channel value.
|
|
949
|
+
* @param a The alpha channel value.
|
|
950
|
+
* @returns The signed distance from the split plane.
|
|
856
951
|
* @internal
|
|
857
952
|
*/
|
|
858
953
|
quantizePlaneDst(est, r, g, b, a) {
|
|
@@ -860,6 +955,14 @@ export class PngEncoder {
|
|
|
860
955
|
return e[0] * r + e[1] * g + e[2] * b + e[3] * a - est.eMq;
|
|
861
956
|
}
|
|
862
957
|
/**
|
|
958
|
+
* Partition pixels in-place around the current split plane.
|
|
959
|
+
* @param nImg The source pixel buffer.
|
|
960
|
+
* @param nImg32 The same pixel buffer viewed as 32-bit values.
|
|
961
|
+
* @param i0in The inclusive start offset.
|
|
962
|
+
* @param i1in The exclusive end offset.
|
|
963
|
+
* @param e The split plane normal vector.
|
|
964
|
+
* @param eMq The split plane offset.
|
|
965
|
+
* @returns The split point between the two partitions.
|
|
863
966
|
* @internal
|
|
864
967
|
*/
|
|
865
968
|
quantizeSplitPixels(nImg, nImg32, i0in, i1in, e, eMq) {
|
|
@@ -887,12 +990,21 @@ export class PngEncoder {
|
|
|
887
990
|
return i0 + 4;
|
|
888
991
|
}
|
|
889
992
|
/**
|
|
993
|
+
* Calculate the dot product between one RGBA pixel and a four-element vector.
|
|
994
|
+
* @param nImg The source pixel buffer.
|
|
995
|
+
* @param i The pixel offset.
|
|
996
|
+
* @param e The four-element vector.
|
|
997
|
+
* @returns The dot product value.
|
|
890
998
|
* @internal
|
|
891
999
|
*/
|
|
892
1000
|
quantizeVecDot(nImg, i, e) {
|
|
893
1001
|
return nImg[i] * e[0] + nImg[i + 1] * e[1] + nImg[i + 2] * e[2] + nImg[i + 3] * e[3];
|
|
894
1002
|
}
|
|
895
1003
|
/**
|
|
1004
|
+
* Multiply a 4x4 matrix by a four-element vector.
|
|
1005
|
+
* @param m The matrix values.
|
|
1006
|
+
* @param v The vector values.
|
|
1007
|
+
* @returns The resulting vector.
|
|
896
1008
|
* @internal
|
|
897
1009
|
*/
|
|
898
1010
|
m4MultiplyVec(m, v) {
|
|
@@ -904,18 +1016,30 @@ export class PngEncoder {
|
|
|
904
1016
|
];
|
|
905
1017
|
}
|
|
906
1018
|
/**
|
|
1019
|
+
* Calculate the dot product of two four-element vectors.
|
|
1020
|
+
* @param x The first vector.
|
|
1021
|
+
* @param y The second vector.
|
|
1022
|
+
* @returns The dot product value.
|
|
907
1023
|
* @internal
|
|
908
1024
|
*/
|
|
909
1025
|
m4Dot(x, y) {
|
|
910
1026
|
return x[0] * y[0] + x[1] * y[1] + x[2] * y[2] + x[3] * y[3];
|
|
911
1027
|
}
|
|
912
1028
|
/**
|
|
1029
|
+
* Multiply a four-element vector by a scalar.
|
|
1030
|
+
* @param a The scalar value.
|
|
1031
|
+
* @param y The vector to scale.
|
|
1032
|
+
* @returns The scaled vector.
|
|
913
1033
|
* @internal
|
|
914
1034
|
*/
|
|
915
1035
|
m4Sml(a, y) {
|
|
916
1036
|
return [a * y[0], a * y[1], a * y[2], a * y[3]];
|
|
917
1037
|
}
|
|
918
1038
|
/**
|
|
1039
|
+
* Premultiply image colour channels by alpha.
|
|
1040
|
+
* @param img The source image data.
|
|
1041
|
+
* @param roundA Whether alpha should be rounded to fully transparent or opaque.
|
|
1042
|
+
* @returns The alpha-premultiplied image data.
|
|
919
1043
|
* @internal
|
|
920
1044
|
*/
|
|
921
1045
|
alphaMul(img, roundA) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pngEncoder.js","sourceRoot":"","sources":["../../../src/encoders/pngEncoder.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright 2024 IOTA Stiftung.\n// SPDX-License-Identifier: Apache-2.0.\n/* eslint-disable no-bitwise */\n/* eslint-disable no-mixed-operators */\n/* eslint-disable no-continue */\nimport { Compression } from \"@twin.org/core\";\nimport type { Frame } from \"./png/frame.js\";\nimport type { ImageData } from \"./png/imageData.js\";\nimport type { Leaf } from \"./png/leaf.js\";\n\n/**\n * PNG Encoder.\n * Based on https://github.com/photopea/UPNG.js.\n */\nexport class PngEncoder {\n\t/**\n\t * Encode the image frames to png.\n\t * @param buffers The frame buffers to encode.\n\t * @param w The image width.\n\t * @param h The image height.\n\t * @returns The data for the image.\n\t */\n\tpublic async encode(buffers: ArrayBuffer[], w: number, h: number): Promise<Uint8Array> {\n\t\tconst ps = 0;\n\t\tconst forbidPlte = false;\n\t\tconst data = new Uint8Array(buffers[0].byteLength * buffers.length + 100);\n\t\tconst wr = [0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a];\n\t\tfor (let i = 0; i < 8; i++) {\n\t\t\tdata[i] = wr[i];\n\t\t}\n\t\tlet offset = 8;\n\n\t\tconst nImg = await this.compressPNG(buffers, w, h, ps, forbidPlte);\n\n\t\tthis.writeUint(data, offset, 13);\n\t\toffset += 4;\n\t\t// cspell:disable-next-line\n\t\tthis.writeASCII(data, offset, \"IHDR\");\n\t\toffset += 4;\n\t\tthis.writeUint(data, offset, w);\n\t\toffset += 4;\n\t\tthis.writeUint(data, offset, h);\n\t\toffset += 4;\n\t\tdata[offset] = nImg.depth;\n\t\toffset++;\n\t\tdata[offset] = nImg.cType;\n\t\toffset++;\n\t\tdata[offset] = 0; // compress\n\t\toffset++;\n\t\tdata[offset] = 0; // filter\n\t\toffset++;\n\t\tdata[offset] = 0; // interlace\n\t\toffset++;\n\t\tthis.writeUint(data, offset, this.crc(data, offset - 17, 17));\n\t\toffset += 4; // crc\n\n\t\t// 9 bytes to say, that it is sRGB\n\t\tthis.writeUint(data, offset, 1);\n\t\toffset += 4;\n\t\tthis.writeASCII(data, offset, \"sRGB\");\n\t\toffset += 4;\n\t\tdata[offset] = 1;\n\t\toffset++;\n\t\tthis.writeUint(data, offset, this.crc(data, offset - 5, 5));\n\t\toffset += 4; // crc\n\n\t\tconst anim = buffers.length > 1;\n\t\tif (anim) {\n\t\t\tthis.writeUint(data, offset, 8);\n\t\t\toffset += 4;\n\t\t\tthis.writeASCII(data, offset, \"acTL\");\n\t\t\toffset += 4;\n\t\t\tthis.writeUint(data, offset, buffers.length);\n\t\t\toffset += 4;\n\t\t\tthis.writeUint(data, offset, 0);\n\t\t\toffset += 4;\n\t\t\tthis.writeUint(data, offset, this.crc(data, offset - 12, 12));\n\t\t\toffset += 4; // crc\n\t\t}\n\n\t\tif (nImg.cType === 3) {\n\t\t\tconst dl = nImg.plte.length;\n\t\t\tthis.writeUint(data, offset, dl * 3);\n\t\t\toffset += 4;\n\t\t\tthis.writeASCII(data, offset, \"PLTE\");\n\t\t\toffset += 4;\n\t\t\tfor (let i = 0; i < dl; i++) {\n\t\t\t\tconst ti = i * 3;\n\t\t\t\tconst c = nImg.plte[i];\n\t\t\t\tconst r = c & 255;\n\t\t\t\tconst g = (c >> 8) & 255;\n\t\t\t\tconst b = (c >> 16) & 255;\n\t\t\t\tdata[offset + ti + 0] = r;\n\t\t\t\tdata[offset + ti + 1] = g;\n\t\t\t\tdata[offset + ti + 2] = b;\n\t\t\t}\n\t\t\toffset += dl * 3;\n\t\t\tthis.writeUint(data, offset, this.crc(data, offset - dl * 3 - 4, dl * 3 + 4));\n\t\t\toffset += 4; // crc\n\n\t\t\tif (nImg.gotAlpha) {\n\t\t\t\tthis.writeUint(data, offset, dl);\n\t\t\t\toffset += 4;\n\t\t\t\tthis.writeASCII(data, offset, \"tRNS\");\n\t\t\t\toffset += 4;\n\t\t\t\tfor (let i = 0; i < dl; i++) {\n\t\t\t\t\tdata[offset + i] = (nImg.plte[i] >> 24) & 255;\n\t\t\t\t}\n\t\t\t\toffset += dl;\n\t\t\t\tthis.writeUint(data, offset, this.crc(data, offset - dl - 4, dl + 4));\n\t\t\t\toffset += 4; // crc\n\t\t\t}\n\t\t}\n\n\t\tlet fi = 0;\n\t\tfor (let j = 0; j < nImg.frames.length; j++) {\n\t\t\tconst fr = nImg.frames[j];\n\t\t\tif (anim) {\n\t\t\t\tthis.writeUint(data, offset, 26);\n\t\t\t\toffset += 4;\n\t\t\t\tthis.writeASCII(data, offset, \"fcTL\");\n\t\t\t\toffset += 4;\n\t\t\t\tthis.writeUint(data, offset, fi++);\n\t\t\t\toffset += 4;\n\t\t\t\tthis.writeUint(data, offset, fr.rect.width);\n\t\t\t\toffset += 4;\n\t\t\t\tthis.writeUint(data, offset, fr.rect.height);\n\t\t\t\toffset += 4;\n\t\t\t\tthis.writeUint(data, offset, fr.rect.x);\n\t\t\t\toffset += 4;\n\t\t\t\tthis.writeUint(data, offset, fr.rect.y);\n\t\t\t\toffset += 4;\n\t\t\t\tthis.writeUshort(data, offset, 0);\n\t\t\t\toffset += 2;\n\t\t\t\tthis.writeUshort(data, offset, 1000);\n\t\t\t\toffset += 2;\n\t\t\t\tdata[offset] = fr.dispose;\n\t\t\t\toffset++; // dispose\n\t\t\t\tdata[offset] = fr.blend;\n\t\t\t\toffset++; // blend\n\t\t\t\tthis.writeUint(data, offset, this.crc(data, offset - 30, 30));\n\t\t\t\toffset += 4; // crc\n\t\t\t}\n\n\t\t\tconst imgD = fr.cImg;\n\t\t\tconst dl: number = imgD?.length ?? 0;\n\t\t\tthis.writeUint(data, offset, dl + (j === 0 ? 0 : 4));\n\t\t\toffset += 4;\n\t\t\tconst iOff = offset;\n\t\t\t// cspell:disable-next-line\n\t\t\tthis.writeASCII(data, offset, j === 0 ? \"IDAT\" : \"fdAT\");\n\t\t\toffset += 4;\n\t\t\tif (j !== 0) {\n\t\t\t\tthis.writeUint(data, offset, fi++);\n\t\t\t\toffset += 4;\n\t\t\t}\n\t\t\tif (imgD) {\n\t\t\t\tfor (let i = 0; i < dl; i++) {\n\t\t\t\t\tdata[offset + i] = imgD[i];\n\t\t\t\t}\n\t\t\t}\n\t\t\toffset += dl;\n\t\t\tthis.writeUint(data, offset, this.crc(data, iOff, offset - iOff));\n\t\t\toffset += 4; // crc\n\t\t}\n\n\t\tthis.writeUint(data, offset, 0);\n\t\toffset += 4;\n\t\t// cspell:disable-next-line\n\t\tthis.writeASCII(data, offset, \"IEND\");\n\t\toffset += 4;\n\t\tthis.writeUint(data, offset, this.crc(data, offset - 4, 4));\n\t\toffset += 4; // crc\n\n\t\treturn new Uint8Array(data.buffer.slice(0, offset));\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tprivate async compressPNG(\n\t\tbuffers: ArrayBuffer[],\n\t\tw: number,\n\t\th: number,\n\t\tps: number,\n\t\tforbidPlte: boolean\n\t): Promise<ImageData> {\n\t\tconst out = this.compress(buffers, w, h, ps, 0, forbidPlte);\n\t\tfor (let i = 0; i < buffers.length; i++) {\n\t\t\tconst frm = out.frames[i];\n\t\t\tconst nw = frm.rect.width;\n\t\t\tconst nh = frm.rect.height;\n\t\t\tconst bpl = frm.bpl;\n\t\t\tconst bpp = frm.bpp;\n\t\t\tconst fData = new Uint8Array(nw * bpl + nh);\n\t\t\tfrm.cImg = await this.filterZero(frm.img, nh, bpp, bpl, fData);\n\t\t}\n\t\treturn out;\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tprivate compress(\n\t\tinBuffers: ArrayBufferLike[],\n\t\tw: number,\n\t\th: number,\n\t\tinPs: number,\n\t\tforGIF: number,\n\t\tforbidPlte: boolean\n\t): ImageData {\n\t\tlet cType = 6;\n\t\tlet depth = 8;\n\t\tlet bpp = 4;\n\t\tlet alphaAnd = 255;\n\t\tlet ps = inPs;\n\t\tlet buffers = inBuffers;\n\n\t\tfor (let j = 0; j < buffers.length; j++) {\n\t\t\t// when not quantized, other frames can contain colors, that are not in an initial frame\n\t\t\tconst img = new Uint8Array(buffers[j]);\n\t\t\tconst iLen = img.length;\n\t\t\tfor (let i = 0; i < iLen; i += 4) {\n\t\t\t\talphaAnd &= img[i + 3];\n\t\t\t}\n\t\t}\n\t\tlet gotAlpha: boolean = alphaAnd !== 255;\n\n\t\tconst cMap: { [id: number]: number } = {};\n\t\tconst pLte = [];\n\t\tif (buffers.length !== 0) {\n\t\t\tcMap[0] = 0;\n\t\t\tpLte.push(0);\n\t\t\tif (ps !== 0) {\n\t\t\t\tps--;\n\t\t\t}\n\t\t}\n\n\t\tif (ps !== 0) {\n\t\t\tconst qRes = this.quantize(buffers, ps, forGIF);\n\t\t\tbuffers = qRes.buffers;\n\t\t\tfor (let i = 0; i < qRes.plte.length; i++) {\n\t\t\t\tconst c = qRes.plte[i].est?.rgba ?? 0;\n\t\t\t\tif (!cMap[c]) {\n\t\t\t\t\tcMap[c] = pLte.length;\n\t\t\t\t\tpLte.push(c);\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\t// what if ps==0, but there are <=256 colors? we still need to detect, if the palette could be used\n\t\t\tfor (let j = 0; j < buffers.length; j++) {\n\t\t\t\t// when not quantized, other frames can contain colors, that are not in an initial frame\n\t\t\t\tconst img32 = new Uint32Array(buffers[j]);\n\t\t\t\tconst iLen = img32.length;\n\t\t\t\tfor (let i = 0; i < iLen; i++) {\n\t\t\t\t\tconst c = img32[i];\n\t\t\t\t\tif ((i < w || (c !== img32[i - 1] && c !== img32[i - w])) && !cMap[c]) {\n\t\t\t\t\t\tcMap[c] = pLte.length;\n\t\t\t\t\t\tpLte.push(c);\n\t\t\t\t\t\tif (pLte.length >= 300) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tconst brute = gotAlpha ? forGIF : false; // brute : frames can only be copied, not \"blended\"\n\t\tconst cc = pLte.length;\n\t\tif (cc <= 256 && !forbidPlte) {\n\t\t\tif (cc <= 2) {\n\t\t\t\tdepth = 1;\n\t\t\t} else if (cc <= 4) {\n\t\t\t\tdepth = 2;\n\t\t\t} else if (cc <= 16) {\n\t\t\t\tdepth = 4;\n\t\t\t} else {\n\t\t\t\tdepth = 8;\n\t\t\t}\n\t\t\tif (forGIF) {\n\t\t\t\tdepth = 8;\n\t\t\t}\n\t\t\tgotAlpha = true;\n\t\t}\n\n\t\tconst frames: Frame[] = [];\n\t\tfor (let j = 0; j < buffers.length; j++) {\n\t\t\tlet cImg = new Uint8Array(buffers[j]);\n\t\t\tlet cImg32 = new Uint32Array(cImg.buffer);\n\n\t\t\tlet nx = 0;\n\t\t\tlet ny = 0;\n\t\t\tlet nw = w;\n\t\t\tlet nh = h;\n\t\t\tlet blend = 0;\n\t\t\tif (j !== 0 && !brute) {\n\t\t\t\tconst tLim = forGIF || j === 1 || frames[frames.length - 2].dispose === 2 ? 1 : 2;\n\t\t\t\tlet tStp = 0;\n\t\t\t\tlet tArea = 1e9;\n\t\t\t\tfor (let it = 0; it < tLim; it++) {\n\t\t\t\t\tconst p32 = new Uint32Array(buffers[j - 1 - it]);\n\t\t\t\t\tlet mix = w;\n\t\t\t\t\tlet miy = h;\n\t\t\t\t\tlet max = -1;\n\t\t\t\t\tlet may = -1;\n\t\t\t\t\tfor (let y = 0; y < h; y++) {\n\t\t\t\t\t\tfor (let x = 0; x < w; x++) {\n\t\t\t\t\t\t\tconst i = y * w + x;\n\t\t\t\t\t\t\tif (cImg32[i] !== p32[i]) {\n\t\t\t\t\t\t\t\tif (x < mix) {\n\t\t\t\t\t\t\t\t\tmix = x;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (x > max) {\n\t\t\t\t\t\t\t\t\tmax = x;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (y < miy) {\n\t\t\t\t\t\t\t\t\tmiy = y;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (y > may) {\n\t\t\t\t\t\t\t\t\tmay = y;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tconst sArea = max === -1 ? 1 : (max - mix + 1) * (may - miy + 1);\n\t\t\t\t\tif (sArea < tArea) {\n\t\t\t\t\t\ttArea = sArea;\n\t\t\t\t\t\ttStp = it;\n\t\t\t\t\t\tif (max === -1) {\n\t\t\t\t\t\t\tnx = 0;\n\t\t\t\t\t\t\tny = 0;\n\t\t\t\t\t\t\tnw = 1;\n\t\t\t\t\t\t\tnh = 1;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tnx = mix;\n\t\t\t\t\t\t\tny = miy;\n\t\t\t\t\t\t\tnw = max - mix + 1;\n\t\t\t\t\t\t\tnh = may - miy + 1;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tconst pImg = new Uint8Array(buffers[j - 1 - tStp]);\n\t\t\t\tif (tStp === 1) {\n\t\t\t\t\tframes[frames.length - 1].dispose = 2;\n\t\t\t\t}\n\n\t\t\t\tconst nImg = new Uint8Array(nw * nh * 4);\n\t\t\t\tthis.copyTile(pImg, w, h, nImg, nw, nh, -nx, -ny, 0);\n\t\t\t\tif (this.copyTile(cImg, w, h, nImg, nw, nh, -nx, -ny, 3)) {\n\t\t\t\t\tthis.copyTile(cImg, w, h, nImg, nw, nh, -nx, -ny, 2);\n\t\t\t\t\tblend = 1;\n\t\t\t\t} else {\n\t\t\t\t\tthis.copyTile(cImg, w, h, nImg, nw, nh, -nx, -ny, 0);\n\t\t\t\t\tblend = 0;\n\t\t\t\t}\n\t\t\t\tcImg = nImg;\n\t\t\t\tcImg32 = new Uint32Array(cImg.buffer);\n\t\t\t}\n\t\t\tlet bpl = 4 * nw;\n\t\t\tif (cc <= 256 && !forbidPlte) {\n\t\t\t\tbpl = Math.ceil((depth * nw) / 8);\n\t\t\t\tconst nImg = new Uint8Array(bpl * nh);\n\t\t\t\tfor (let y = 0; y < nh; y++) {\n\t\t\t\t\tconst i = y * bpl;\n\t\t\t\t\tconst ii = y * nw;\n\t\t\t\t\tif (depth === 8) {\n\t\t\t\t\t\tfor (let x = 0; x < nw; x++) {\n\t\t\t\t\t\t\tnImg[i + x] = cMap[cImg32[ii + x]];\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (depth === 4) {\n\t\t\t\t\t\tfor (let x = 0; x < nw; x++) {\n\t\t\t\t\t\t\tnImg[i + (x >> 1)] |= cMap[cImg32[ii + x]] << (4 - (x & 1) * 4);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (depth === 2) {\n\t\t\t\t\t\tfor (let x = 0; x < nw; x++) {\n\t\t\t\t\t\t\tnImg[i + (x >> 2)] |= cMap[cImg32[ii + x]] << (6 - (x & 3) * 2);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (depth === 1) {\n\t\t\t\t\t\tfor (let x = 0; x < nw; x++) {\n\t\t\t\t\t\t\tnImg[i + (x >> 3)] |= cMap[cImg32[ii + x]] << (7 - (x & 7) * 1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tcImg = nImg;\n\t\t\t\tcType = 3;\n\t\t\t\tbpp = 1;\n\t\t\t} else if (!gotAlpha && buffers.length === 1) {\n\t\t\t\t// some next \"reduced\" frames may contain alpha for blending\n\t\t\t\tconst nImg = new Uint8Array(nw * nh * 3);\n\t\t\t\tconst area = nw * nh;\n\t\t\t\tfor (let i = 0; i < area; i++) {\n\t\t\t\t\tconst ti = i * 3;\n\t\t\t\t\tconst qi = i * 4;\n\t\t\t\t\tnImg[ti] = cImg[qi];\n\t\t\t\t\tnImg[ti + 1] = cImg[qi + 1];\n\t\t\t\t\tnImg[ti + 2] = cImg[qi + 2];\n\t\t\t\t}\n\t\t\t\tcImg = nImg;\n\t\t\t\tcType = 2;\n\t\t\t\tbpp = 3;\n\t\t\t\tbpl = 3 * nw;\n\t\t\t}\n\t\t\tframes.push({\n\t\t\t\trect: {\n\t\t\t\t\tx: nx,\n\t\t\t\t\ty: ny,\n\t\t\t\t\twidth: nw,\n\t\t\t\t\theight: nh\n\t\t\t\t},\n\t\t\t\timg: cImg,\n\t\t\t\tbpl,\n\t\t\t\tbpp,\n\t\t\t\tblend,\n\t\t\t\tdispose: brute ? 1 : 0\n\t\t\t});\n\t\t}\n\t\treturn { cType, depth, plte: pLte, gotAlpha, frames };\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tprivate async filterZero(\n\t\timg: Uint8Array,\n\t\th: number,\n\t\tbpp: number,\n\t\tbpl: number,\n\t\tdata: Uint8Array\n\t): Promise<Uint8Array> {\n\t\tconst fls = [];\n\t\tfor (let t = 0; t < 5; t++) {\n\t\t\tif (h * bpl > 500000 && (t === 2 || t === 3 || t === 4)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tfor (let y = 0; y < h; y++) {\n\t\t\t\tthis.filterLine(data, img, y, bpl, bpp, t);\n\t\t\t}\n\t\t\tconst deflated = await Compression.compress(data, \"deflate\");\n\t\t\tfls.push(deflated);\n\t\t\tif (bpp === 1) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tlet ti: number = 0;\n\t\tlet tSize = 1e9;\n\t\tfor (let i = 0; i < fls.length; i++) {\n\t\t\tif (fls[i].length < tSize) {\n\t\t\t\tti = i;\n\t\t\t\ttSize = fls[i].length;\n\t\t\t}\n\t\t}\n\t\treturn fls[ti];\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tprivate filterLine(\n\t\tdata: Uint8Array,\n\t\timg: Uint8Array,\n\t\ty: number,\n\t\tbpl: number,\n\t\tbpp: number,\n\t\ttype: number\n\t): void {\n\t\tconst i = y * bpl;\n\t\tlet di = i + y;\n\t\tdata[di] = type;\n\t\tdi++;\n\n\t\tif (type === 0) {\n\t\t\tfor (let x = 0; x < bpl; x++) {\n\t\t\t\tdata[di + x] = img[i + x];\n\t\t\t}\n\t\t} else if (type === 1) {\n\t\t\tfor (let x = 0; x < bpp; x++) {\n\t\t\t\tdata[di + x] = img[i + x];\n\t\t\t}\n\t\t\tfor (let x = bpp; x < bpl; x++) {\n\t\t\t\tdata[di + x] = (img[i + x] - img[i + x - bpp] + 256) & 255;\n\t\t\t}\n\t\t} else if (y === 0) {\n\t\t\tfor (let x = 0; x < bpp; x++) {\n\t\t\t\tdata[di + x] = img[i + x];\n\t\t\t}\n\n\t\t\tif (type === 2) {\n\t\t\t\tfor (let x = bpp; x < bpl; x++) {\n\t\t\t\t\tdata[di + x] = img[i + x];\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (type === 3) {\n\t\t\t\tfor (let x = bpp; x < bpl; x++) {\n\t\t\t\t\tdata[di + x] = (img[i + x] - (img[i + x - bpp] >> 1) + 256) & 255;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (type === 4) {\n\t\t\t\tfor (let x = bpp; x < bpl; x++) {\n\t\t\t\t\tdata[di + x] = (img[i + x] - this.paeth(img[i + x - bpp], 0, 0) + 256) & 255;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tif (type === 2) {\n\t\t\t\tfor (let x = 0; x < bpl; x++) {\n\t\t\t\t\tdata[di + x] = (img[i + x] + 256 - img[i + x - bpl]) & 255;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (type === 3) {\n\t\t\t\tfor (let x = 0; x < bpp; x++) {\n\t\t\t\t\tdata[di + x] = (img[i + x] + 256 - (img[i + x - bpl] >> 1)) & 255;\n\t\t\t\t}\n\t\t\t\tfor (let x = bpp; x < bpl; x++) {\n\t\t\t\t\tdata[di + x] = (img[i + x] + 256 - ((img[i + x - bpl] + img[i + x - bpp]) >> 1)) & 255;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (type === 4) {\n\t\t\t\tfor (let x = 0; x < bpp; x++) {\n\t\t\t\t\tdata[di + x] = (img[i + x] + 256 - this.paeth(0, img[i + x - bpl], 0)) & 255;\n\t\t\t\t}\n\t\t\t\tfor (let x = bpp; x < bpl; x++) {\n\t\t\t\t\tdata[di + x] =\n\t\t\t\t\t\t(img[i + x] +\n\t\t\t\t\t\t\t256 -\n\t\t\t\t\t\t\tthis.paeth(img[i + x - bpp], img[i + x - bpl], img[i + x - bpp - bpl])) &\n\t\t\t\t\t\t255;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tprivate paeth(a: number, b: number, c: number): number {\n\t\tconst p = a + b - c;\n\t\tconst pa = Math.abs(p - a);\n\t\tconst pb = Math.abs(p - b);\n\t\tconst pc = Math.abs(p - c);\n\t\tif (pa <= pb && pa <= pc) {\n\t\t\treturn a;\n\t\t}\n\t\tif (pb <= pc) {\n\t\t\treturn b;\n\t\t}\n\t\treturn c;\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tprivate writeASCII(data: Uint8Array, p: number, s: string): void {\n\t\tfor (let i = 0; i < s.length; i++) {\n\t\t\tdata[p + i] = s.charCodeAt(i);\n\t\t}\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tprivate writeUint(buff: Uint8Array, p: number, n: number): void {\n\t\tbuff[p] = (n >> 24) & 255;\n\t\tbuff[p + 1] = (n >> 16) & 255;\n\t\tbuff[p + 2] = (n >> 8) & 255;\n\t\tbuff[p + 3] = n & 255;\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tprivate writeUshort(buff: Uint8Array, p: number, n: number): void {\n\t\tbuff[p] = (n >> 8) & 255;\n\t\tbuff[p + 1] = n & 255;\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tprivate copyTile(\n\t\tsb: Uint8Array,\n\t\tsw: number,\n\t\tsh: number,\n\t\ttb: Uint8Array,\n\t\ttw: number,\n\t\tth: number,\n\t\txOffset: number,\n\t\tyOffset: number,\n\t\tmode: number\n\t): boolean {\n\t\tconst w = Math.min(sw, tw);\n\t\tconst h = Math.min(sh, th);\n\t\tlet si;\n\t\tlet ti;\n\t\tfor (let y = 0; y < h; y++) {\n\t\t\tfor (let x = 0; x < w; x++) {\n\t\t\t\tif (xOffset >= 0 && yOffset >= 0) {\n\t\t\t\t\tsi = (y * sw + x) << 2;\n\t\t\t\t\tti = ((yOffset + y) * tw + xOffset + x) << 2;\n\t\t\t\t} else {\n\t\t\t\t\tsi = ((-yOffset + y) * sw - xOffset + x) << 2;\n\t\t\t\t\tti = (y * tw + x) << 2;\n\t\t\t\t}\n\n\t\t\t\tif (mode === 0) {\n\t\t\t\t\ttb[ti] = sb[si];\n\t\t\t\t\ttb[ti + 1] = sb[si + 1];\n\t\t\t\t\ttb[ti + 2] = sb[si + 2];\n\t\t\t\t\ttb[ti + 3] = sb[si + 3];\n\t\t\t\t} else if (mode === 1) {\n\t\t\t\t\tconst fa = sb[si + 3] * (1 / 255);\n\t\t\t\t\tconst fr = sb[si] * fa;\n\t\t\t\t\tconst fg = sb[si + 1] * fa;\n\t\t\t\t\tconst fb = sb[si + 2] * fa;\n\t\t\t\t\tconst ba = tb[ti + 3] * (1 / 255);\n\t\t\t\t\tconst br = tb[ti] * ba;\n\t\t\t\t\tconst bg = tb[ti + 1] * ba;\n\t\t\t\t\tconst bb = tb[ti + 2] * ba;\n\n\t\t\t\t\tconst ifa = 1 - fa;\n\t\t\t\t\tconst oa = fa + ba * ifa;\n\t\t\t\t\tconst ioa = oa === 0 ? 0 : 1 / oa;\n\t\t\t\t\ttb[ti + 3] = 255 * oa;\n\t\t\t\t\ttb[ti + 0] = (fr + br * ifa) * ioa;\n\t\t\t\t\ttb[ti + 1] = (fg + bg * ifa) * ioa;\n\t\t\t\t\ttb[ti + 2] = (fb + bb * ifa) * ioa;\n\t\t\t\t} else if (mode === 2) {\n\t\t\t\t\t// copy only differences, otherwise zero\n\t\t\t\t\tconst fa = sb[si + 3];\n\t\t\t\t\tconst fr = sb[si];\n\t\t\t\t\tconst fg = sb[si + 1];\n\t\t\t\t\tconst fb = sb[si + 2];\n\t\t\t\t\tconst ba = tb[ti + 3];\n\t\t\t\t\tconst br = tb[ti];\n\t\t\t\t\tconst bg = tb[ti + 1];\n\t\t\t\t\tconst bb = tb[ti + 2];\n\t\t\t\t\tif (fa === ba && fr === br && fg === bg && fb === bb) {\n\t\t\t\t\t\ttb[ti] = 0;\n\t\t\t\t\t\ttb[ti + 1] = 0;\n\t\t\t\t\t\ttb[ti + 2] = 0;\n\t\t\t\t\t\ttb[ti + 3] = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttb[ti] = fr;\n\t\t\t\t\t\ttb[ti + 1] = fg;\n\t\t\t\t\t\ttb[ti + 2] = fb;\n\t\t\t\t\t\ttb[ti + 3] = fa;\n\t\t\t\t\t}\n\t\t\t\t} else if (mode === 3) {\n\t\t\t\t\t// check if can be blended\n\t\t\t\t\tconst fa = sb[si + 3];\n\t\t\t\t\tconst fr = sb[si];\n\t\t\t\t\tconst fg = sb[si + 1];\n\t\t\t\t\tconst fb = sb[si + 2];\n\t\t\t\t\tconst ba = tb[ti + 3];\n\t\t\t\t\tconst br = tb[ti];\n\t\t\t\t\tconst bg = tb[ti + 1];\n\t\t\t\t\tconst bb = tb[ti + 2];\n\t\t\t\t\tif (fa === ba && fr === br && fg === bg && fb === bb) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tif (fa < 220 && ba > 20) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn true;\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tprivate crc(b: Uint8Array, o: number, l: number): number {\n\t\treturn this.crcUpdate(0xffffffff, b, o, l) ^ 0xffffffff;\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tprivate crcUpdate(c: number, buf: Uint8Array, off: number, len: number): number {\n\t\tlet localC = c;\n\t\tconst crcTable = this.crcTable();\n\t\tfor (let i = 0; i < len; i++) {\n\t\t\tlocalC = crcTable[(localC ^ buf[off + i]) & 0xff] ^ (localC >>> 8);\n\t\t}\n\t\treturn localC;\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tprivate crcTable(): Uint32Array {\n\t\tconst tab = new Uint32Array(256);\n\t\tfor (let n = 0; n < 256; n++) {\n\t\t\tlet c = n;\n\t\t\tfor (let k = 0; k < 8; k++) {\n\t\t\t\tif (c & 1) {\n\t\t\t\t\tc = 0xedb88320 ^ (c >>> 1);\n\t\t\t\t} else {\n\t\t\t\t\tc >>>= 1;\n\t\t\t\t}\n\t\t\t}\n\t\t\ttab[n] = c;\n\t\t}\n\t\treturn tab;\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tprivate quantize(\n\t\tbuffers: ArrayBufferLike[],\n\t\tps: number,\n\t\troundAlpha: number\n\t): { buffers: ArrayBufferLike[]; plte: Leaf[] } {\n\t\tconst imgs: Uint8Array[] = [];\n\t\tlet total = 0;\n\t\tfor (let i = 0; i < buffers.length; i++) {\n\t\t\timgs.push(this.alphaMul(new Uint8Array(buffers[i]), roundAlpha));\n\t\t\ttotal += buffers[i].byteLength;\n\t\t}\n\n\t\tconst nImg = new Uint8Array(total);\n\t\tconst nImg32 = new Uint32Array(nImg.buffer);\n\t\tlet nOff = 0;\n\t\tfor (let i = 0; i < imgs.length; i++) {\n\t\t\tconst img = imgs[i];\n\t\t\tconst il = img.length;\n\t\t\tfor (let j = 0; j < il; j++) {\n\t\t\t\tnImg[nOff + j] = img[j];\n\t\t\t}\n\t\t\tnOff += il;\n\t\t}\n\n\t\tconst root: Leaf = {\n\t\t\ti0: 0,\n\t\t\ti1: nImg.length,\n\t\t\tbst: null,\n\t\t\test: null,\n\t\t\ttDst: 0,\n\t\t\tleft: null,\n\t\t\tright: null\n\t\t};\n\t\troot.bst = this.quantizeStats(nImg, root.i0, root.i1);\n\t\troot.est = this.quantizeEStats(root.bst);\n\t\tconst leafs: Leaf[] = [root];\n\n\t\twhile (leafs.length < ps) {\n\t\t\tlet maxL = 0;\n\t\t\tlet mi = 0;\n\t\t\tfor (let i = 0; i < leafs.length; i++) {\n\t\t\t\tconst est = leafs[i].est;\n\t\t\t\tif (est && est.L > maxL) {\n\t\t\t\t\tmaxL = est.L;\n\t\t\t\t\tmi = i;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (maxL < 1e-3) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tconst node = leafs[mi];\n\n\t\t\tconst s0 = this.quantizeSplitPixels(\n\t\t\t\tnImg,\n\t\t\t\tnImg32,\n\t\t\t\tnode.i0,\n\t\t\t\tnode.i1,\n\t\t\t\tnode.est?.e ?? [],\n\t\t\t\tnode.est?.eMq255 ?? 0\n\t\t\t);\n\n\t\t\tconst ln: Leaf = {\n\t\t\t\ti0: node.i0,\n\t\t\t\ti1: s0,\n\t\t\t\tbst: null,\n\t\t\t\test: null,\n\t\t\t\ttDst: 0,\n\t\t\t\tleft: null,\n\t\t\t\tright: null\n\t\t\t};\n\t\t\tln.bst = this.quantizeStats(nImg, ln.i0, ln.i1);\n\t\t\tln.est = this.quantizeEStats(ln.bst);\n\t\t\tconst rn: Leaf = {\n\t\t\t\ti0: s0,\n\t\t\t\ti1: node.i1,\n\t\t\t\tbst: null,\n\t\t\t\test: null,\n\t\t\t\ttDst: 0,\n\t\t\t\tleft: null,\n\t\t\t\tright: null\n\t\t\t};\n\t\t\trn.bst = {\n\t\t\t\tR: [],\n\t\t\t\tm: [],\n\t\t\t\tN: (node.bst?.N ?? 0) - ln.bst.N\n\t\t\t};\n\t\t\tfor (let i = 0; i < 16; i++) {\n\t\t\t\trn.bst.R[i] = (node.bst?.R[i] ?? 0) - ln.bst.R[i];\n\t\t\t}\n\t\t\tfor (let i = 0; i < 4; i++) {\n\t\t\t\trn.bst.m[i] = (node.bst?.m[i] ?? 0) - ln.bst.m[i];\n\t\t\t}\n\t\t\trn.est = this.quantizeEStats(rn.bst);\n\n\t\t\tnode.left = ln;\n\t\t\tnode.right = rn;\n\t\t\tleafs[mi] = ln;\n\t\t\tleafs.push(rn);\n\t\t}\n\t\tleafs.sort((a, b) => (b.bst?.N ?? 0) - (a.bst?.N ?? 0));\n\n\t\tconst outBuffers: ArrayBufferLike[] = [];\n\t\tfor (let ii = 0; ii < imgs.length; ii++) {\n\t\t\tconst sb = new Uint8Array(imgs[ii]);\n\t\t\tconst tb: Uint32Array = new Uint32Array(imgs[ii]);\n\t\t\tconst len = sb.length;\n\n\t\t\tfor (let i = 0; i < len; i += 4) {\n\t\t\t\tconst r = sb[i] * (1 / 255);\n\t\t\t\tconst g = sb[i + 1] * (1 / 255);\n\t\t\t\tconst b = sb[i + 2] * (1 / 255);\n\t\t\t\tconst a = sb[i + 3] * (1 / 255);\n\n\t\t\t\tlet nd: Leaf | null = root;\n\t\t\t\twhile (nd?.left) {\n\t\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\t\t\t\tnd = this.quantizePlaneDst(nd.est!, r, g, b, a) <= 0 ? nd.left : nd.right;\n\t\t\t\t}\n\n\t\t\t\ttb[i >> 2] = nd?.est?.rgba ?? 0;\n\t\t\t}\n\t\t\toutBuffers[ii] = tb.buffer;\n\t\t}\n\t\treturn { buffers: outBuffers, plte: leafs };\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tprivate quantizeStats(\n\t\tnImg: Uint8Array,\n\t\ti0: number,\n\t\ti1: number\n\t): { R: number[]; m: number[]; N: number } {\n\t\tconst R = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];\n\t\tconst m = [0, 0, 0, 0];\n\t\tconst N = (i1 - i0) >> 2;\n\t\tfor (let i = i0; i < i1; i += 4) {\n\t\t\tconst r = nImg[i] * (1 / 255);\n\t\t\tconst g = nImg[i + 1] * (1 / 255);\n\t\t\tconst b = nImg[i + 2] * (1 / 255);\n\t\t\tconst a = nImg[i + 3] * (1 / 255);\n\n\t\t\tm[0] += r;\n\t\t\tm[1] += g;\n\t\t\tm[2] += b;\n\t\t\tm[3] += a;\n\n\t\t\tR[0] += r * r;\n\t\t\tR[1] += r * g;\n\t\t\tR[2] += r * b;\n\t\t\tR[3] += r * a;\n\t\t\tR[5] += g * g;\n\t\t\tR[6] += g * b;\n\t\t\tR[7] += g * a;\n\t\t\tR[10] += b * b;\n\t\t\tR[11] += b * a;\n\t\t\tR[15] += a * a;\n\t\t}\n\t\tR[4] = R[1];\n\t\tR[8] = R[2];\n\t\tR[12] = R[3];\n\t\tR[9] = R[6];\n\t\tR[13] = R[7];\n\t\tR[14] = R[11];\n\n\t\treturn { R, m, N };\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tprivate quantizeEStats(stats: { R: number[]; m: number[]; N: number }): {\n\t\tCov: number[];\n\t\tq: number[];\n\t\te: number[];\n\t\tL: number;\n\t\teMq255: number;\n\t\teMq: number;\n\t\trgba: number;\n\t} {\n\t\tconst R = stats.R;\n\t\tconst m = stats.m;\n\t\tconst N = stats.N;\n\n\t\tconst m0 = m[0];\n\t\tconst m1 = m[1];\n\t\tconst m2 = m[2];\n\t\tconst m3 = m[3];\n\t\tconst iN = N === 0 ? 0 : 1 / N;\n\t\tconst rj = [\n\t\t\tR[0] - m0 * m0 * iN,\n\t\t\tR[1] - m0 * m1 * iN,\n\t\t\tR[2] - m0 * m2 * iN,\n\t\t\tR[3] - m0 * m3 * iN,\n\t\t\tR[4] - m1 * m0 * iN,\n\t\t\tR[5] - m1 * m1 * iN,\n\t\t\tR[6] - m1 * m2 * iN,\n\t\t\tR[7] - m1 * m3 * iN,\n\t\t\tR[8] - m2 * m0 * iN,\n\t\t\tR[9] - m2 * m1 * iN,\n\t\t\tR[10] - m2 * m2 * iN,\n\t\t\tR[11] - m2 * m3 * iN,\n\t\t\tR[12] - m3 * m0 * iN,\n\t\t\tR[13] - m3 * m1 * iN,\n\t\t\tR[14] - m3 * m2 * iN,\n\t\t\tR[15] - m3 * m3 * iN\n\t\t];\n\n\t\tconst A = rj;\n\t\tlet b = [0.5, 0.5, 0.5, 0.5];\n\t\tlet mi = 0;\n\t\tlet tmi;\n\n\t\tif (N !== 0) {\n\t\t\tfor (let i = 0; i < 10; i++) {\n\t\t\t\tb = this.m4MultiplyVec(A, b);\n\t\t\t\ttmi = Math.sqrt(this.m4Dot(b, b));\n\t\t\t\tb = this.m4Sml(1 / tmi, b);\n\t\t\t\tif (Math.abs(tmi - mi) < 1e-9) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tmi = tmi;\n\t\t\t}\n\t\t}\n\t\tconst q = [m0 * iN, m1 * iN, m2 * iN, m3 * iN];\n\t\tconst eMq255 = this.m4Dot(this.m4Sml(255, q), b);\n\n\t\tconst ia = q[3] < 0.001 ? 0 : 1 / q[3];\n\n\t\treturn {\n\t\t\tCov: rj,\n\t\t\tq,\n\t\t\te: b,\n\t\t\tL: mi,\n\t\t\teMq255,\n\t\t\teMq: this.m4Dot(b, q),\n\t\t\trgba:\n\t\t\t\t((Math.round(255 * q[3]) << 24) |\n\t\t\t\t\t(Math.round(255 * q[2] * ia) << 16) |\n\t\t\t\t\t(Math.round(255 * q[1] * ia) << 8) |\n\t\t\t\t\t(Math.round(255 * q[0] * ia) << 0)) >>>\n\t\t\t\t0\n\t\t};\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tprivate quantizePlaneDst(\n\t\test: { e: number[]; eMq: number },\n\t\tr: number,\n\t\tg: number,\n\t\tb: number,\n\t\ta: number\n\t): number {\n\t\tconst e = est.e;\n\t\treturn e[0] * r + e[1] * g + e[2] * b + e[3] * a - est.eMq;\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tprivate quantizeSplitPixels(\n\t\tnImg: Uint8Array,\n\t\tnImg32: Uint32Array,\n\t\ti0in: number,\n\t\ti1in: number,\n\t\te: number[],\n\t\teMq: number\n\t): number {\n\t\tlet i1 = i1in - 4;\n\t\tlet i0 = i0in;\n\t\twhile (i0 < i1) {\n\t\t\twhile (this.quantizeVecDot(nImg, i0, e) <= eMq) {\n\t\t\t\ti0 += 4;\n\t\t\t}\n\t\t\twhile (this.quantizeVecDot(nImg, i1, e) > eMq) {\n\t\t\t\ti1 -= 4;\n\t\t\t}\n\t\t\tif (i0 >= i1) {\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tconst t = nImg32[i0 >> 2];\n\t\t\tnImg32[i0 >> 2] = nImg32[i1 >> 2];\n\t\t\tnImg32[i1 >> 2] = t;\n\n\t\t\ti0 += 4;\n\t\t\ti1 -= 4;\n\t\t}\n\t\twhile (this.quantizeVecDot(nImg, i0, e) > eMq) {\n\t\t\ti0 -= 4;\n\t\t}\n\t\treturn i0 + 4;\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tprivate quantizeVecDot(nImg: Uint8Array, i: number, e: number[]): number {\n\t\treturn nImg[i] * e[0] + nImg[i + 1] * e[1] + nImg[i + 2] * e[2] + nImg[i + 3] * e[3];\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tprivate m4MultiplyVec(m: number[], v: number[]): number[] {\n\t\treturn [\n\t\t\tm[0] * v[0] + m[1] * v[1] + m[2] * v[2] + m[3] * v[3],\n\t\t\tm[4] * v[0] + m[5] * v[1] + m[6] * v[2] + m[7] * v[3],\n\t\t\tm[8] * v[0] + m[9] * v[1] + m[10] * v[2] + m[11] * v[3],\n\t\t\tm[12] * v[0] + m[13] * v[1] + m[14] * v[2] + m[15] * v[3]\n\t\t];\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tprivate m4Dot(x: number[], y: number[]): number {\n\t\treturn x[0] * y[0] + x[1] * y[1] + x[2] * y[2] + x[3] * y[3];\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tprivate m4Sml(a: number, y: number[]): number[] {\n\t\treturn [a * y[0], a * y[1], a * y[2], a * y[3]];\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tprivate alphaMul(img: Uint8Array, roundA: number): Uint8Array {\n\t\tconst nImg = new Uint8Array(img.length);\n\t\tconst area = img.length >> 2;\n\t\tfor (let i = 0; i < area; i++) {\n\t\t\tconst qi = i << 2;\n\t\t\tlet ia = img[qi + 3];\n\t\t\tif (roundA) {\n\t\t\t\tia = ia < 128 ? 0 : 255;\n\t\t\t}\n\t\t\tconst a = ia * (1 / 255);\n\t\t\tnImg[qi + 0] = img[qi + 0] * a;\n\t\t\tnImg[qi + 1] = img[qi + 1] * a;\n\t\t\tnImg[qi + 2] = img[qi + 2] * a;\n\t\t\tnImg[qi + 3] = ia;\n\t\t}\n\t\treturn nImg;\n\t}\n}\n"]}
|
|
1
|
+
{"version":3,"file":"pngEncoder.js","sourceRoot":"","sources":["../../../src/encoders/pngEncoder.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright 2024 IOTA Stiftung.\n// SPDX-License-Identifier: Apache-2.0.\n/* eslint-disable no-bitwise */\n/* eslint-disable no-mixed-operators */\n/* eslint-disable no-continue */\nimport { Compression } from \"@twin.org/core\";\nimport type { Frame } from \"./png/frame.js\";\nimport type { ImageData } from \"./png/imageData.js\";\nimport type { Leaf } from \"./png/leaf.js\";\n\n/**\n * PNG Encoder.\n * Based on https://github.com/photopea/UPNG.js.\n */\nexport class PngEncoder {\n\t/**\n\t * Encode the image frames to png.\n\t * @param buffers The frame buffers to encode.\n\t * @param w The image width.\n\t * @param h The image height.\n\t * @returns The data for the image.\n\t */\n\tpublic async encode(buffers: ArrayBuffer[], w: number, h: number): Promise<Uint8Array> {\n\t\tconst ps = 0;\n\t\tconst forbidPlte = false;\n\t\tconst data = new Uint8Array(buffers[0].byteLength * buffers.length + 100);\n\t\tconst wr = [0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a];\n\t\tfor (let i = 0; i < 8; i++) {\n\t\t\tdata[i] = wr[i];\n\t\t}\n\t\tlet offset = 8;\n\n\t\tconst nImg = await this.compressPNG(buffers, w, h, ps, forbidPlte);\n\n\t\tthis.writeUint(data, offset, 13);\n\t\toffset += 4;\n\t\t// cspell:disable-next-line\n\t\tthis.writeASCII(data, offset, \"IHDR\");\n\t\toffset += 4;\n\t\tthis.writeUint(data, offset, w);\n\t\toffset += 4;\n\t\tthis.writeUint(data, offset, h);\n\t\toffset += 4;\n\t\tdata[offset] = nImg.depth;\n\t\toffset++;\n\t\tdata[offset] = nImg.cType;\n\t\toffset++;\n\t\tdata[offset] = 0; // compress\n\t\toffset++;\n\t\tdata[offset] = 0; // filter\n\t\toffset++;\n\t\tdata[offset] = 0; // interlace\n\t\toffset++;\n\t\tthis.writeUint(data, offset, this.crc(data, offset - 17, 17));\n\t\toffset += 4; // crc\n\n\t\t// 9 bytes to say, that it is sRGB\n\t\tthis.writeUint(data, offset, 1);\n\t\toffset += 4;\n\t\tthis.writeASCII(data, offset, \"sRGB\");\n\t\toffset += 4;\n\t\tdata[offset] = 1;\n\t\toffset++;\n\t\tthis.writeUint(data, offset, this.crc(data, offset - 5, 5));\n\t\toffset += 4; // crc\n\n\t\tconst anim = buffers.length > 1;\n\t\tif (anim) {\n\t\t\tthis.writeUint(data, offset, 8);\n\t\t\toffset += 4;\n\t\t\tthis.writeASCII(data, offset, \"acTL\");\n\t\t\toffset += 4;\n\t\t\tthis.writeUint(data, offset, buffers.length);\n\t\t\toffset += 4;\n\t\t\tthis.writeUint(data, offset, 0);\n\t\t\toffset += 4;\n\t\t\tthis.writeUint(data, offset, this.crc(data, offset - 12, 12));\n\t\t\toffset += 4; // crc\n\t\t}\n\n\t\tif (nImg.cType === 3) {\n\t\t\tconst dl = nImg.plte.length;\n\t\t\tthis.writeUint(data, offset, dl * 3);\n\t\t\toffset += 4;\n\t\t\tthis.writeASCII(data, offset, \"PLTE\");\n\t\t\toffset += 4;\n\t\t\tfor (let i = 0; i < dl; i++) {\n\t\t\t\tconst ti = i * 3;\n\t\t\t\tconst c = nImg.plte[i];\n\t\t\t\tconst r = c & 255;\n\t\t\t\tconst g = (c >> 8) & 255;\n\t\t\t\tconst b = (c >> 16) & 255;\n\t\t\t\tdata[offset + ti + 0] = r;\n\t\t\t\tdata[offset + ti + 1] = g;\n\t\t\t\tdata[offset + ti + 2] = b;\n\t\t\t}\n\t\t\toffset += dl * 3;\n\t\t\tthis.writeUint(data, offset, this.crc(data, offset - dl * 3 - 4, dl * 3 + 4));\n\t\t\toffset += 4; // crc\n\n\t\t\tif (nImg.gotAlpha) {\n\t\t\t\tthis.writeUint(data, offset, dl);\n\t\t\t\toffset += 4;\n\t\t\t\tthis.writeASCII(data, offset, \"tRNS\");\n\t\t\t\toffset += 4;\n\t\t\t\tfor (let i = 0; i < dl; i++) {\n\t\t\t\t\tdata[offset + i] = (nImg.plte[i] >> 24) & 255;\n\t\t\t\t}\n\t\t\t\toffset += dl;\n\t\t\t\tthis.writeUint(data, offset, this.crc(data, offset - dl - 4, dl + 4));\n\t\t\t\toffset += 4; // crc\n\t\t\t}\n\t\t}\n\n\t\tlet fi = 0;\n\t\tfor (let j = 0; j < nImg.frames.length; j++) {\n\t\t\tconst fr = nImg.frames[j];\n\t\t\tif (anim) {\n\t\t\t\tthis.writeUint(data, offset, 26);\n\t\t\t\toffset += 4;\n\t\t\t\tthis.writeASCII(data, offset, \"fcTL\");\n\t\t\t\toffset += 4;\n\t\t\t\tthis.writeUint(data, offset, fi++);\n\t\t\t\toffset += 4;\n\t\t\t\tthis.writeUint(data, offset, fr.rect.width);\n\t\t\t\toffset += 4;\n\t\t\t\tthis.writeUint(data, offset, fr.rect.height);\n\t\t\t\toffset += 4;\n\t\t\t\tthis.writeUint(data, offset, fr.rect.x);\n\t\t\t\toffset += 4;\n\t\t\t\tthis.writeUint(data, offset, fr.rect.y);\n\t\t\t\toffset += 4;\n\t\t\t\tthis.writeUshort(data, offset, 0);\n\t\t\t\toffset += 2;\n\t\t\t\tthis.writeUshort(data, offset, 1000);\n\t\t\t\toffset += 2;\n\t\t\t\tdata[offset] = fr.dispose;\n\t\t\t\toffset++; // dispose\n\t\t\t\tdata[offset] = fr.blend;\n\t\t\t\toffset++; // blend\n\t\t\t\tthis.writeUint(data, offset, this.crc(data, offset - 30, 30));\n\t\t\t\toffset += 4; // crc\n\t\t\t}\n\n\t\t\tconst imgD = fr.cImg;\n\t\t\tconst dl: number = imgD?.length ?? 0;\n\t\t\tthis.writeUint(data, offset, dl + (j === 0 ? 0 : 4));\n\t\t\toffset += 4;\n\t\t\tconst iOff = offset;\n\t\t\t// cspell:disable-next-line\n\t\t\tthis.writeASCII(data, offset, j === 0 ? \"IDAT\" : \"fdAT\");\n\t\t\toffset += 4;\n\t\t\tif (j !== 0) {\n\t\t\t\tthis.writeUint(data, offset, fi++);\n\t\t\t\toffset += 4;\n\t\t\t}\n\t\t\tif (imgD) {\n\t\t\t\tfor (let i = 0; i < dl; i++) {\n\t\t\t\t\tdata[offset + i] = imgD[i];\n\t\t\t\t}\n\t\t\t}\n\t\t\toffset += dl;\n\t\t\tthis.writeUint(data, offset, this.crc(data, iOff, offset - iOff));\n\t\t\toffset += 4; // crc\n\t\t}\n\n\t\tthis.writeUint(data, offset, 0);\n\t\toffset += 4;\n\t\t// cspell:disable-next-line\n\t\tthis.writeASCII(data, offset, \"IEND\");\n\t\toffset += 4;\n\t\tthis.writeUint(data, offset, this.crc(data, offset - 4, 4));\n\t\toffset += 4; // crc\n\n\t\treturn new Uint8Array(data.buffer.slice(0, offset));\n\t}\n\n\t/**\n\t * Compress the supplied frames into PNG-ready image data.\n\t * @param buffers The source frame buffers.\n\t * @param w The image width.\n\t * @param h The image height.\n\t * @param ps The palette size target.\n\t * @param forbidPlte True if palette output must be avoided.\n\t * @returns The compressed image data and frame metadata.\n\t * @internal\n\t */\n\tprivate async compressPNG(\n\t\tbuffers: ArrayBuffer[],\n\t\tw: number,\n\t\th: number,\n\t\tps: number,\n\t\tforbidPlte: boolean\n\t): Promise<ImageData> {\n\t\tconst out = this.compress(buffers, w, h, ps, 0, forbidPlte);\n\t\tfor (let i = 0; i < buffers.length; i++) {\n\t\t\tconst frm = out.frames[i];\n\t\t\tconst nw = frm.rect.width;\n\t\t\tconst nh = frm.rect.height;\n\t\t\tconst bpl = frm.bpl;\n\t\t\tconst bpp = frm.bpp;\n\t\t\tconst fData = new Uint8Array(nw * bpl + nh);\n\t\t\tfrm.cImg = await this.filterZero(frm.img, nh, bpp, bpl, fData);\n\t\t}\n\t\treturn out;\n\t}\n\n\t/**\n\t * Prepare frame data, colour type, and palette information for PNG encoding.\n\t * @param inBuffers The source frame buffers.\n\t * @param w The image width.\n\t * @param h The image height.\n\t * @param inPs The requested palette size.\n\t * @param forGIF Whether the output is being prepared for GIF-style constraints.\n\t * @param forbidPlte True if palette output must be avoided.\n\t * @returns The processed frame data and PNG metadata.\n\t * @internal\n\t */\n\tprivate compress(\n\t\tinBuffers: ArrayBufferLike[],\n\t\tw: number,\n\t\th: number,\n\t\tinPs: number,\n\t\tforGIF: number,\n\t\tforbidPlte: boolean\n\t): ImageData {\n\t\tlet cType = 6;\n\t\tlet depth = 8;\n\t\tlet bpp = 4;\n\t\tlet alphaAnd = 255;\n\t\tlet ps = inPs;\n\t\tlet buffers = inBuffers;\n\n\t\tfor (let j = 0; j < buffers.length; j++) {\n\t\t\t// when not quantized, other frames can contain colors, that are not in an initial frame\n\t\t\tconst img = new Uint8Array(buffers[j]);\n\t\t\tconst iLen = img.length;\n\t\t\tfor (let i = 0; i < iLen; i += 4) {\n\t\t\t\talphaAnd &= img[i + 3];\n\t\t\t}\n\t\t}\n\t\tlet gotAlpha: boolean = alphaAnd !== 255;\n\n\t\tconst cMap: { [id: number]: number } = {};\n\t\tconst pLte = [];\n\t\tif (buffers.length !== 0) {\n\t\t\tcMap[0] = 0;\n\t\t\tpLte.push(0);\n\t\t\tif (ps !== 0) {\n\t\t\t\tps--;\n\t\t\t}\n\t\t}\n\n\t\tif (ps !== 0) {\n\t\t\tconst qRes = this.quantize(buffers, ps, forGIF);\n\t\t\tbuffers = qRes.buffers;\n\t\t\tfor (let i = 0; i < qRes.plte.length; i++) {\n\t\t\t\tconst c = qRes.plte[i].est?.rgba ?? 0;\n\t\t\t\tif (!cMap[c]) {\n\t\t\t\t\tcMap[c] = pLte.length;\n\t\t\t\t\tpLte.push(c);\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\t// what if ps==0, but there are <=256 colors? we still need to detect, if the palette could be used\n\t\t\tfor (let j = 0; j < buffers.length; j++) {\n\t\t\t\t// when not quantized, other frames can contain colors, that are not in an initial frame\n\t\t\t\tconst img32 = new Uint32Array(buffers[j]);\n\t\t\t\tconst iLen = img32.length;\n\t\t\t\tfor (let i = 0; i < iLen; i++) {\n\t\t\t\t\tconst c = img32[i];\n\t\t\t\t\tif ((i < w || (c !== img32[i - 1] && c !== img32[i - w])) && !cMap[c]) {\n\t\t\t\t\t\tcMap[c] = pLte.length;\n\t\t\t\t\t\tpLte.push(c);\n\t\t\t\t\t\tif (pLte.length >= 300) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tconst brute = gotAlpha ? forGIF : false; // brute : frames can only be copied, not \"blended\"\n\t\tconst cc = pLte.length;\n\t\tif (cc <= 256 && !forbidPlte) {\n\t\t\tif (cc <= 2) {\n\t\t\t\tdepth = 1;\n\t\t\t} else if (cc <= 4) {\n\t\t\t\tdepth = 2;\n\t\t\t} else if (cc <= 16) {\n\t\t\t\tdepth = 4;\n\t\t\t} else {\n\t\t\t\tdepth = 8;\n\t\t\t}\n\t\t\tif (forGIF) {\n\t\t\t\tdepth = 8;\n\t\t\t}\n\t\t\tgotAlpha = true;\n\t\t}\n\n\t\tconst frames: Frame[] = [];\n\t\tfor (let j = 0; j < buffers.length; j++) {\n\t\t\tlet cImg = new Uint8Array(buffers[j]);\n\t\t\tlet cImg32 = new Uint32Array(cImg.buffer);\n\n\t\t\tlet nx = 0;\n\t\t\tlet ny = 0;\n\t\t\tlet nw = w;\n\t\t\tlet nh = h;\n\t\t\tlet blend = 0;\n\t\t\tif (j !== 0 && !brute) {\n\t\t\t\tconst tLim = forGIF || j === 1 || frames[frames.length - 2].dispose === 2 ? 1 : 2;\n\t\t\t\tlet tStp = 0;\n\t\t\t\tlet tArea = 1e9;\n\t\t\t\tfor (let it = 0; it < tLim; it++) {\n\t\t\t\t\tconst p32 = new Uint32Array(buffers[j - 1 - it]);\n\t\t\t\t\tlet mix = w;\n\t\t\t\t\tlet miy = h;\n\t\t\t\t\tlet max = -1;\n\t\t\t\t\tlet may = -1;\n\t\t\t\t\tfor (let y = 0; y < h; y++) {\n\t\t\t\t\t\tfor (let x = 0; x < w; x++) {\n\t\t\t\t\t\t\tconst i = y * w + x;\n\t\t\t\t\t\t\tif (cImg32[i] !== p32[i]) {\n\t\t\t\t\t\t\t\tif (x < mix) {\n\t\t\t\t\t\t\t\t\tmix = x;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (x > max) {\n\t\t\t\t\t\t\t\t\tmax = x;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (y < miy) {\n\t\t\t\t\t\t\t\t\tmiy = y;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (y > may) {\n\t\t\t\t\t\t\t\t\tmay = y;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tconst sArea = max === -1 ? 1 : (max - mix + 1) * (may - miy + 1);\n\t\t\t\t\tif (sArea < tArea) {\n\t\t\t\t\t\ttArea = sArea;\n\t\t\t\t\t\ttStp = it;\n\t\t\t\t\t\tif (max === -1) {\n\t\t\t\t\t\t\tnx = 0;\n\t\t\t\t\t\t\tny = 0;\n\t\t\t\t\t\t\tnw = 1;\n\t\t\t\t\t\t\tnh = 1;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tnx = mix;\n\t\t\t\t\t\t\tny = miy;\n\t\t\t\t\t\t\tnw = max - mix + 1;\n\t\t\t\t\t\t\tnh = may - miy + 1;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tconst pImg = new Uint8Array(buffers[j - 1 - tStp]);\n\t\t\t\tif (tStp === 1) {\n\t\t\t\t\tframes[frames.length - 1].dispose = 2;\n\t\t\t\t}\n\n\t\t\t\tconst nImg = new Uint8Array(nw * nh * 4);\n\t\t\t\tthis.copyTile(pImg, w, h, nImg, nw, nh, -nx, -ny, 0);\n\t\t\t\tif (this.copyTile(cImg, w, h, nImg, nw, nh, -nx, -ny, 3)) {\n\t\t\t\t\tthis.copyTile(cImg, w, h, nImg, nw, nh, -nx, -ny, 2);\n\t\t\t\t\tblend = 1;\n\t\t\t\t} else {\n\t\t\t\t\tthis.copyTile(cImg, w, h, nImg, nw, nh, -nx, -ny, 0);\n\t\t\t\t\tblend = 0;\n\t\t\t\t}\n\t\t\t\tcImg = nImg;\n\t\t\t\tcImg32 = new Uint32Array(cImg.buffer);\n\t\t\t}\n\t\t\tlet bpl = 4 * nw;\n\t\t\tif (cc <= 256 && !forbidPlte) {\n\t\t\t\tbpl = Math.ceil((depth * nw) / 8);\n\t\t\t\tconst nImg = new Uint8Array(bpl * nh);\n\t\t\t\tfor (let y = 0; y < nh; y++) {\n\t\t\t\t\tconst i = y * bpl;\n\t\t\t\t\tconst ii = y * nw;\n\t\t\t\t\tif (depth === 8) {\n\t\t\t\t\t\tfor (let x = 0; x < nw; x++) {\n\t\t\t\t\t\t\tnImg[i + x] = cMap[cImg32[ii + x]];\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (depth === 4) {\n\t\t\t\t\t\tfor (let x = 0; x < nw; x++) {\n\t\t\t\t\t\t\tnImg[i + (x >> 1)] |= cMap[cImg32[ii + x]] << (4 - (x & 1) * 4);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (depth === 2) {\n\t\t\t\t\t\tfor (let x = 0; x < nw; x++) {\n\t\t\t\t\t\t\tnImg[i + (x >> 2)] |= cMap[cImg32[ii + x]] << (6 - (x & 3) * 2);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (depth === 1) {\n\t\t\t\t\t\tfor (let x = 0; x < nw; x++) {\n\t\t\t\t\t\t\tnImg[i + (x >> 3)] |= cMap[cImg32[ii + x]] << (7 - (x & 7) * 1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tcImg = nImg;\n\t\t\t\tcType = 3;\n\t\t\t\tbpp = 1;\n\t\t\t} else if (!gotAlpha && buffers.length === 1) {\n\t\t\t\t// some next \"reduced\" frames may contain alpha for blending\n\t\t\t\tconst nImg = new Uint8Array(nw * nh * 3);\n\t\t\t\tconst area = nw * nh;\n\t\t\t\tfor (let i = 0; i < area; i++) {\n\t\t\t\t\tconst ti = i * 3;\n\t\t\t\t\tconst qi = i * 4;\n\t\t\t\t\tnImg[ti] = cImg[qi];\n\t\t\t\t\tnImg[ti + 1] = cImg[qi + 1];\n\t\t\t\t\tnImg[ti + 2] = cImg[qi + 2];\n\t\t\t\t}\n\t\t\t\tcImg = nImg;\n\t\t\t\tcType = 2;\n\t\t\t\tbpp = 3;\n\t\t\t\tbpl = 3 * nw;\n\t\t\t}\n\t\t\tframes.push({\n\t\t\t\trect: {\n\t\t\t\t\tx: nx,\n\t\t\t\t\ty: ny,\n\t\t\t\t\twidth: nw,\n\t\t\t\t\theight: nh\n\t\t\t\t},\n\t\t\t\timg: cImg,\n\t\t\t\tbpl,\n\t\t\t\tbpp,\n\t\t\t\tblend,\n\t\t\t\tdispose: brute ? 1 : 0\n\t\t\t});\n\t\t}\n\t\treturn { cType, depth, plte: pLte, gotAlpha, frames };\n\t}\n\n\t/**\n\t * Apply PNG filters and choose the smallest compressed result.\n\t * @param img The raw frame image data.\n\t * @param h The frame height.\n\t * @param bpp The bytes per pixel.\n\t * @param bpl The bytes per line.\n\t * @param data The working filter buffer.\n\t * @returns The deflated filtered image data.\n\t * @internal\n\t */\n\tprivate async filterZero(\n\t\timg: Uint8Array,\n\t\th: number,\n\t\tbpp: number,\n\t\tbpl: number,\n\t\tdata: Uint8Array\n\t): Promise<Uint8Array> {\n\t\tconst fls = [];\n\t\tfor (let t = 0; t < 5; t++) {\n\t\t\tif (h * bpl > 500000 && (t === 2 || t === 3 || t === 4)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tfor (let y = 0; y < h; y++) {\n\t\t\t\tthis.filterLine(data, img, y, bpl, bpp, t);\n\t\t\t}\n\t\t\tconst deflated = await Compression.compress(data, \"deflate\");\n\t\t\tfls.push(deflated);\n\t\t\tif (bpp === 1) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tlet ti: number = 0;\n\t\tlet tSize = 1e9;\n\t\tfor (let i = 0; i < fls.length; i++) {\n\t\t\tif (fls[i].length < tSize) {\n\t\t\t\tti = i;\n\t\t\t\ttSize = fls[i].length;\n\t\t\t}\n\t\t}\n\t\treturn fls[ti];\n\t}\n\n\t/**\n\t * Write one filtered scanline into the working PNG buffer.\n\t * @param data The output buffer that receives the filtered data.\n\t * @param img The source image bytes.\n\t * @param y The scanline index.\n\t * @param bpl The bytes per line.\n\t * @param bpp The bytes per pixel.\n\t * @param type The PNG filter type to apply.\n\t * @internal\n\t */\n\tprivate filterLine(\n\t\tdata: Uint8Array,\n\t\timg: Uint8Array,\n\t\ty: number,\n\t\tbpl: number,\n\t\tbpp: number,\n\t\ttype: number\n\t): void {\n\t\tconst i = y * bpl;\n\t\tlet di = i + y;\n\t\tdata[di] = type;\n\t\tdi++;\n\n\t\tif (type === 0) {\n\t\t\tfor (let x = 0; x < bpl; x++) {\n\t\t\t\tdata[di + x] = img[i + x];\n\t\t\t}\n\t\t} else if (type === 1) {\n\t\t\tfor (let x = 0; x < bpp; x++) {\n\t\t\t\tdata[di + x] = img[i + x];\n\t\t\t}\n\t\t\tfor (let x = bpp; x < bpl; x++) {\n\t\t\t\tdata[di + x] = (img[i + x] - img[i + x - bpp] + 256) & 255;\n\t\t\t}\n\t\t} else if (y === 0) {\n\t\t\tfor (let x = 0; x < bpp; x++) {\n\t\t\t\tdata[di + x] = img[i + x];\n\t\t\t}\n\n\t\t\tif (type === 2) {\n\t\t\t\tfor (let x = bpp; x < bpl; x++) {\n\t\t\t\t\tdata[di + x] = img[i + x];\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (type === 3) {\n\t\t\t\tfor (let x = bpp; x < bpl; x++) {\n\t\t\t\t\tdata[di + x] = (img[i + x] - (img[i + x - bpp] >> 1) + 256) & 255;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (type === 4) {\n\t\t\t\tfor (let x = bpp; x < bpl; x++) {\n\t\t\t\t\tdata[di + x] = (img[i + x] - this.paeth(img[i + x - bpp], 0, 0) + 256) & 255;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tif (type === 2) {\n\t\t\t\tfor (let x = 0; x < bpl; x++) {\n\t\t\t\t\tdata[di + x] = (img[i + x] + 256 - img[i + x - bpl]) & 255;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (type === 3) {\n\t\t\t\tfor (let x = 0; x < bpp; x++) {\n\t\t\t\t\tdata[di + x] = (img[i + x] + 256 - (img[i + x - bpl] >> 1)) & 255;\n\t\t\t\t}\n\t\t\t\tfor (let x = bpp; x < bpl; x++) {\n\t\t\t\t\tdata[di + x] = (img[i + x] + 256 - ((img[i + x - bpl] + img[i + x - bpp]) >> 1)) & 255;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (type === 4) {\n\t\t\t\tfor (let x = 0; x < bpp; x++) {\n\t\t\t\t\tdata[di + x] = (img[i + x] + 256 - this.paeth(0, img[i + x - bpl], 0)) & 255;\n\t\t\t\t}\n\t\t\t\tfor (let x = bpp; x < bpl; x++) {\n\t\t\t\t\tdata[di + x] =\n\t\t\t\t\t\t(img[i + x] +\n\t\t\t\t\t\t\t256 -\n\t\t\t\t\t\t\tthis.paeth(img[i + x - bpp], img[i + x - bpl], img[i + x - bpp - bpl])) &\n\t\t\t\t\t\t255;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Calculate the Paeth predictor for PNG filtering.\n\t * @param a The left value.\n\t * @param b The above value.\n\t * @param c The upper-left value.\n\t * @returns The predicted byte value.\n\t * @internal\n\t */\n\tprivate paeth(a: number, b: number, c: number): number {\n\t\tconst p = a + b - c;\n\t\tconst pa = Math.abs(p - a);\n\t\tconst pb = Math.abs(p - b);\n\t\tconst pc = Math.abs(p - c);\n\t\tif (pa <= pb && pa <= pc) {\n\t\t\treturn a;\n\t\t}\n\t\tif (pb <= pc) {\n\t\t\treturn b;\n\t\t}\n\t\treturn c;\n\t}\n\n\t/**\n\t * Write an ASCII string into the output buffer.\n\t * @param data The destination buffer.\n\t * @param p The offset to start writing at.\n\t * @param s The ASCII string to write.\n\t * @internal\n\t */\n\tprivate writeASCII(data: Uint8Array, p: number, s: string): void {\n\t\tfor (let i = 0; i < s.length; i++) {\n\t\t\tdata[p + i] = s.charCodeAt(i);\n\t\t}\n\t}\n\n\t/**\n\t * Write a 32-bit unsigned integer into the output buffer.\n\t * @param buff The destination buffer.\n\t * @param p The offset to write at.\n\t * @param n The value to write.\n\t * @internal\n\t */\n\tprivate writeUint(buff: Uint8Array, p: number, n: number): void {\n\t\tbuff[p] = (n >> 24) & 255;\n\t\tbuff[p + 1] = (n >> 16) & 255;\n\t\tbuff[p + 2] = (n >> 8) & 255;\n\t\tbuff[p + 3] = n & 255;\n\t}\n\n\t/**\n\t * Write a 16-bit unsigned integer into the output buffer.\n\t * @param buff The destination buffer.\n\t * @param p The offset to write at.\n\t * @param n The value to write.\n\t * @internal\n\t */\n\tprivate writeUshort(buff: Uint8Array, p: number, n: number): void {\n\t\tbuff[p] = (n >> 8) & 255;\n\t\tbuff[p + 1] = n & 255;\n\t}\n\n\t/**\n\t * Copy or blend a tile of RGBA pixels into a target image.\n\t * @param sb The source buffer.\n\t * @param sw The source width.\n\t * @param sh The source height.\n\t * @param tb The target buffer.\n\t * @param tw The target width.\n\t * @param th The target height.\n\t * @param xOffset The horizontal offset between the source and target.\n\t * @param yOffset The vertical offset between the source and target.\n\t * @param mode The copy or blend mode.\n\t * @returns True if the requested operation succeeded; otherwise, false.\n\t * @internal\n\t */\n\tprivate copyTile(\n\t\tsb: Uint8Array,\n\t\tsw: number,\n\t\tsh: number,\n\t\ttb: Uint8Array,\n\t\ttw: number,\n\t\tth: number,\n\t\txOffset: number,\n\t\tyOffset: number,\n\t\tmode: number\n\t): boolean {\n\t\tconst w = Math.min(sw, tw);\n\t\tconst h = Math.min(sh, th);\n\t\tlet si;\n\t\tlet ti;\n\t\tfor (let y = 0; y < h; y++) {\n\t\t\tfor (let x = 0; x < w; x++) {\n\t\t\t\tif (xOffset >= 0 && yOffset >= 0) {\n\t\t\t\t\tsi = (y * sw + x) << 2;\n\t\t\t\t\tti = ((yOffset + y) * tw + xOffset + x) << 2;\n\t\t\t\t} else {\n\t\t\t\t\tsi = ((-yOffset + y) * sw - xOffset + x) << 2;\n\t\t\t\t\tti = (y * tw + x) << 2;\n\t\t\t\t}\n\n\t\t\t\tif (mode === 0) {\n\t\t\t\t\ttb[ti] = sb[si];\n\t\t\t\t\ttb[ti + 1] = sb[si + 1];\n\t\t\t\t\ttb[ti + 2] = sb[si + 2];\n\t\t\t\t\ttb[ti + 3] = sb[si + 3];\n\t\t\t\t} else if (mode === 1) {\n\t\t\t\t\tconst fa = sb[si + 3] * (1 / 255);\n\t\t\t\t\tconst fr = sb[si] * fa;\n\t\t\t\t\tconst fg = sb[si + 1] * fa;\n\t\t\t\t\tconst fb = sb[si + 2] * fa;\n\t\t\t\t\tconst ba = tb[ti + 3] * (1 / 255);\n\t\t\t\t\tconst br = tb[ti] * ba;\n\t\t\t\t\tconst bg = tb[ti + 1] * ba;\n\t\t\t\t\tconst bb = tb[ti + 2] * ba;\n\n\t\t\t\t\tconst ifa = 1 - fa;\n\t\t\t\t\tconst oa = fa + ba * ifa;\n\t\t\t\t\tconst ioa = oa === 0 ? 0 : 1 / oa;\n\t\t\t\t\ttb[ti + 3] = 255 * oa;\n\t\t\t\t\ttb[ti + 0] = (fr + br * ifa) * ioa;\n\t\t\t\t\ttb[ti + 1] = (fg + bg * ifa) * ioa;\n\t\t\t\t\ttb[ti + 2] = (fb + bb * ifa) * ioa;\n\t\t\t\t} else if (mode === 2) {\n\t\t\t\t\t// copy only differences, otherwise zero\n\t\t\t\t\tconst fa = sb[si + 3];\n\t\t\t\t\tconst fr = sb[si];\n\t\t\t\t\tconst fg = sb[si + 1];\n\t\t\t\t\tconst fb = sb[si + 2];\n\t\t\t\t\tconst ba = tb[ti + 3];\n\t\t\t\t\tconst br = tb[ti];\n\t\t\t\t\tconst bg = tb[ti + 1];\n\t\t\t\t\tconst bb = tb[ti + 2];\n\t\t\t\t\tif (fa === ba && fr === br && fg === bg && fb === bb) {\n\t\t\t\t\t\ttb[ti] = 0;\n\t\t\t\t\t\ttb[ti + 1] = 0;\n\t\t\t\t\t\ttb[ti + 2] = 0;\n\t\t\t\t\t\ttb[ti + 3] = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttb[ti] = fr;\n\t\t\t\t\t\ttb[ti + 1] = fg;\n\t\t\t\t\t\ttb[ti + 2] = fb;\n\t\t\t\t\t\ttb[ti + 3] = fa;\n\t\t\t\t\t}\n\t\t\t\t} else if (mode === 3) {\n\t\t\t\t\t// check if can be blended\n\t\t\t\t\tconst fa = sb[si + 3];\n\t\t\t\t\tconst fr = sb[si];\n\t\t\t\t\tconst fg = sb[si + 1];\n\t\t\t\t\tconst fb = sb[si + 2];\n\t\t\t\t\tconst ba = tb[ti + 3];\n\t\t\t\t\tconst br = tb[ti];\n\t\t\t\t\tconst bg = tb[ti + 1];\n\t\t\t\t\tconst bb = tb[ti + 2];\n\t\t\t\t\tif (fa === ba && fr === br && fg === bg && fb === bb) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tif (fa < 220 && ba > 20) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn true;\n\t}\n\n\t/**\n\t * Calculate the CRC for a slice of the buffer.\n\t * @param b The source buffer.\n\t * @param o The slice offset.\n\t * @param l The slice length.\n\t * @returns The computed CRC value.\n\t * @internal\n\t */\n\tprivate crc(b: Uint8Array, o: number, l: number): number {\n\t\treturn this.crcUpdate(0xffffffff, b, o, l) ^ 0xffffffff;\n\t}\n\n\t/**\n\t * Update a CRC value with additional bytes.\n\t * @param c The current CRC accumulator.\n\t * @param buf The source buffer.\n\t * @param off The offset to start reading from.\n\t * @param len The number of bytes to process.\n\t * @returns The updated CRC value.\n\t * @internal\n\t */\n\tprivate crcUpdate(c: number, buf: Uint8Array, off: number, len: number): number {\n\t\tlet localC = c;\n\t\tconst crcTable = this.crcTable();\n\t\tfor (let i = 0; i < len; i++) {\n\t\t\tlocalC = crcTable[(localC ^ buf[off + i]) & 0xff] ^ (localC >>> 8);\n\t\t}\n\t\treturn localC;\n\t}\n\n\t/**\n\t * Build the PNG CRC lookup table.\n\t * @returns The CRC lookup table.\n\t * @internal\n\t */\n\tprivate crcTable(): Uint32Array {\n\t\tconst tab = new Uint32Array(256);\n\t\tfor (let n = 0; n < 256; n++) {\n\t\t\tlet c = n;\n\t\t\tfor (let k = 0; k < 8; k++) {\n\t\t\t\tif (c & 1) {\n\t\t\t\t\tc = 0xedb88320 ^ (c >>> 1);\n\t\t\t\t} else {\n\t\t\t\t\tc >>>= 1;\n\t\t\t\t}\n\t\t\t}\n\t\t\ttab[n] = c;\n\t\t}\n\t\treturn tab;\n\t}\n\n\t/**\n\t * Quantize the supplied frames to a reduced palette.\n\t * @param buffers The source frame buffers.\n\t * @param ps The target palette size.\n\t * @param roundAlpha Whether alpha values should be rounded to binary transparency.\n\t * @returns The quantized frame buffers and palette leaf nodes.\n\t * @internal\n\t */\n\tprivate quantize(\n\t\tbuffers: ArrayBufferLike[],\n\t\tps: number,\n\t\troundAlpha: number\n\t): { buffers: ArrayBufferLike[]; plte: Leaf[] } {\n\t\tconst imgs: Uint8Array[] = [];\n\t\tlet total = 0;\n\t\tfor (let i = 0; i < buffers.length; i++) {\n\t\t\timgs.push(this.alphaMul(new Uint8Array(buffers[i]), roundAlpha));\n\t\t\ttotal += buffers[i].byteLength;\n\t\t}\n\n\t\tconst nImg = new Uint8Array(total);\n\t\tconst nImg32 = new Uint32Array(nImg.buffer);\n\t\tlet nOff = 0;\n\t\tfor (let i = 0; i < imgs.length; i++) {\n\t\t\tconst img = imgs[i];\n\t\t\tconst il = img.length;\n\t\t\tfor (let j = 0; j < il; j++) {\n\t\t\t\tnImg[nOff + j] = img[j];\n\t\t\t}\n\t\t\tnOff += il;\n\t\t}\n\n\t\tconst root: Leaf = {\n\t\t\ti0: 0,\n\t\t\ti1: nImg.length,\n\t\t\tbst: null,\n\t\t\test: null,\n\t\t\ttDst: 0,\n\t\t\tleft: null,\n\t\t\tright: null\n\t\t};\n\t\troot.bst = this.quantizeStats(nImg, root.i0, root.i1);\n\t\troot.est = this.quantizeEStats(root.bst);\n\t\tconst leafs: Leaf[] = [root];\n\n\t\twhile (leafs.length < ps) {\n\t\t\tlet maxL = 0;\n\t\t\tlet mi = 0;\n\t\t\tfor (let i = 0; i < leafs.length; i++) {\n\t\t\t\tconst est = leafs[i].est;\n\t\t\t\tif (est && est.L > maxL) {\n\t\t\t\t\tmaxL = est.L;\n\t\t\t\t\tmi = i;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (maxL < 1e-3) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tconst node = leafs[mi];\n\n\t\t\tconst s0 = this.quantizeSplitPixels(\n\t\t\t\tnImg,\n\t\t\t\tnImg32,\n\t\t\t\tnode.i0,\n\t\t\t\tnode.i1,\n\t\t\t\tnode.est?.e ?? [],\n\t\t\t\tnode.est?.eMq255 ?? 0\n\t\t\t);\n\n\t\t\tconst ln: Leaf = {\n\t\t\t\ti0: node.i0,\n\t\t\t\ti1: s0,\n\t\t\t\tbst: null,\n\t\t\t\test: null,\n\t\t\t\ttDst: 0,\n\t\t\t\tleft: null,\n\t\t\t\tright: null\n\t\t\t};\n\t\t\tln.bst = this.quantizeStats(nImg, ln.i0, ln.i1);\n\t\t\tln.est = this.quantizeEStats(ln.bst);\n\t\t\tconst rn: Leaf = {\n\t\t\t\ti0: s0,\n\t\t\t\ti1: node.i1,\n\t\t\t\tbst: null,\n\t\t\t\test: null,\n\t\t\t\ttDst: 0,\n\t\t\t\tleft: null,\n\t\t\t\tright: null\n\t\t\t};\n\t\t\trn.bst = {\n\t\t\t\tR: [],\n\t\t\t\tm: [],\n\t\t\t\tN: (node.bst?.N ?? 0) - ln.bst.N\n\t\t\t};\n\t\t\tfor (let i = 0; i < 16; i++) {\n\t\t\t\trn.bst.R[i] = (node.bst?.R[i] ?? 0) - ln.bst.R[i];\n\t\t\t}\n\t\t\tfor (let i = 0; i < 4; i++) {\n\t\t\t\trn.bst.m[i] = (node.bst?.m[i] ?? 0) - ln.bst.m[i];\n\t\t\t}\n\t\t\trn.est = this.quantizeEStats(rn.bst);\n\n\t\t\tnode.left = ln;\n\t\t\tnode.right = rn;\n\t\t\tleafs[mi] = ln;\n\t\t\tleafs.push(rn);\n\t\t}\n\t\tleafs.sort((a, b) => (b.bst?.N ?? 0) - (a.bst?.N ?? 0));\n\n\t\tconst outBuffers: ArrayBufferLike[] = [];\n\t\tfor (let ii = 0; ii < imgs.length; ii++) {\n\t\t\tconst sb = new Uint8Array(imgs[ii]);\n\t\t\tconst tb: Uint32Array = new Uint32Array(imgs[ii]);\n\t\t\tconst len = sb.length;\n\n\t\t\tfor (let i = 0; i < len; i += 4) {\n\t\t\t\tconst r = sb[i] * (1 / 255);\n\t\t\t\tconst g = sb[i + 1] * (1 / 255);\n\t\t\t\tconst b = sb[i + 2] * (1 / 255);\n\t\t\t\tconst a = sb[i + 3] * (1 / 255);\n\n\t\t\t\tlet nd: Leaf | null = root;\n\t\t\t\twhile (nd?.left) {\n\t\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\t\t\t\tnd = this.quantizePlaneDst(nd.est!, r, g, b, a) <= 0 ? nd.left : nd.right;\n\t\t\t\t}\n\n\t\t\t\ttb[i >> 2] = nd?.est?.rgba ?? 0;\n\t\t\t}\n\t\t\toutBuffers[ii] = tb.buffer;\n\t\t}\n\t\treturn { buffers: outBuffers, plte: leafs };\n\t}\n\n\t/**\n\t * Gather covariance and mean statistics for a range of RGBA pixels.\n\t * @param nImg The source pixel buffer.\n\t * @param i0 The inclusive start offset.\n\t * @param i1 The exclusive end offset.\n\t * @returns The accumulated statistics for the range.\n\t * @internal\n\t */\n\tprivate quantizeStats(\n\t\tnImg: Uint8Array,\n\t\ti0: number,\n\t\ti1: number\n\t): { R: number[]; m: number[]; N: number } {\n\t\tconst R = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];\n\t\tconst m = [0, 0, 0, 0];\n\t\tconst N = (i1 - i0) >> 2;\n\t\tfor (let i = i0; i < i1; i += 4) {\n\t\t\tconst r = nImg[i] * (1 / 255);\n\t\t\tconst g = nImg[i + 1] * (1 / 255);\n\t\t\tconst b = nImg[i + 2] * (1 / 255);\n\t\t\tconst a = nImg[i + 3] * (1 / 255);\n\n\t\t\tm[0] += r;\n\t\t\tm[1] += g;\n\t\t\tm[2] += b;\n\t\t\tm[3] += a;\n\n\t\t\tR[0] += r * r;\n\t\t\tR[1] += r * g;\n\t\t\tR[2] += r * b;\n\t\t\tR[3] += r * a;\n\t\t\tR[5] += g * g;\n\t\t\tR[6] += g * b;\n\t\t\tR[7] += g * a;\n\t\t\tR[10] += b * b;\n\t\t\tR[11] += b * a;\n\t\t\tR[15] += a * a;\n\t\t}\n\t\tR[4] = R[1];\n\t\tR[8] = R[2];\n\t\tR[12] = R[3];\n\t\tR[9] = R[6];\n\t\tR[13] = R[7];\n\t\tR[14] = R[11];\n\n\t\treturn { R, m, N };\n\t}\n\n\t/**\n\t * Derive quantization metrics from accumulated colour statistics.\n\t * @param stats The accumulated statistics.\n\t * @param stats.R The covariance accumulator matrix.\n\t * @param stats.m The colour channel sums.\n\t * @param stats.N The number of pixels in the sample.\n\t * @returns The derived quantization metrics.\n\t * @internal\n\t */\n\tprivate quantizeEStats(stats: { R: number[]; m: number[]; N: number }): {\n\t\tCov: number[];\n\t\tq: number[];\n\t\te: number[];\n\t\tL: number;\n\t\teMq255: number;\n\t\teMq: number;\n\t\trgba: number;\n\t} {\n\t\tconst R = stats.R;\n\t\tconst m = stats.m;\n\t\tconst N = stats.N;\n\n\t\tconst m0 = m[0];\n\t\tconst m1 = m[1];\n\t\tconst m2 = m[2];\n\t\tconst m3 = m[3];\n\t\tconst iN = N === 0 ? 0 : 1 / N;\n\t\tconst rj = [\n\t\t\tR[0] - m0 * m0 * iN,\n\t\t\tR[1] - m0 * m1 * iN,\n\t\t\tR[2] - m0 * m2 * iN,\n\t\t\tR[3] - m0 * m3 * iN,\n\t\t\tR[4] - m1 * m0 * iN,\n\t\t\tR[5] - m1 * m1 * iN,\n\t\t\tR[6] - m1 * m2 * iN,\n\t\t\tR[7] - m1 * m3 * iN,\n\t\t\tR[8] - m2 * m0 * iN,\n\t\t\tR[9] - m2 * m1 * iN,\n\t\t\tR[10] - m2 * m2 * iN,\n\t\t\tR[11] - m2 * m3 * iN,\n\t\t\tR[12] - m3 * m0 * iN,\n\t\t\tR[13] - m3 * m1 * iN,\n\t\t\tR[14] - m3 * m2 * iN,\n\t\t\tR[15] - m3 * m3 * iN\n\t\t];\n\n\t\tconst A = rj;\n\t\tlet b = [0.5, 0.5, 0.5, 0.5];\n\t\tlet mi = 0;\n\t\tlet tmi;\n\n\t\tif (N !== 0) {\n\t\t\tfor (let i = 0; i < 10; i++) {\n\t\t\t\tb = this.m4MultiplyVec(A, b);\n\t\t\t\ttmi = Math.sqrt(this.m4Dot(b, b));\n\t\t\t\tb = this.m4Sml(1 / tmi, b);\n\t\t\t\tif (Math.abs(tmi - mi) < 1e-9) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tmi = tmi;\n\t\t\t}\n\t\t}\n\t\tconst q = [m0 * iN, m1 * iN, m2 * iN, m3 * iN];\n\t\tconst eMq255 = this.m4Dot(this.m4Sml(255, q), b);\n\n\t\tconst ia = q[3] < 0.001 ? 0 : 1 / q[3];\n\n\t\treturn {\n\t\t\tCov: rj,\n\t\t\tq,\n\t\t\te: b,\n\t\t\tL: mi,\n\t\t\teMq255,\n\t\t\teMq: this.m4Dot(b, q),\n\t\t\trgba:\n\t\t\t\t((Math.round(255 * q[3]) << 24) |\n\t\t\t\t\t(Math.round(255 * q[2] * ia) << 16) |\n\t\t\t\t\t(Math.round(255 * q[1] * ia) << 8) |\n\t\t\t\t\t(Math.round(255 * q[0] * ia) << 0)) >>>\n\t\t\t\t0\n\t\t};\n\t}\n\n\t/**\n\t * Measure the signed distance of a colour sample from the split plane.\n\t * @param est The split estimator.\n\t * @param est.e The split plane normal vector.\n\t * @param est.eMq The split plane offset.\n\t * @param r The red channel value.\n\t * @param g The green channel value.\n\t * @param b The blue channel value.\n\t * @param a The alpha channel value.\n\t * @returns The signed distance from the split plane.\n\t * @internal\n\t */\n\tprivate quantizePlaneDst(\n\t\test: { e: number[]; eMq: number },\n\t\tr: number,\n\t\tg: number,\n\t\tb: number,\n\t\ta: number\n\t): number {\n\t\tconst e = est.e;\n\t\treturn e[0] * r + e[1] * g + e[2] * b + e[3] * a - est.eMq;\n\t}\n\n\t/**\n\t * Partition pixels in-place around the current split plane.\n\t * @param nImg The source pixel buffer.\n\t * @param nImg32 The same pixel buffer viewed as 32-bit values.\n\t * @param i0in The inclusive start offset.\n\t * @param i1in The exclusive end offset.\n\t * @param e The split plane normal vector.\n\t * @param eMq The split plane offset.\n\t * @returns The split point between the two partitions.\n\t * @internal\n\t */\n\tprivate quantizeSplitPixels(\n\t\tnImg: Uint8Array,\n\t\tnImg32: Uint32Array,\n\t\ti0in: number,\n\t\ti1in: number,\n\t\te: number[],\n\t\teMq: number\n\t): number {\n\t\tlet i1 = i1in - 4;\n\t\tlet i0 = i0in;\n\t\twhile (i0 < i1) {\n\t\t\twhile (this.quantizeVecDot(nImg, i0, e) <= eMq) {\n\t\t\t\ti0 += 4;\n\t\t\t}\n\t\t\twhile (this.quantizeVecDot(nImg, i1, e) > eMq) {\n\t\t\t\ti1 -= 4;\n\t\t\t}\n\t\t\tif (i0 >= i1) {\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tconst t = nImg32[i0 >> 2];\n\t\t\tnImg32[i0 >> 2] = nImg32[i1 >> 2];\n\t\t\tnImg32[i1 >> 2] = t;\n\n\t\t\ti0 += 4;\n\t\t\ti1 -= 4;\n\t\t}\n\t\twhile (this.quantizeVecDot(nImg, i0, e) > eMq) {\n\t\t\ti0 -= 4;\n\t\t}\n\t\treturn i0 + 4;\n\t}\n\n\t/**\n\t * Calculate the dot product between one RGBA pixel and a four-element vector.\n\t * @param nImg The source pixel buffer.\n\t * @param i The pixel offset.\n\t * @param e The four-element vector.\n\t * @returns The dot product value.\n\t * @internal\n\t */\n\tprivate quantizeVecDot(nImg: Uint8Array, i: number, e: number[]): number {\n\t\treturn nImg[i] * e[0] + nImg[i + 1] * e[1] + nImg[i + 2] * e[2] + nImg[i + 3] * e[3];\n\t}\n\n\t/**\n\t * Multiply a 4x4 matrix by a four-element vector.\n\t * @param m The matrix values.\n\t * @param v The vector values.\n\t * @returns The resulting vector.\n\t * @internal\n\t */\n\tprivate m4MultiplyVec(m: number[], v: number[]): number[] {\n\t\treturn [\n\t\t\tm[0] * v[0] + m[1] * v[1] + m[2] * v[2] + m[3] * v[3],\n\t\t\tm[4] * v[0] + m[5] * v[1] + m[6] * v[2] + m[7] * v[3],\n\t\t\tm[8] * v[0] + m[9] * v[1] + m[10] * v[2] + m[11] * v[3],\n\t\t\tm[12] * v[0] + m[13] * v[1] + m[14] * v[2] + m[15] * v[3]\n\t\t];\n\t}\n\n\t/**\n\t * Calculate the dot product of two four-element vectors.\n\t * @param x The first vector.\n\t * @param y The second vector.\n\t * @returns The dot product value.\n\t * @internal\n\t */\n\tprivate m4Dot(x: number[], y: number[]): number {\n\t\treturn x[0] * y[0] + x[1] * y[1] + x[2] * y[2] + x[3] * y[3];\n\t}\n\n\t/**\n\t * Multiply a four-element vector by a scalar.\n\t * @param a The scalar value.\n\t * @param y The vector to scale.\n\t * @returns The scaled vector.\n\t * @internal\n\t */\n\tprivate m4Sml(a: number, y: number[]): number[] {\n\t\treturn [a * y[0], a * y[1], a * y[2], a * y[3]];\n\t}\n\n\t/**\n\t * Premultiply image colour channels by alpha.\n\t * @param img The source image data.\n\t * @param roundA Whether alpha should be rounded to fully transparent or opaque.\n\t * @returns The alpha-premultiplied image data.\n\t * @internal\n\t */\n\tprivate alphaMul(img: Uint8Array, roundA: number): Uint8Array {\n\t\tconst nImg = new Uint8Array(img.length);\n\t\tconst area = img.length >> 2;\n\t\tfor (let i = 0; i < area; i++) {\n\t\t\tconst qi = i << 2;\n\t\t\tlet ia = img[qi + 3];\n\t\t\tif (roundA) {\n\t\t\t\tia = ia < 128 ? 0 : 255;\n\t\t\t}\n\t\t\tconst a = ia * (1 / 255);\n\t\t\tnImg[qi + 0] = img[qi + 0] * a;\n\t\t\tnImg[qi + 1] = img[qi + 1] * a;\n\t\t\tnImg[qi + 2] = img[qi + 2] * a;\n\t\t\tnImg[qi + 3] = ia;\n\t\t}\n\t\treturn nImg;\n\t}\n}\n"]}
|
package/docs/changelog.md
CHANGED
|
@@ -1,5 +1,208 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [0.0.4-next.11](https://github.com/iotaledger/twin-framework/compare/image-v0.0.4-next.10...image-v0.0.4-next.11) (2026-06-15)
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
### Miscellaneous Chores
|
|
7
|
+
|
|
8
|
+
* **image:** Synchronize repo versions
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
### Dependencies
|
|
12
|
+
|
|
13
|
+
* The following workspace dependencies were updated
|
|
14
|
+
* dependencies
|
|
15
|
+
* @twin.org/core bumped from 0.0.4-next.10 to 0.0.4-next.11
|
|
16
|
+
* @twin.org/nameof bumped from 0.0.4-next.10 to 0.0.4-next.11
|
|
17
|
+
* devDependencies
|
|
18
|
+
* @twin.org/nameof-transformer bumped from 0.0.4-next.10 to 0.0.4-next.11
|
|
19
|
+
* @twin.org/nameof-vitest-plugin bumped from 0.0.4-next.10 to 0.0.4-next.11
|
|
20
|
+
* @twin.org/validate-locales bumped from 0.0.4-next.10 to 0.0.4-next.11
|
|
21
|
+
|
|
22
|
+
## [0.0.4-next.10](https://github.com/iotaledger/twin-framework/compare/image-v0.0.4-next.9...image-v0.0.4-next.10) (2026-06-15)
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
### Features
|
|
26
|
+
|
|
27
|
+
* add context id features ([#206](https://github.com/iotaledger/twin-framework/issues/206)) ([ef0d4ee](https://github.com/iotaledger/twin-framework/commit/ef0d4ee11a4f5fc6cc6f52a4958ce905c04ee13b))
|
|
28
|
+
* add guards arrayEndsWith and arrayStartsWith ([95d875e](https://github.com/iotaledger/twin-framework/commit/95d875ec8ccb4713c145fdde941d4cfedcec2ed3))
|
|
29
|
+
* eslint migration to flat config ([74427d7](https://github.com/iotaledger/twin-framework/commit/74427d78d342167f7850e49ab87269326355befe))
|
|
30
|
+
* locales validation ([#197](https://github.com/iotaledger/twin-framework/issues/197)) ([55fdadb](https://github.com/iotaledger/twin-framework/commit/55fdadb13595ce0047f787bd1d4135d429a99f12))
|
|
31
|
+
* relocate core packages from tools ([bcab8f3](https://github.com/iotaledger/twin-framework/commit/bcab8f3160442ea4fcaf442947462504f3d6a17d))
|
|
32
|
+
* typescript 6 update ([1d10f31](https://github.com/iotaledger/twin-framework/commit/1d10f31e6516ec622773f45e88af82fe749b384a))
|
|
33
|
+
* update dependencies ([4da77ab](https://github.com/iotaledger/twin-framework/commit/4da77ab30f499e52825ac5a76f51436ceb59c26e))
|
|
34
|
+
* update dependencies ([f3bd015](https://github.com/iotaledger/twin-framework/commit/f3bd015efd169196b7e0335f5cab876ba6ca1d75))
|
|
35
|
+
* use cause instead of inner for errors ([1f4acc4](https://github.com/iotaledger/twin-framework/commit/1f4acc4d7a6b71a134d9547da9bf40de1e1e49da))
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
### Bug Fixes
|
|
39
|
+
|
|
40
|
+
* ensure __decorate is defined for decorators ([103a563](https://github.com/iotaledger/twin-framework/commit/103a563ce01ebdef6240d2e590e7b026e8692684))
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
### Dependencies
|
|
44
|
+
|
|
45
|
+
* The following workspace dependencies were updated
|
|
46
|
+
* dependencies
|
|
47
|
+
* @twin.org/core bumped from 0.0.4-next.9 to 0.0.4-next.10
|
|
48
|
+
* @twin.org/nameof bumped from 0.0.4-next.9 to 0.0.4-next.10
|
|
49
|
+
* devDependencies
|
|
50
|
+
* @twin.org/nameof-transformer bumped from 0.0.4-next.9 to 0.0.4-next.10
|
|
51
|
+
* @twin.org/nameof-vitest-plugin bumped from 0.0.4-next.9 to 0.0.4-next.10
|
|
52
|
+
* @twin.org/validate-locales bumped from 0.0.4-next.9 to 0.0.4-next.10
|
|
53
|
+
|
|
54
|
+
## [0.0.4-next.9](https://github.com/iotaledger/twin-framework/compare/image-v0.0.4-next.8...image-v0.0.4-next.9) (2026-06-15)
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
### Miscellaneous Chores
|
|
58
|
+
|
|
59
|
+
* **image:** Synchronize repo versions
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
### Dependencies
|
|
63
|
+
|
|
64
|
+
* The following workspace dependencies were updated
|
|
65
|
+
* dependencies
|
|
66
|
+
* @twin.org/core bumped from 0.0.4-next.8 to 0.0.4-next.9
|
|
67
|
+
* @twin.org/nameof bumped from 0.0.4-next.8 to 0.0.4-next.9
|
|
68
|
+
* devDependencies
|
|
69
|
+
* @twin.org/nameof-transformer bumped from 0.0.4-next.8 to 0.0.4-next.9
|
|
70
|
+
* @twin.org/nameof-vitest-plugin bumped from 0.0.4-next.8 to 0.0.4-next.9
|
|
71
|
+
* @twin.org/validate-locales bumped from 0.0.4-next.8 to 0.0.4-next.9
|
|
72
|
+
|
|
73
|
+
## [0.0.4-next.8](https://github.com/iotaledger/twin-framework/compare/image-v0.0.4-next.7...image-v0.0.4-next.8) (2026-06-10)
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
### Miscellaneous Chores
|
|
77
|
+
|
|
78
|
+
* **image:** Synchronize repo versions
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
### Dependencies
|
|
82
|
+
|
|
83
|
+
* The following workspace dependencies were updated
|
|
84
|
+
* dependencies
|
|
85
|
+
* @twin.org/core bumped from 0.0.4-next.7 to 0.0.4-next.8
|
|
86
|
+
* @twin.org/nameof bumped from 0.0.4-next.7 to 0.0.4-next.8
|
|
87
|
+
* devDependencies
|
|
88
|
+
* @twin.org/nameof-transformer bumped from 0.0.4-next.7 to 0.0.4-next.8
|
|
89
|
+
* @twin.org/nameof-vitest-plugin bumped from 0.0.4-next.7 to 0.0.4-next.8
|
|
90
|
+
* @twin.org/validate-locales bumped from 0.0.4-next.7 to 0.0.4-next.8
|
|
91
|
+
|
|
92
|
+
## [0.0.4-next.7](https://github.com/iotaledger/twin-framework/compare/image-v0.0.4-next.6...image-v0.0.4-next.7) (2026-06-10)
|
|
93
|
+
|
|
94
|
+
|
|
95
|
+
### Miscellaneous Chores
|
|
96
|
+
|
|
97
|
+
* **image:** Synchronize repo versions
|
|
98
|
+
|
|
99
|
+
|
|
100
|
+
### Dependencies
|
|
101
|
+
|
|
102
|
+
* The following workspace dependencies were updated
|
|
103
|
+
* dependencies
|
|
104
|
+
* @twin.org/core bumped from 0.0.4-next.6 to 0.0.4-next.7
|
|
105
|
+
* @twin.org/nameof bumped from 0.0.4-next.6 to 0.0.4-next.7
|
|
106
|
+
* devDependencies
|
|
107
|
+
* @twin.org/nameof-transformer bumped from 0.0.4-next.6 to 0.0.4-next.7
|
|
108
|
+
* @twin.org/nameof-vitest-plugin bumped from 0.0.4-next.6 to 0.0.4-next.7
|
|
109
|
+
* @twin.org/validate-locales bumped from 0.0.4-next.6 to 0.0.4-next.7
|
|
110
|
+
|
|
111
|
+
## [0.0.4-next.6](https://github.com/iotaledger/twin-framework/compare/image-v0.0.4-next.5...image-v0.0.4-next.6) (2026-06-05)
|
|
112
|
+
|
|
113
|
+
|
|
114
|
+
### Miscellaneous Chores
|
|
115
|
+
|
|
116
|
+
* **image:** Synchronize repo versions
|
|
117
|
+
|
|
118
|
+
|
|
119
|
+
### Dependencies
|
|
120
|
+
|
|
121
|
+
* The following workspace dependencies were updated
|
|
122
|
+
* dependencies
|
|
123
|
+
* @twin.org/core bumped from 0.0.4-next.5 to 0.0.4-next.6
|
|
124
|
+
* @twin.org/nameof bumped from 0.0.4-next.5 to 0.0.4-next.6
|
|
125
|
+
* devDependencies
|
|
126
|
+
* @twin.org/nameof-transformer bumped from 0.0.4-next.5 to 0.0.4-next.6
|
|
127
|
+
* @twin.org/nameof-vitest-plugin bumped from 0.0.4-next.5 to 0.0.4-next.6
|
|
128
|
+
* @twin.org/validate-locales bumped from 0.0.4-next.5 to 0.0.4-next.6
|
|
129
|
+
|
|
130
|
+
## [0.0.4-next.5](https://github.com/iotaledger/twin-framework/compare/image-v0.0.4-next.4...image-v0.0.4-next.5) (2026-06-04)
|
|
131
|
+
|
|
132
|
+
|
|
133
|
+
### Miscellaneous Chores
|
|
134
|
+
|
|
135
|
+
* **image:** Synchronize repo versions
|
|
136
|
+
|
|
137
|
+
|
|
138
|
+
### Dependencies
|
|
139
|
+
|
|
140
|
+
* The following workspace dependencies were updated
|
|
141
|
+
* dependencies
|
|
142
|
+
* @twin.org/core bumped from 0.0.4-next.4 to 0.0.4-next.5
|
|
143
|
+
* @twin.org/nameof bumped from 0.0.4-next.4 to 0.0.4-next.5
|
|
144
|
+
* devDependencies
|
|
145
|
+
* @twin.org/nameof-transformer bumped from 0.0.4-next.4 to 0.0.4-next.5
|
|
146
|
+
* @twin.org/nameof-vitest-plugin bumped from 0.0.4-next.4 to 0.0.4-next.5
|
|
147
|
+
* @twin.org/validate-locales bumped from 0.0.4-next.4 to 0.0.4-next.5
|
|
148
|
+
|
|
149
|
+
## [0.0.4-next.4](https://github.com/iotaledger/twin-framework/compare/image-v0.0.4-next.3...image-v0.0.4-next.4) (2026-06-02)
|
|
150
|
+
|
|
151
|
+
|
|
152
|
+
### Miscellaneous Chores
|
|
153
|
+
|
|
154
|
+
* **image:** Synchronize repo versions
|
|
155
|
+
|
|
156
|
+
|
|
157
|
+
### Dependencies
|
|
158
|
+
|
|
159
|
+
* The following workspace dependencies were updated
|
|
160
|
+
* dependencies
|
|
161
|
+
* @twin.org/core bumped from 0.0.4-next.3 to 0.0.4-next.4
|
|
162
|
+
* @twin.org/nameof bumped from 0.0.4-next.3 to 0.0.4-next.4
|
|
163
|
+
* devDependencies
|
|
164
|
+
* @twin.org/nameof-transformer bumped from 0.0.4-next.3 to 0.0.4-next.4
|
|
165
|
+
* @twin.org/nameof-vitest-plugin bumped from 0.0.4-next.3 to 0.0.4-next.4
|
|
166
|
+
* @twin.org/validate-locales bumped from 0.0.4-next.3 to 0.0.4-next.4
|
|
167
|
+
|
|
168
|
+
## [0.0.4-next.3](https://github.com/iotaledger/twin-framework/compare/image-v0.0.4-next.2...image-v0.0.4-next.3) (2026-05-28)
|
|
169
|
+
|
|
170
|
+
|
|
171
|
+
### Miscellaneous Chores
|
|
172
|
+
|
|
173
|
+
* **image:** Synchronize repo versions
|
|
174
|
+
|
|
175
|
+
|
|
176
|
+
### Dependencies
|
|
177
|
+
|
|
178
|
+
* The following workspace dependencies were updated
|
|
179
|
+
* dependencies
|
|
180
|
+
* @twin.org/core bumped from 0.0.4-next.2 to 0.0.4-next.3
|
|
181
|
+
* @twin.org/nameof bumped from 0.0.4-next.2 to 0.0.4-next.3
|
|
182
|
+
* devDependencies
|
|
183
|
+
* @twin.org/nameof-transformer bumped from 0.0.4-next.2 to 0.0.4-next.3
|
|
184
|
+
* @twin.org/nameof-vitest-plugin bumped from 0.0.4-next.2 to 0.0.4-next.3
|
|
185
|
+
* @twin.org/validate-locales bumped from 0.0.4-next.2 to 0.0.4-next.3
|
|
186
|
+
|
|
187
|
+
## [0.0.4-next.2](https://github.com/iotaledger/twin-framework/compare/image-v0.0.4-next.1...image-v0.0.4-next.2) (2026-05-28)
|
|
188
|
+
|
|
189
|
+
|
|
190
|
+
### Miscellaneous Chores
|
|
191
|
+
|
|
192
|
+
* **image:** Synchronize repo versions
|
|
193
|
+
|
|
194
|
+
|
|
195
|
+
### Dependencies
|
|
196
|
+
|
|
197
|
+
* The following workspace dependencies were updated
|
|
198
|
+
* dependencies
|
|
199
|
+
* @twin.org/core bumped from 0.0.4-next.1 to 0.0.4-next.2
|
|
200
|
+
* @twin.org/nameof bumped from 0.0.4-next.1 to 0.0.4-next.2
|
|
201
|
+
* devDependencies
|
|
202
|
+
* @twin.org/nameof-transformer bumped from 0.0.4-next.1 to 0.0.4-next.2
|
|
203
|
+
* @twin.org/nameof-vitest-plugin bumped from 0.0.4-next.1 to 0.0.4-next.2
|
|
204
|
+
* @twin.org/validate-locales bumped from 0.0.4-next.1 to 0.0.4-next.2
|
|
205
|
+
|
|
3
206
|
## [0.0.4-next.1](https://github.com/iotaledger/twin-framework/compare/image-v0.0.4-next.0...image-v0.0.4-next.1) (2026-05-27)
|
|
4
207
|
|
|
5
208
|
|
package/package.json
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@twin.org/image",
|
|
3
|
-
"version": "0.0.4-next.
|
|
3
|
+
"version": "0.0.4-next.11",
|
|
4
4
|
"description": "Classes for image manipulation",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
7
|
-
"url": "git+https://github.com/iotaledger/framework.git",
|
|
7
|
+
"url": "git+https://github.com/iotaledger/twin-framework.git",
|
|
8
8
|
"directory": "packages/image"
|
|
9
9
|
},
|
|
10
10
|
"author": "martyn.janes@iota.org",
|
|
@@ -14,8 +14,8 @@
|
|
|
14
14
|
"node": ">=20.0.0"
|
|
15
15
|
},
|
|
16
16
|
"dependencies": {
|
|
17
|
-
"@twin.org/core": "0.0.4-next.
|
|
18
|
-
"@twin.org/nameof": "0.0.4-next.
|
|
17
|
+
"@twin.org/core": "0.0.4-next.11",
|
|
18
|
+
"@twin.org/nameof": "0.0.4-next.11"
|
|
19
19
|
},
|
|
20
20
|
"main": "./dist/es/index.js",
|
|
21
21
|
"types": "./dist/types/index.d.ts",
|
|
@@ -40,7 +40,7 @@
|
|
|
40
40
|
"blockchain"
|
|
41
41
|
],
|
|
42
42
|
"bugs": {
|
|
43
|
-
"url": "git+https://github.com/iotaledger/framework/issues"
|
|
43
|
+
"url": "git+https://github.com/iotaledger/twin-framework/issues"
|
|
44
44
|
},
|
|
45
45
|
"homepage": "https://twindev.org"
|
|
46
46
|
}
|