emf-converter 4.4.15 → 4.5.0

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.
package/dist/browser.js CHANGED
@@ -1210,7 +1210,7 @@ var require_decoder = __commonJS({
1210
1210
  }
1211
1211
  return code[0].children;
1212
1212
  }
1213
- function decodeScan(data, offset, frame2, components, resetInterval, spectralStart, spectralEnd, successivePrev, successive, opts) {
1213
+ function decodeScan2(data, offset, frame2, components, resetInterval, spectralStart, spectralEnd, successivePrev, successive, opts) {
1214
1214
  frame2.precision;
1215
1215
  frame2.samplesPerLine;
1216
1216
  frame2.scanLines;
@@ -1851,7 +1851,7 @@ var require_decoder = __commonJS({
1851
1851
  var spectralStart = data[offset++];
1852
1852
  var spectralEnd = data[offset++];
1853
1853
  var successiveApproximation = data[offset++];
1854
- var processed = decodeScan(
1854
+ var processed = decodeScan2(
1855
1855
  data,
1856
1856
  offset,
1857
1857
  frame2,
@@ -2305,14 +2305,14 @@ var require_uint8 = __commonJS({
2305
2305
  for (var i = 0; i < 8; i++) {
2306
2306
  bits[7 - i] = !!(_byte & 1 << i);
2307
2307
  }
2308
- return Object.keys(schema).reduce(function(res, key) {
2308
+ return Object.keys(schema).reduce(function(res2, key) {
2309
2309
  var def = schema[key];
2310
2310
  if (def.length) {
2311
- res[key] = subBitsTotal(bits, def.index, def.length);
2311
+ res2[key] = subBitsTotal(bits, def.index, def.length);
2312
2312
  } else {
2313
- res[key] = bits[def.index];
2313
+ res2[key] = bits[def.index];
2314
2314
  }
2315
- return res;
2315
+ return res2;
2316
2316
  }, {});
2317
2317
  };
2318
2318
  };
@@ -2921,13 +2921,13 @@ var require_trees = __commonJS({
2921
2921
  );
2922
2922
  }
2923
2923
  function bi_reverse(code, len) {
2924
- var res = 0;
2924
+ var res2 = 0;
2925
2925
  do {
2926
- res |= code & 1;
2926
+ res2 |= code & 1;
2927
2927
  code >>>= 1;
2928
- res <<= 1;
2928
+ res2 <<= 1;
2929
2929
  } while (--len > 0);
2930
- return res >>> 1;
2930
+ return res2 >>> 1;
2931
2931
  }
2932
2932
  function bi_flush(s) {
2933
2933
  if (s.bi_valid === 16) {
@@ -10312,10 +10312,10 @@ async function decodePng(bytes) {
10312
10312
  return { width, height, data: out };
10313
10313
  }
10314
10314
 
10315
- // src/jpeg-decoder.ts
10315
+ // src/jpeg-decoder-legacy.ts
10316
10316
  var import_jpeg_js = __toESM(require_jpeg_js());
10317
10317
  var options = { useTArray: true, formatAsRGBA: true, maxResolutionInMP: 67.108864, maxMemoryUsageInMB: 512 };
10318
- function decodeJpegPixels(bytes, colorTransform) {
10318
+ function decodeJpegPixelsLegacy(bytes, colorTransform) {
10319
10319
  let sampling = [];
10320
10320
  let adobeTransform;
10321
10321
  let adobeOffset = -1;
@@ -10372,6 +10372,600 @@ function decodeJpegPixels(bytes, colorTransform) {
10372
10372
  return { ...raw, data };
10373
10373
  }
10374
10374
 
10375
+ // src/jpeg-turbo.ts
10376
+ var ZIGZAG = [
10377
+ 0,
10378
+ 1,
10379
+ 8,
10380
+ 16,
10381
+ 9,
10382
+ 2,
10383
+ 3,
10384
+ 10,
10385
+ 17,
10386
+ 24,
10387
+ 32,
10388
+ 25,
10389
+ 18,
10390
+ 11,
10391
+ 4,
10392
+ 5,
10393
+ 12,
10394
+ 19,
10395
+ 26,
10396
+ 33,
10397
+ 40,
10398
+ 48,
10399
+ 41,
10400
+ 34,
10401
+ 27,
10402
+ 20,
10403
+ 13,
10404
+ 6,
10405
+ 7,
10406
+ 14,
10407
+ 21,
10408
+ 28,
10409
+ 35,
10410
+ 42,
10411
+ 49,
10412
+ 56,
10413
+ 57,
10414
+ 50,
10415
+ 43,
10416
+ 36,
10417
+ 29,
10418
+ 22,
10419
+ 15,
10420
+ 23,
10421
+ 30,
10422
+ 37,
10423
+ 44,
10424
+ 51,
10425
+ 58,
10426
+ 59,
10427
+ 52,
10428
+ 45,
10429
+ 38,
10430
+ 31,
10431
+ 39,
10432
+ 46,
10433
+ 53,
10434
+ 60,
10435
+ 61,
10436
+ 54,
10437
+ 47,
10438
+ 55,
10439
+ 62,
10440
+ 63
10441
+ ];
10442
+ function buildHuffman2(counts, values) {
10443
+ const maxcode = new Int32Array(18).fill(-1);
10444
+ const valptr = new Int32Array(17);
10445
+ const mincode = new Int32Array(17);
10446
+ let code = 0;
10447
+ let k = 0;
10448
+ for (let l = 1; l <= 16; l++) {
10449
+ valptr[l] = k;
10450
+ mincode[l] = code;
10451
+ code += counts[l - 1];
10452
+ k += counts[l - 1];
10453
+ maxcode[l] = counts[l - 1] ? code - 1 : -1;
10454
+ code <<= 1;
10455
+ }
10456
+ return { maxcode, valptr, mincode, values };
10457
+ }
10458
+ var BitReader = class {
10459
+ constructor(data, start) {
10460
+ this.data = data;
10461
+ this.bits = 0;
10462
+ this.count = 0;
10463
+ this.marker = false;
10464
+ this.pos = start;
10465
+ }
10466
+ reset() {
10467
+ this.bits = 0;
10468
+ this.count = 0;
10469
+ this.marker = false;
10470
+ }
10471
+ bit() {
10472
+ if (this.count === 0) {
10473
+ let b = 0;
10474
+ if (!this.marker && this.pos < this.data.length) {
10475
+ b = this.data[this.pos++];
10476
+ if (b === 255) {
10477
+ let n = this.data[this.pos];
10478
+ while (n === 255) {
10479
+ this.pos++;
10480
+ n = this.data[this.pos];
10481
+ }
10482
+ if (n === 0) {
10483
+ this.pos++;
10484
+ } else {
10485
+ this.marker = true;
10486
+ this.pos--;
10487
+ b = 0;
10488
+ }
10489
+ }
10490
+ }
10491
+ this.bits = b;
10492
+ this.count = 8;
10493
+ }
10494
+ this.count--;
10495
+ return this.bits >> this.count & 1;
10496
+ }
10497
+ receive(n) {
10498
+ let v = 0;
10499
+ while (n--) v = v << 1 | this.bit();
10500
+ return v;
10501
+ }
10502
+ receiveExtend(n) {
10503
+ if (n === 0) return 0;
10504
+ const v = this.receive(n);
10505
+ return v < 1 << n - 1 ? v - (1 << n) + 1 : v;
10506
+ }
10507
+ decode(h) {
10508
+ let code = 0;
10509
+ for (let l = 1; l <= 16; l++) {
10510
+ code = code << 1 | this.bit();
10511
+ if (h.maxcode[l] >= 0 && code <= h.maxcode[l] && code >= h.mincode[l]) return h.values[h.valptr[l] + code - h.mincode[l]];
10512
+ }
10513
+ throw new Error("Bad Huffman code");
10514
+ }
10515
+ };
10516
+ var CONST_BITS = 13;
10517
+ var PASS1_BITS = 2;
10518
+ var FIX_0_298631336 = 2446;
10519
+ var FIX_0_541196100 = 4433;
10520
+ var FIX_0_765366865 = 6270;
10521
+ var FIX_1_175875602 = 9633;
10522
+ var FIX_1_501321110 = 12299;
10523
+ var FIX_2_053119869 = 16819;
10524
+ var FIX_3_072711026 = 25172;
10525
+ function descale(x, n) {
10526
+ return x + (1 << n - 1) >> n;
10527
+ }
10528
+ function idct1d(v, r) {
10529
+ let z2 = v[2];
10530
+ let z3 = v[6];
10531
+ let z1 = (z2 + z3) * FIX_0_541196100;
10532
+ let tmp2 = z1 + z3 * -15137;
10533
+ let tmp3 = z1 + z2 * FIX_0_765366865;
10534
+ let tmp0 = v[0] + v[4] << CONST_BITS;
10535
+ let tmp1 = v[0] - v[4] << CONST_BITS;
10536
+ const tmp10 = tmp0 + tmp3;
10537
+ const tmp13 = tmp0 - tmp3;
10538
+ const tmp11 = tmp1 + tmp2;
10539
+ const tmp12 = tmp1 - tmp2;
10540
+ tmp0 = v[7];
10541
+ tmp1 = v[5];
10542
+ tmp2 = v[3];
10543
+ tmp3 = v[1];
10544
+ z1 = tmp0 + tmp3;
10545
+ z2 = tmp1 + tmp2;
10546
+ z3 = tmp0 + tmp2;
10547
+ let z4 = tmp1 + tmp3;
10548
+ const z5 = (z3 + z4) * FIX_1_175875602;
10549
+ tmp0 *= FIX_0_298631336;
10550
+ tmp1 *= FIX_2_053119869;
10551
+ tmp2 *= FIX_3_072711026;
10552
+ tmp3 *= FIX_1_501321110;
10553
+ z1 *= -7373;
10554
+ z2 *= -20995;
10555
+ z3 *= -16069;
10556
+ z4 *= -3196;
10557
+ z3 += z5;
10558
+ z4 += z5;
10559
+ tmp0 += z1 + z3;
10560
+ tmp1 += z2 + z4;
10561
+ tmp2 += z2 + z3;
10562
+ tmp3 += z1 + z4;
10563
+ r[0] = tmp10 + tmp3;
10564
+ r[7] = tmp10 - tmp3;
10565
+ r[1] = tmp11 + tmp2;
10566
+ r[6] = tmp11 - tmp2;
10567
+ r[2] = tmp12 + tmp1;
10568
+ r[5] = tmp12 - tmp1;
10569
+ r[3] = tmp13 + tmp0;
10570
+ r[4] = tmp13 - tmp0;
10571
+ }
10572
+ var vec = new Array(8).fill(0);
10573
+ var res = new Array(8).fill(0);
10574
+ function idctBlock(coef, offset, quant, out, outOffset, stride, ws) {
10575
+ for (let col = 0; col < 8; col++) {
10576
+ let ac = 0;
10577
+ for (let r = 0; r < 8; r++) {
10578
+ vec[r] = coef[offset + r * 8 + col] * quant[r * 8 + col];
10579
+ if (r) ac |= vec[r];
10580
+ }
10581
+ if (!ac) {
10582
+ const dc = vec[0] << PASS1_BITS;
10583
+ for (let r = 0; r < 8; r++) ws[r * 8 + col] = dc;
10584
+ continue;
10585
+ }
10586
+ idct1d(vec, res);
10587
+ for (let r = 0; r < 8; r++) ws[r * 8 + col] = descale(res[r], CONST_BITS - PASS1_BITS);
10588
+ }
10589
+ for (let row = 0; row < 8; row++) {
10590
+ let ac = 0;
10591
+ for (let c = 0; c < 8; c++) {
10592
+ vec[c] = ws[row * 8 + c];
10593
+ if (c) ac |= vec[c];
10594
+ }
10595
+ const o = outOffset + row * stride;
10596
+ if (!ac) {
10597
+ const x = descale(vec[0], PASS1_BITS + 3) + 128;
10598
+ const dc = x < 0 ? 0 : x > 255 ? 255 : x;
10599
+ for (let c = 0; c < 8; c++) out[o + c] = dc;
10600
+ continue;
10601
+ }
10602
+ idct1d(vec, res);
10603
+ for (let c = 0; c < 8; c++) {
10604
+ const x = descale(res[c], CONST_BITS + PASS1_BITS + 3) + 128;
10605
+ out[o + c] = x < 0 ? 0 : x > 255 ? 255 : x;
10606
+ }
10607
+ }
10608
+ }
10609
+ function upsample(plane, stride, cw, ch, hr, vr, width, height) {
10610
+ const out = new Uint8Array(width * height);
10611
+ const at = (x, y) => plane[Math.min(ch - 1, Math.max(0, y)) * stride + x];
10612
+ if (hr === 1 && vr === 1) {
10613
+ for (let y = 0; y < height; y++) for (let x = 0; x < width; x++) out[y * width + x] = plane[y * stride + x];
10614
+ return out;
10615
+ }
10616
+ if (hr === 2 && vr === 1) {
10617
+ for (let y = 0; y < height; y++) {
10618
+ for (let i = 0; i < cw; i++) {
10619
+ const v = at(i, y);
10620
+ const a = i === 0 ? v : 3 * v + at(i - 1, y) + 1 >> 2;
10621
+ const b = i === cw - 1 ? v : 3 * v + at(i + 1, y) + 2 >> 2;
10622
+ if (2 * i < width) out[y * width + 2 * i] = a;
10623
+ if (2 * i + 1 < width) out[y * width + 2 * i + 1] = b;
10624
+ }
10625
+ }
10626
+ return out;
10627
+ }
10628
+ if (hr === 2 && vr === 2) {
10629
+ for (let y = 0; y < height; y++) {
10630
+ const iy = y >> 1;
10631
+ const ny = (y & 1) === 0 ? iy - 1 : iy + 1;
10632
+ const sum = (i) => 3 * at(i, iy) + at(i, ny);
10633
+ for (let i = 0; i < cw; i++) {
10634
+ const t = sum(i);
10635
+ const a = i === 0 ? t * 4 + 8 >> 4 : 3 * t + sum(i - 1) + 8 >> 4;
10636
+ const b = i === cw - 1 ? t * 4 + 7 >> 4 : 3 * t + sum(i + 1) + 7 >> 4;
10637
+ if (2 * i < width) out[y * width + 2 * i] = a;
10638
+ if (2 * i + 1 < width) out[y * width + 2 * i + 1] = b;
10639
+ }
10640
+ }
10641
+ return out;
10642
+ }
10643
+ if (hr === 1 && vr === 2) {
10644
+ for (let y = 0; y < height; y++) {
10645
+ const iy = y >> 1;
10646
+ const upper = (y & 1) === 0;
10647
+ const ny = upper ? iy - 1 : iy + 1;
10648
+ const bias = upper ? 1 : 2;
10649
+ for (let x = 0; x < width; x++) out[y * width + x] = 3 * at(x, iy) + at(x, ny) + bias >> 2;
10650
+ }
10651
+ return out;
10652
+ }
10653
+ for (let y = 0; y < height; y++) {
10654
+ for (let x = 0; x < width; x++) out[y * width + x] = plane[Math.min(ch - 1, Math.floor(y / vr)) * stride + Math.min(cw - 1, Math.floor(x / hr))];
10655
+ }
10656
+ return out;
10657
+ }
10658
+ function decodeJpegTurbo(bytes, colorTransform) {
10659
+ try {
10660
+ return decodeInner(bytes, colorTransform);
10661
+ } catch {
10662
+ return null;
10663
+ }
10664
+ }
10665
+ function decodeInner(data, colorTransform) {
10666
+ if (data[0] !== 255 || data[1] !== 216) return null;
10667
+ const quant = [];
10668
+ const dcTables = [];
10669
+ const acTables = [];
10670
+ let comps = [];
10671
+ let width = 0;
10672
+ let height = 0;
10673
+ let progressive = false;
10674
+ let restart = 0;
10675
+ let adobe;
10676
+ let maxH = 1;
10677
+ let maxV = 1;
10678
+ let sawScan = false;
10679
+ let pos = 2;
10680
+ const ws = new Int32Array(64);
10681
+ while (pos < data.length) {
10682
+ if (data[pos] !== 255) {
10683
+ pos++;
10684
+ continue;
10685
+ }
10686
+ const marker = data[pos + 1];
10687
+ if (marker === 255) {
10688
+ pos++;
10689
+ continue;
10690
+ }
10691
+ pos += 2;
10692
+ if (marker === 216 || marker === 1 || marker >= 208 && marker <= 215 || marker === 0) continue;
10693
+ if (marker === 217) break;
10694
+ const len = data[pos] * 256 + data[pos + 1];
10695
+ const seg = pos + 2;
10696
+ const end = pos + len;
10697
+ if (marker === 219) {
10698
+ let p = seg;
10699
+ while (p < end) {
10700
+ const pq = data[p] >> 4;
10701
+ const tq = data[p] & 15;
10702
+ p++;
10703
+ const table = new Int32Array(64);
10704
+ for (let i = 0; i < 64; i++) {
10705
+ table[ZIGZAG[i]] = pq ? data[p] * 256 + data[p + 1] : data[p];
10706
+ p += pq ? 2 : 1;
10707
+ }
10708
+ quant[tq] = table;
10709
+ }
10710
+ } else if (marker === 192 || marker === 193 || marker === 194) {
10711
+ if (data[seg] !== 8) return null;
10712
+ progressive = marker === 194;
10713
+ height = data[seg + 1] * 256 + data[seg + 2];
10714
+ width = data[seg + 3] * 256 + data[seg + 4];
10715
+ const n = data[seg + 5];
10716
+ if (n !== 1 && n !== 3 || !width || !height) return null;
10717
+ comps = [];
10718
+ for (let i = 0; i < n; i++) {
10719
+ const h = data[seg + 7 + i * 3] >> 4;
10720
+ const v = data[seg + 7 + i * 3] & 15;
10721
+ if (!h || !v) return null;
10722
+ comps.push({ id: data[seg + 6 + i * 3], h, v, tq: data[seg + 8 + i * 3], blocksW: 0, blocksH: 0, coefs: new Int16Array(0), pred: 0, dc: 0, ac: 0 });
10723
+ }
10724
+ maxH = Math.max(...comps.map((c) => c.h));
10725
+ maxV = Math.max(...comps.map((c) => c.v));
10726
+ const mcusX = Math.ceil(width / (8 * maxH));
10727
+ const mcusY = Math.ceil(height / (8 * maxV));
10728
+ for (const c of comps) {
10729
+ c.blocksW = mcusX * c.h;
10730
+ c.blocksH = mcusY * c.v;
10731
+ c.coefs = new Int16Array(c.blocksW * c.blocksH * 64);
10732
+ }
10733
+ } else if (marker === 195 || marker >= 197 && marker <= 207 && marker !== 200 && marker !== 204) {
10734
+ return null;
10735
+ } else if (marker === 196) {
10736
+ let p = seg;
10737
+ while (p < end) {
10738
+ const tc = data[p] >> 4;
10739
+ const th = data[p] & 15;
10740
+ p++;
10741
+ const counts = data.subarray(p, p + 16);
10742
+ p += 16;
10743
+ let total = 0;
10744
+ for (let i = 0; i < 16; i++) total += counts[i];
10745
+ const table = buildHuffman2(counts, data.subarray(p, p + total));
10746
+ p += total;
10747
+ (tc ? acTables : dcTables)[th] = table;
10748
+ }
10749
+ } else if (marker === 221) {
10750
+ restart = data[seg] * 256 + data[seg + 1];
10751
+ } else if (marker === 238) {
10752
+ if (len >= 14 && String.fromCharCode(...data.subarray(seg, seg + 5)) === "Adobe") adobe = data[seg + 11];
10753
+ } else if (marker === 218) {
10754
+ if (!comps.length) return null;
10755
+ const ns = data[seg];
10756
+ const scanComps = [];
10757
+ for (let i = 0; i < ns; i++) {
10758
+ const c = comps.find((x) => x.id === data[seg + 1 + i * 2]);
10759
+ if (!c) return null;
10760
+ c.dc = data[seg + 2 + i * 2] >> 4;
10761
+ c.ac = data[seg + 2 + i * 2] & 15;
10762
+ scanComps.push(c);
10763
+ }
10764
+ const ss = data[seg + 1 + ns * 2];
10765
+ const se = data[seg + 2 + ns * 2];
10766
+ const ah = data[seg + 3 + ns * 2] >> 4;
10767
+ const al = data[seg + 3 + ns * 2] & 15;
10768
+ pos = decodeScan(data, end, scanComps, comps, width, height, maxH, maxV, progressive, restart, ss, se, ah, al, dcTables, acTables);
10769
+ sawScan = true;
10770
+ continue;
10771
+ }
10772
+ pos = end;
10773
+ }
10774
+ if (!sawScan || !comps.length) return null;
10775
+ const full = comps.map((c) => {
10776
+ if (maxH % c.h || maxV % c.v) throw new Error("Unsupported sampling");
10777
+ const stride = c.blocksW * 8;
10778
+ const plane = new Uint8Array(stride * c.blocksH * 8);
10779
+ const q = quant[c.tq];
10780
+ if (!q) throw new Error("Missing quantisation table");
10781
+ for (let by = 0; by < c.blocksH; by++) {
10782
+ for (let bx = 0; bx < c.blocksW; bx++) idctBlock(c.coefs, (by * c.blocksW + bx) * 64, q, plane, by * 8 * stride + bx * 8, stride, ws);
10783
+ }
10784
+ const cw = Math.ceil(width * c.h / maxH);
10785
+ const ch = Math.ceil(height * c.v / maxV);
10786
+ return upsample(plane, stride, cw, ch, maxH / c.h, maxV / c.v, width, height);
10787
+ });
10788
+ const out = new Uint8Array(width * height * 4);
10789
+ const transform = colorTransform ?? (adobe !== void 0 ? adobe !== 0 : !comps.every((c, i) => c.id === [82, 71, 66][i]));
10790
+ if (comps.length === 1) {
10791
+ for (let i = 0; i < width * height; i++) {
10792
+ out[i * 4] = out[i * 4 + 1] = out[i * 4 + 2] = full[0][i];
10793
+ out[i * 4 + 3] = 255;
10794
+ }
10795
+ } else if (!transform) {
10796
+ for (let i = 0; i < width * height; i++) {
10797
+ out[i * 4] = full[0][i];
10798
+ out[i * 4 + 1] = full[1][i];
10799
+ out[i * 4 + 2] = full[2][i];
10800
+ out[i * 4 + 3] = 255;
10801
+ }
10802
+ } else {
10803
+ const clamp2 = (v) => v < 0 ? 0 : v > 255 ? 255 : v;
10804
+ const fix = (x) => Math.floor(x * 65536 + 0.5);
10805
+ const half = 1 << 15;
10806
+ const crR = fix(1.402);
10807
+ const cbB = fix(1.772);
10808
+ const crG = -fix(0.71414);
10809
+ const cbG = -fix(0.34414);
10810
+ for (let i = 0; i < width * height; i++) {
10811
+ const y = full[0][i];
10812
+ const cb = full[1][i] - 128;
10813
+ const cr = full[2][i] - 128;
10814
+ out[i * 4] = clamp2(y + (crR * cr + half >> 16));
10815
+ out[i * 4 + 1] = clamp2(y + (cbG * cb + half + crG * cr >> 16));
10816
+ out[i * 4 + 2] = clamp2(y + (cbB * cb + half >> 16));
10817
+ out[i * 4 + 3] = 255;
10818
+ }
10819
+ }
10820
+ return { width, height, data: out };
10821
+ }
10822
+ function decodeScan(data, start, scan, all, width, height, maxH, maxV, progressive, restart, ss, se, ah, al, dcTables, acTables) {
10823
+ const br = new BitReader(data, start);
10824
+ let eobrun = 0;
10825
+ const single = scan.length === 1;
10826
+ const decodeBlock = (c, off) => {
10827
+ const coefs = c.coefs;
10828
+ if (!progressive) {
10829
+ const t = br.decode(dcTables[c.dc]);
10830
+ c.pred += t === 0 ? 0 : br.receiveExtend(t);
10831
+ coefs[off] = c.pred;
10832
+ let k2 = 1;
10833
+ while (k2 < 64) {
10834
+ const rs = br.decode(acTables[c.ac]);
10835
+ const s = rs & 15;
10836
+ const r = rs >> 4;
10837
+ if (s === 0) {
10838
+ if (r < 15) break;
10839
+ k2 += 16;
10840
+ continue;
10841
+ }
10842
+ k2 += r;
10843
+ if (k2 > 63) break;
10844
+ coefs[off + ZIGZAG[k2]] = br.receiveExtend(s);
10845
+ k2++;
10846
+ }
10847
+ return;
10848
+ }
10849
+ if (ss === 0) {
10850
+ if (ah === 0) {
10851
+ const t = br.decode(dcTables[c.dc]);
10852
+ c.pred += t === 0 ? 0 : br.receiveExtend(t);
10853
+ coefs[off] = c.pred * (1 << al);
10854
+ } else if (br.bit()) {
10855
+ coefs[off] |= 1 << al;
10856
+ }
10857
+ return;
10858
+ }
10859
+ if (ah === 0) {
10860
+ if (eobrun > 0) {
10861
+ eobrun--;
10862
+ return;
10863
+ }
10864
+ let k2 = ss;
10865
+ while (k2 <= se) {
10866
+ const rs = br.decode(acTables[c.ac]);
10867
+ const s = rs & 15;
10868
+ const r = rs >> 4;
10869
+ if (s === 0) {
10870
+ if (r < 15) {
10871
+ eobrun = br.receive(r) + (1 << r) - 1;
10872
+ break;
10873
+ }
10874
+ k2 += 16;
10875
+ continue;
10876
+ }
10877
+ k2 += r;
10878
+ if (k2 > 63) break;
10879
+ coefs[off + ZIGZAG[k2]] = br.receiveExtend(s) * (1 << al);
10880
+ k2++;
10881
+ }
10882
+ return;
10883
+ }
10884
+ const p1 = 1 << al;
10885
+ const m1 = -1 << al;
10886
+ let k = ss;
10887
+ if (eobrun <= 0) {
10888
+ for (; k <= se; k++) {
10889
+ const rs = br.decode(acTables[c.ac]);
10890
+ const s = rs & 15;
10891
+ let r = rs >> 4;
10892
+ let value = 0;
10893
+ if (s === 0) {
10894
+ if (r < 15) {
10895
+ eobrun = (1 << r) + br.receive(r);
10896
+ break;
10897
+ }
10898
+ } else {
10899
+ value = br.bit() ? p1 : m1;
10900
+ }
10901
+ for (; k <= se; k++) {
10902
+ const idx = off + ZIGZAG[k];
10903
+ if (coefs[idx] !== 0) {
10904
+ if (br.bit() && (coefs[idx] & p1) === 0) coefs[idx] += coefs[idx] >= 0 ? p1 : m1;
10905
+ } else {
10906
+ if (r === 0) {
10907
+ if (value) coefs[idx] = value;
10908
+ break;
10909
+ }
10910
+ r--;
10911
+ }
10912
+ }
10913
+ }
10914
+ }
10915
+ if (eobrun > 0) {
10916
+ for (; k <= se; k++) {
10917
+ const idx = off + ZIGZAG[k];
10918
+ if (coefs[idx] !== 0 && br.bit() && (coefs[idx] & p1) === 0) coefs[idx] += coefs[idx] >= 0 ? p1 : m1;
10919
+ }
10920
+ eobrun--;
10921
+ }
10922
+ };
10923
+ let total;
10924
+ let mcusX;
10925
+ if (single) {
10926
+ const c = scan[0];
10927
+ mcusX = Math.ceil(Math.ceil(width * c.h / maxH) / 8);
10928
+ total = mcusX * Math.ceil(Math.ceil(height * c.v / maxV) / 8);
10929
+ } else {
10930
+ mcusX = Math.ceil(width / (8 * maxH));
10931
+ total = mcusX * Math.ceil(height / (8 * maxV));
10932
+ }
10933
+ const nextMarker = (from) => {
10934
+ let p = from;
10935
+ while (p + 1 < data.length && !(data[p] === 255 && data[p + 1] !== 0 && data[p + 1] !== 255)) p++;
10936
+ return p;
10937
+ };
10938
+ let n = 0;
10939
+ while (n < total) {
10940
+ for (const c of all) c.pred = 0;
10941
+ eobrun = 0;
10942
+ br.reset();
10943
+ const limit = restart ? Math.min(total, n + restart) : total;
10944
+ for (; n < limit; n++) {
10945
+ if (single) {
10946
+ const c = scan[0];
10947
+ decodeBlock(c, (Math.floor(n / mcusX) * c.blocksW + n % mcusX) * 64);
10948
+ } else {
10949
+ const mx = n % mcusX;
10950
+ const my = Math.floor(n / mcusX);
10951
+ for (const c of scan) {
10952
+ for (let v = 0; v < c.v; v++) for (let h = 0; h < c.h; h++) decodeBlock(c, ((my * c.v + v) * c.blocksW + mx * c.h + h) * 64);
10953
+ }
10954
+ }
10955
+ }
10956
+ const p = nextMarker(br.pos);
10957
+ if (n >= total) return p;
10958
+ if (data[p + 1] >= 208 && data[p + 1] <= 215) br.pos = p + 2;
10959
+ else return p;
10960
+ }
10961
+ return nextMarker(br.pos);
10962
+ }
10963
+
10964
+ // src/jpeg-decoder.ts
10965
+ function decodeJpegPixels(bytes, colorTransform) {
10966
+ return decodeJpegTurbo(bytes, colorTransform) ?? decodeJpegPixelsLegacy(bytes, colorTransform);
10967
+ }
10968
+
10375
10969
  // src/image-codec-fallback.ts
10376
10970
  var import_gifuct_js = __toESM(require_lib2());
10377
10971
  var UTIF = __toESM(require_UTIF());
@@ -21929,14 +22523,14 @@ function pixelSnapPlusClip(rCtx, incoming) {
21929
22523
  function applyPlusClipRegion(rCtx, rawIncoming, combineMode, opName) {
21930
22524
  const incoming = pixelSnapPlusClip(rCtx, rawIncoming);
21931
22525
  const op = PLUS_COMBINE_OPS[combineMode];
21932
- const res = combineClipRegions(
22526
+ const res2 = combineClipRegions(
21933
22527
  rCtx.clipRegion ?? null,
21934
22528
  incoming,
21935
22529
  op ?? "intersect",
21936
22530
  plusClipDomain(rCtx)
21937
22531
  );
21938
- if (!res.exact) ;
21939
- rCtx.clipRegion = res.region;
22532
+ if (!res2.exact) ;
22533
+ rCtx.clipRegion = res2.region;
21940
22534
  reapplyPlusClip(rCtx);
21941
22535
  }
21942
22536
  function applyPlusClipShape(rCtx, shape, combineMode, opName) {
@@ -23344,27 +23938,27 @@ var HintedSize = class _HintedSize {
23344
23938
  /** Loads and grid-fits glyph `g`. Never throws. */
23345
23939
  hintGlyph(g) {
23346
23940
  const { advance } = this.font.hMetrics(g);
23347
- const res = this.loadRecursive(g, 0);
23348
- const n = res.zone.n - 4;
23349
- const pp1x = res.zone.curX[n];
23350
- const pp2x = res.zone.curX[n + 1];
23941
+ const res2 = this.loadRecursive(g, 0);
23942
+ const n = res2.zone.n - 4;
23943
+ const pp1x = res2.zone.curX[n];
23944
+ const pp2x = res2.zone.curX[n + 1];
23351
23945
  const xs = new Float64Array(n);
23352
23946
  const ys = new Float64Array(n);
23353
23947
  const onCurve = new Uint8Array(n);
23354
23948
  for (let i = 0; i < n; i++) {
23355
- xs[i] = res.zone.curX[i] - pp1x;
23356
- ys[i] = res.zone.curY[i];
23357
- onCurve[i] = res.zone.tags[i] & ON_CURVE;
23949
+ xs[i] = res2.zone.curX[i] - pp1x;
23950
+ ys[i] = res2.zone.curY[i];
23951
+ onCurve[i] = res2.zone.tags[i] & ON_CURVE;
23358
23952
  }
23359
23953
  return {
23360
23954
  xs,
23361
23955
  ys,
23362
23956
  onCurve,
23363
- endPts: res.zone.endPts,
23957
+ endPts: res2.zone.endPts,
23364
23958
  advance: pp2x - pp1x,
23365
23959
  linearAdvance: mulFix(advance, this.xScale),
23366
- scanControl: res.scanControl,
23367
- scanType: res.scanType
23960
+ scanControl: res2.scanControl,
23961
+ scanType: res2.scanType
23368
23962
  };
23369
23963
  }
23370
23964
  /**
@@ -30649,7 +31243,7 @@ function stretchHalftone(src, sx, sy, sw, sh, dw, dh, adjust, adjustAfterSamplin
30649
31243
  const reducing = W < SW && H < SH;
30650
31244
  const mixed = W > SW && H < SH || W < SW && H > SH;
30651
31245
  const nearestMixed = mixed && (!adjust || adjustAfterSampling) && (W < SW && W * 2 > SW || H < SH && H * 2 > SH);
30652
- const nativeMixed = mixed && (!adjust || adjustAfterSampling) && Math.min(SW, W) >= 2 && Math.min(SH, H) >= 2 && (W === SW * 2 && H * 2 <= SH || H === SH * 2 && W * 2 <= SW);
31246
+ const nativeMixed = mixed && (!adjust || adjustAfterSampling) && Math.min(SW, W) >= 2 && Math.min(SH, H) >= 2 && (W > SW && H * 2 <= SH || H > SH && W * 2 <= SW);
30653
31247
  if ((enlarging || nearestMixed) && !directDib) {
30654
31248
  halftoneDespeckle(rect, SW, SH);
30655
31249
  }
@@ -32759,15 +33353,15 @@ function handleEmfGdiDrawTextRecord(rCtx, recType, offset, dataOff, recSize) {
32759
33353
 
32760
33354
  // src/emf-gdi-clip-records.ts
32761
33355
  function gdiCombineClip(rCtx, shape, op) {
32762
- const res = combineClip(op === "replace" ? null : rCtx.clipRegion ?? null, shape, op, {
33356
+ const res2 = combineClip(op === "replace" ? null : rCtx.clipRegion ?? null, shape, op, {
32763
33357
  x: 0,
32764
33358
  y: 0,
32765
33359
  w: rCtx.canvasW,
32766
33360
  h: rCtx.canvasH
32767
33361
  });
32768
- if (!res.exact) ;
32769
- rCtx.clipRegion = res.region;
32770
- reapplyClipRegion(rCtx, res.region);
33362
+ if (!res2.exact) ;
33363
+ rCtx.clipRegion = res2.region;
33364
+ reapplyClipRegion(rCtx, res2.region);
32771
33365
  }
32772
33366
  function readClipRectShape(rCtx, dataOff) {
32773
33367
  const { view } = rCtx;