emf-converter 4.4.16 → 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 +623 -29
- package/dist/browser.mjs +623 -29
- package/dist/index.js +623 -29
- package/dist/index.mjs +623 -29
- package/package.json +1 -1
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
|
|
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 =
|
|
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(
|
|
2308
|
+
return Object.keys(schema).reduce(function(res2, key) {
|
|
2309
2309
|
var def = schema[key];
|
|
2310
2310
|
if (def.length) {
|
|
2311
|
-
|
|
2311
|
+
res2[key] = subBitsTotal(bits, def.index, def.length);
|
|
2312
2312
|
} else {
|
|
2313
|
-
|
|
2313
|
+
res2[key] = bits[def.index];
|
|
2314
2314
|
}
|
|
2315
|
-
return
|
|
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
|
|
2924
|
+
var res2 = 0;
|
|
2925
2925
|
do {
|
|
2926
|
-
|
|
2926
|
+
res2 |= code & 1;
|
|
2927
2927
|
code >>>= 1;
|
|
2928
|
-
|
|
2928
|
+
res2 <<= 1;
|
|
2929
2929
|
} while (--len > 0);
|
|
2930
|
-
return
|
|
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
|
|
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
|
|
22526
|
+
const res2 = combineClipRegions(
|
|
21933
22527
|
rCtx.clipRegion ?? null,
|
|
21934
22528
|
incoming,
|
|
21935
22529
|
op ?? "intersect",
|
|
21936
22530
|
plusClipDomain(rCtx)
|
|
21937
22531
|
);
|
|
21938
|
-
if (!
|
|
21939
|
-
rCtx.clipRegion =
|
|
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
|
|
23348
|
-
const n =
|
|
23349
|
-
const pp1x =
|
|
23350
|
-
const pp2x =
|
|
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] =
|
|
23356
|
-
ys[i] =
|
|
23357
|
-
onCurve[i] =
|
|
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:
|
|
23957
|
+
endPts: res2.zone.endPts,
|
|
23364
23958
|
advance: pp2x - pp1x,
|
|
23365
23959
|
linearAdvance: mulFix(advance, this.xScale),
|
|
23366
|
-
scanControl:
|
|
23367
|
-
scanType:
|
|
23960
|
+
scanControl: res2.scanControl,
|
|
23961
|
+
scanType: res2.scanType
|
|
23368
23962
|
};
|
|
23369
23963
|
}
|
|
23370
23964
|
/**
|
|
@@ -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
|
|
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 (!
|
|
32769
|
-
rCtx.clipRegion =
|
|
32770
|
-
reapplyClipRegion(rCtx,
|
|
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;
|