@twin.org/image 0.0.4-next.4 → 0.0.4-next.6

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
- /** @internal */
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,43 @@
1
1
  # Changelog
2
2
 
3
+ ## [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)
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.5 to 0.0.4-next.6
16
+ * @twin.org/nameof bumped from 0.0.4-next.5 to 0.0.4-next.6
17
+ * devDependencies
18
+ * @twin.org/nameof-transformer bumped from 0.0.4-next.5 to 0.0.4-next.6
19
+ * @twin.org/nameof-vitest-plugin bumped from 0.0.4-next.5 to 0.0.4-next.6
20
+ * @twin.org/validate-locales bumped from 0.0.4-next.5 to 0.0.4-next.6
21
+
22
+ ## [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)
23
+
24
+
25
+ ### Miscellaneous Chores
26
+
27
+ * **image:** Synchronize repo versions
28
+
29
+
30
+ ### Dependencies
31
+
32
+ * The following workspace dependencies were updated
33
+ * dependencies
34
+ * @twin.org/core bumped from 0.0.4-next.4 to 0.0.4-next.5
35
+ * @twin.org/nameof bumped from 0.0.4-next.4 to 0.0.4-next.5
36
+ * devDependencies
37
+ * @twin.org/nameof-transformer bumped from 0.0.4-next.4 to 0.0.4-next.5
38
+ * @twin.org/nameof-vitest-plugin bumped from 0.0.4-next.4 to 0.0.4-next.5
39
+ * @twin.org/validate-locales bumped from 0.0.4-next.4 to 0.0.4-next.5
40
+
3
41
  ## [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)
4
42
 
5
43
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@twin.org/image",
3
- "version": "0.0.4-next.4",
3
+ "version": "0.0.4-next.6",
4
4
  "description": "Classes for image manipulation",
5
5
  "repository": {
6
6
  "type": "git",
@@ -14,8 +14,8 @@
14
14
  "node": ">=20.0.0"
15
15
  },
16
16
  "dependencies": {
17
- "@twin.org/core": "0.0.4-next.4",
18
- "@twin.org/nameof": "0.0.4-next.4"
17
+ "@twin.org/core": "0.0.4-next.6",
18
+ "@twin.org/nameof": "0.0.4-next.6"
19
19
  },
20
20
  "main": "./dist/es/index.js",
21
21
  "types": "./dist/types/index.d.ts",