@adnsistemas/pdf-lib 2.7.0 → 2.7.2
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/cjs/core/writers/PDFWriter.d.ts +15 -0
- package/cjs/core/writers/PDFWriter.d.ts.map +1 -1
- package/cjs/core/writers/PDFWriter.js +41 -3
- package/cjs/core/writers/PDFWriter.js.map +1 -1
- package/cjs/utils/png.js +1 -1
- package/cjs/utils/png.js.map +1 -1
- package/dist/pdf-lib.esm.js +164 -41
- package/dist/pdf-lib.esm.js.map +1 -1
- package/dist/pdf-lib.esm.min.js +3 -3
- package/dist/pdf-lib.esm.min.js.map +1 -1
- package/dist/pdf-lib.js +164 -41
- package/dist/pdf-lib.js.map +1 -1
- package/dist/pdf-lib.min.js +3 -3
- package/dist/pdf-lib.min.js.map +1 -1
- package/es/core/writers/PDFWriter.d.ts +15 -0
- package/es/core/writers/PDFWriter.d.ts.map +1 -1
- package/es/core/writers/PDFWriter.js +41 -3
- package/es/core/writers/PDFWriter.js.map +1 -1
- package/es/utils/png.js +1 -1
- package/es/utils/png.js.map +1 -1
- package/package.json +2 -2
- package/src/core/writers/PDFWriter.ts +49 -3
- package/src/utils/png.ts +1 -1
- package/ts3.4/cjs/core/writers/PDFWriter.d.ts +15 -0
- package/ts3.4/es/core/writers/PDFWriter.d.ts +15 -0
package/dist/pdf-lib.js
CHANGED
|
@@ -10331,6 +10331,12 @@
|
|
|
10331
10331
|
class PDFWriter {
|
|
10332
10332
|
constructor(context, objectsPerTick, snapshot) {
|
|
10333
10333
|
this.parsedObjects = 0;
|
|
10334
|
+
/**
|
|
10335
|
+
* If PDF has an XRef Stream, then the last object will be probably be skipped on saving.
|
|
10336
|
+
* If that's the case, this property will have that object number, and the PDF /Size can
|
|
10337
|
+
* be corrected, to be accurate.
|
|
10338
|
+
*/
|
|
10339
|
+
this._largestSkippedObjectNum = 0;
|
|
10334
10340
|
this.shouldWaitForTick = (n) => {
|
|
10335
10341
|
this.parsedObjects += n;
|
|
10336
10342
|
return this.parsedObjects % this.objectsPerTick === 0;
|
|
@@ -10339,6 +10345,27 @@
|
|
|
10339
10345
|
this.objectsPerTick = objectsPerTick;
|
|
10340
10346
|
this.snapshot = snapshot;
|
|
10341
10347
|
}
|
|
10348
|
+
/**
|
|
10349
|
+
* For incremental saves, defers the decision to the snapshot.
|
|
10350
|
+
* For full saves, checks that the object is not an XRef stream object.
|
|
10351
|
+
* @param {boolean} incremental If making an incremental save, or a full save of the PDF
|
|
10352
|
+
* @param {number} objNum Object number
|
|
10353
|
+
* @param {PDFObject} object PDFObject used to check if it is an XRef stream, when not 'incremental' saving
|
|
10354
|
+
* @returns {boolean} whether the object should be saved or not
|
|
10355
|
+
*/
|
|
10356
|
+
shouldSave(incremental, objNum, object) {
|
|
10357
|
+
let should = true;
|
|
10358
|
+
if (incremental) {
|
|
10359
|
+
should = this.snapshot.shouldSave(objNum);
|
|
10360
|
+
}
|
|
10361
|
+
else {
|
|
10362
|
+
should = !(object instanceof PDFRawStream &&
|
|
10363
|
+
object.dict.lookup(PDFName.of('Type')) === PDFName.of('XRef'));
|
|
10364
|
+
}
|
|
10365
|
+
if (!should && this._largestSkippedObjectNum < objNum)
|
|
10366
|
+
this._largestSkippedObjectNum = objNum;
|
|
10367
|
+
return should;
|
|
10368
|
+
}
|
|
10342
10369
|
serializeToBuffer() {
|
|
10343
10370
|
return __awaiter(this, void 0, void 0, function* () {
|
|
10344
10371
|
const incremental = !(this.snapshot instanceof DefaultDocumentSnapshot);
|
|
@@ -10352,7 +10379,7 @@
|
|
|
10352
10379
|
buffer[offset++] = CharCodes$1.Newline;
|
|
10353
10380
|
for (let idx = 0, len = indirectObjects.length; idx < len; idx++) {
|
|
10354
10381
|
const [ref, object] = indirectObjects[idx];
|
|
10355
|
-
if (!this.
|
|
10382
|
+
if (!this.shouldSave(incremental, ref.objectNumber, object)) {
|
|
10356
10383
|
continue;
|
|
10357
10384
|
}
|
|
10358
10385
|
const objectNumber = String(ref.objectNumber);
|
|
@@ -10398,8 +10425,16 @@
|
|
|
10398
10425
|
return refSize + objectSize;
|
|
10399
10426
|
}
|
|
10400
10427
|
createTrailerDict(prevStartXRef) {
|
|
10428
|
+
/**
|
|
10429
|
+
* if last object (XRef Stream) is not in the output, then size is one less.
|
|
10430
|
+
* An XRef Stream object should always be the largest object number in PDF
|
|
10431
|
+
*/
|
|
10432
|
+
const size = this.context.largestObjectNumber +
|
|
10433
|
+
(this._largestSkippedObjectNum === this.context.largestObjectNumber
|
|
10434
|
+
? 0
|
|
10435
|
+
: 1);
|
|
10401
10436
|
return this.context.obj({
|
|
10402
|
-
Size:
|
|
10437
|
+
Size: size,
|
|
10403
10438
|
Root: this.context.trailerInfo.Root,
|
|
10404
10439
|
Encrypt: this.context.trailerInfo.Encrypt,
|
|
10405
10440
|
Info: this.context.trailerInfo.Info,
|
|
@@ -10409,6 +10444,7 @@
|
|
|
10409
10444
|
}
|
|
10410
10445
|
computeBufferSize(incremental) {
|
|
10411
10446
|
return __awaiter(this, void 0, void 0, function* () {
|
|
10447
|
+
this._largestSkippedObjectNum = 0;
|
|
10412
10448
|
const header = PDFHeader.forVersion(1, 7);
|
|
10413
10449
|
let size = this.snapshot.pdfSize;
|
|
10414
10450
|
if (!incremental) {
|
|
@@ -10421,7 +10457,7 @@
|
|
|
10421
10457
|
for (let idx = 0, len = indirectObjects.length; idx < len; idx++) {
|
|
10422
10458
|
const indirectObject = indirectObjects[idx];
|
|
10423
10459
|
const [ref, object] = indirectObject;
|
|
10424
|
-
if (!this.
|
|
10460
|
+
if (!this.shouldSave(incremental, ref.objectNumber, object))
|
|
10425
10461
|
continue;
|
|
10426
10462
|
if (security)
|
|
10427
10463
|
this.encrypt(ref, object, security);
|
|
@@ -13380,7 +13416,7 @@ end\
|
|
|
13380
13416
|
else if(depth== 2) for(var x=0; x<w; x++) { var gr= 85*((data[off+(x>>>2)]>>>(6 -((x&3)<<1)))& 3), al=(gr==tr* 85)?0:255; bf32[to+x]=(al<<24)|(gr<<16)|(gr<<8)|gr; }
|
|
13381
13417
|
else if(depth== 4) for(var x=0; x<w; x++) { var gr= 17*((data[off+(x>>>1)]>>>(4 -((x&1)<<2)))&15), al=(gr==tr* 17)?0:255; bf32[to+x]=(al<<24)|(gr<<16)|(gr<<8)|gr; }
|
|
13382
13418
|
else if(depth== 8) for(var x=0; x<w; x++) { var gr=data[off+ x], al=(gr ==tr)?0:255; bf32[to+x]=(al<<24)|(gr<<16)|(gr<<8)|gr; }
|
|
13383
|
-
else if(depth==16) for(var x=0; x<w; x++) { var gr=data[off+(x<<1)], al=(rs(data,off+(x<<
|
|
13419
|
+
else if(depth==16) for(var x=0; x<w; x++) { var gr=data[off+(x<<1)], al=(rs(data,off+(x<<1))==tr)?0:255; bf32[to+x]=(al<<24)|(gr<<16)|(gr<<8)|gr; }
|
|
13384
13420
|
}
|
|
13385
13421
|
}
|
|
13386
13422
|
//console.log(Date.now()-time);
|
|
@@ -13406,6 +13442,7 @@ end\
|
|
|
13406
13442
|
//console.log(type,len);
|
|
13407
13443
|
|
|
13408
13444
|
if (type=="IHDR") { UPNG.decode._IHDR(data, offset, out); }
|
|
13445
|
+
else if(type=="CgBI") { out.tabs[type] = data.slice(offset,offset+4); }
|
|
13409
13446
|
else if(type=="IDAT") {
|
|
13410
13447
|
for(var i=0; i<len; i++) dd[doff+i] = data[offset+i];
|
|
13411
13448
|
doff += len;
|
|
@@ -13435,11 +13472,16 @@ end\
|
|
|
13435
13472
|
out.tabs[type] = [];
|
|
13436
13473
|
for(var i=0; i<8; i++) out.tabs[type].push(bin.readUint(data, offset+i*4));
|
|
13437
13474
|
}
|
|
13438
|
-
else if(type=="tEXt") {
|
|
13475
|
+
else if(type=="tEXt" || type=="zTXt") {
|
|
13439
13476
|
if(out.tabs[type]==null) out.tabs[type] = {};
|
|
13440
13477
|
var nz = bin.nextZero(data, offset);
|
|
13441
13478
|
var keyw = bin.readASCII(data, offset, nz-offset);
|
|
13442
|
-
var text =
|
|
13479
|
+
var text, tl=offset+len-nz-1;
|
|
13480
|
+
if(type=="tEXt") text = bin.readASCII(data, nz+1, tl);
|
|
13481
|
+
else {
|
|
13482
|
+
var bfr = UPNG.decode._inflate(data.slice(nz+2,nz+2+tl));
|
|
13483
|
+
text = bin.readUTF8(bfr,0,bfr.length);
|
|
13484
|
+
}
|
|
13443
13485
|
out.tabs[type][keyw] = text;
|
|
13444
13486
|
}
|
|
13445
13487
|
else if(type=="iTXt") {
|
|
@@ -13447,12 +13489,17 @@ end\
|
|
|
13447
13489
|
var nz = 0, off = offset;
|
|
13448
13490
|
nz = bin.nextZero(data, off);
|
|
13449
13491
|
var keyw = bin.readASCII(data, off, nz-off); off = nz + 1;
|
|
13450
|
-
data[off]; data[off+1]; off+=2;
|
|
13492
|
+
var cflag = data[off]; data[off+1]; off+=2;
|
|
13451
13493
|
nz = bin.nextZero(data, off);
|
|
13452
13494
|
bin.readASCII(data, off, nz-off); off = nz + 1;
|
|
13453
13495
|
nz = bin.nextZero(data, off);
|
|
13454
13496
|
bin.readUTF8(data, off, nz-off); off = nz + 1;
|
|
13455
|
-
var text
|
|
13497
|
+
var text, tl=len-(off-offset);
|
|
13498
|
+
if(cflag==0) text = bin.readUTF8(data, off, tl);
|
|
13499
|
+
else {
|
|
13500
|
+
var bfr = UPNG.decode._inflate(data.slice(off,off+tl));
|
|
13501
|
+
text = bin.readUTF8(bfr,0,bfr.length);
|
|
13502
|
+
}
|
|
13456
13503
|
out.tabs[type][keyw] = text;
|
|
13457
13504
|
}
|
|
13458
13505
|
else if(type=="PLTE") {
|
|
@@ -13479,12 +13526,12 @@ end\
|
|
|
13479
13526
|
else if(type=="IEND") {
|
|
13480
13527
|
break;
|
|
13481
13528
|
}
|
|
13482
|
-
//else { log("unknown chunk type", type, len); }
|
|
13529
|
+
//else { console.log("unknown chunk type", type, len); out.tabs[type]=data.slice(offset,offset+len); }
|
|
13483
13530
|
offset += len;
|
|
13484
13531
|
bin.readUint(data, offset); offset += 4;
|
|
13485
13532
|
}
|
|
13486
13533
|
if(foff!=0) { var fr = out.frames[out.frames.length-1];
|
|
13487
|
-
fr.data = UPNG.decode._decompress(out, fd.slice(0,foff), fr.rect.width, fr.rect.height);
|
|
13534
|
+
fr.data = UPNG.decode._decompress(out, fd.slice(0,foff), fr.rect.width, fr.rect.height);
|
|
13488
13535
|
}
|
|
13489
13536
|
out.data = UPNG.decode._decompress(out, dd, out.width, out.height);
|
|
13490
13537
|
|
|
@@ -13494,7 +13541,8 @@ end\
|
|
|
13494
13541
|
|
|
13495
13542
|
UPNG.decode._decompress = function(out, dd, w, h) {
|
|
13496
13543
|
var bpp = UPNG.decode._getBPP(out), bpl = Math.ceil(w*bpp/8), buff = new Uint8Array((bpl+1+out.interlace)*h);
|
|
13497
|
-
dd = UPNG.
|
|
13544
|
+
if(out.tabs["CgBI"]) dd = UPNG.inflateRaw(dd,buff);
|
|
13545
|
+
else dd = UPNG.decode._inflate(dd,buff);
|
|
13498
13546
|
if (out.interlace==0) dd = UPNG.decode._filterZero(dd, out, 0, w, h);
|
|
13499
13547
|
else if(out.interlace==1) dd = UPNG.decode._readInterlace(dd, out);
|
|
13500
13548
|
//console.log(Date.now()-time);
|
|
@@ -13504,7 +13552,7 @@ end\
|
|
|
13504
13552
|
UPNG.decode._inflate = function(data, buff) { var out=UPNG["inflateRaw"](new Uint8Array(data.buffer, 2,data.length-6),buff); return out; };
|
|
13505
13553
|
UPNG.inflateRaw=function(){var H={};H.H={};H.H.N=function(N,W){var R=Uint8Array,i=0,m=0,J=0,h=0,Q=0,X=0,u=0,w=0,d=0,v,C;
|
|
13506
13554
|
if(N[0]==3&&N[1]==0)return W?W:new R(0);var V=H.H,n=V.b,A=V.e,l=V.R,M=V.n,I=V.A,e=V.Z,b=V.m,Z=W==null;
|
|
13507
|
-
if(Z)W=new R(N.length>>>2<<
|
|
13555
|
+
if(Z)W=new R(N.length>>>2<<5);while(i==0){i=n(N,d,1);m=n(N,d+1,2);d+=3;if(m==0){if((d&7)!=0)d+=8-(d&7);
|
|
13508
13556
|
var D=(d>>>3)+4,q=N[D-4]|N[D-3]<<8;if(Z)W=H.H.W(W,w+q);W.set(new R(N.buffer,N.byteOffset+D,q),w);d=D+q<<3;
|
|
13509
13557
|
w+=q;continue}if(Z)W=H.H.W(W,w+(1<<17));if(m==1){v=b.J;C=b.h;X=(1<<9)-1;u=(1<<5)-1;}if(m==2){J=A(N,d,5)+257;
|
|
13510
13558
|
h=A(N,d+5,5)+1;Q=A(N,d+10,4)+4;d+=14;var j=1;for(var c=0;c<38;c+=2){b.Q[c]=0;b.Q[c+1]=0;}for(var c=0;
|
|
@@ -13601,7 +13649,7 @@ end\
|
|
|
13601
13649
|
var bpp = UPNG.decode._getBPP(out), bpl = Math.ceil(w*bpp/8), paeth = UPNG.decode._paeth;
|
|
13602
13650
|
bpp = Math.ceil(bpp/8);
|
|
13603
13651
|
|
|
13604
|
-
var i
|
|
13652
|
+
var i,di, type=data[off], x=0;
|
|
13605
13653
|
|
|
13606
13654
|
if(type>1) data[off]=[0,0,1][type-2];
|
|
13607
13655
|
if(type==3) for(x=bpp; x<bpl; x++) data[x+1] = (data[x+1] + (data[x+1-bpp]>>>1) )&255;
|
|
@@ -13701,12 +13749,13 @@ end\
|
|
|
13701
13749
|
|
|
13702
13750
|
|
|
13703
13751
|
|
|
13752
|
+
|
|
13704
13753
|
UPNG.encode = function(bufs, w, h, ps, dels, tabs, forbidPlte)
|
|
13705
13754
|
{
|
|
13706
13755
|
if(ps==null) ps=0;
|
|
13707
13756
|
if(forbidPlte==null) forbidPlte = false;
|
|
13708
13757
|
|
|
13709
|
-
var nimg = UPNG.encode.compress(bufs, w, h, ps, [false, false, false, 0, forbidPlte]);
|
|
13758
|
+
var nimg = UPNG.encode.compress(bufs, w, h, ps, [false, false, false, 0, forbidPlte,false]);
|
|
13710
13759
|
UPNG.encode.compressPNG(nimg, -1);
|
|
13711
13760
|
|
|
13712
13761
|
return UPNG.encode._main(nimg, w, h, dels, tabs);
|
|
@@ -13854,7 +13903,7 @@ end\
|
|
|
13854
13903
|
UPNG.encode.compress = function(bufs, w, h, ps, prms) // prms: onlyBlend, minBits, forbidPlte
|
|
13855
13904
|
{
|
|
13856
13905
|
//var time = Date.now();
|
|
13857
|
-
var onlyBlend = prms[0], evenCrd = prms[1], forbidPrev = prms[2], minBits = prms[3], forbidPlte = prms[4];
|
|
13906
|
+
var onlyBlend = prms[0], evenCrd = prms[1], forbidPrev = prms[2], minBits = prms[3], forbidPlte = prms[4], dither=prms[5];
|
|
13858
13907
|
|
|
13859
13908
|
var ctype = 6, depth = 8, alphaAnd=255;
|
|
13860
13909
|
|
|
@@ -13870,17 +13919,27 @@ end\
|
|
|
13870
13919
|
var frms = UPNG.encode.framize(bufs, w, h, onlyBlend, evenCrd, forbidPrev);
|
|
13871
13920
|
//console.log("framize", Date.now()-time); time = Date.now();
|
|
13872
13921
|
|
|
13873
|
-
var cmap={}, plte=[], inds=[];
|
|
13922
|
+
var cmap={}, plte=[], inds=[];
|
|
13874
13923
|
|
|
13875
13924
|
if(ps!=0) {
|
|
13876
13925
|
var nbufs = []; for(var i=0; i<frms.length; i++) nbufs.push(frms[i].img.buffer);
|
|
13877
13926
|
|
|
13878
|
-
var abuf = UPNG.encode.concatRGBA(nbufs), qres = UPNG.quantize(abuf, ps);
|
|
13879
|
-
var cof = 0, bb = new Uint8Array(qres.abuf);
|
|
13880
|
-
for(var i=0; i<frms.length; i++) { var ti=frms[i].img, bln=ti.length; inds.push(new Uint8Array(qres.inds.buffer, cof>>2, bln>>2));
|
|
13881
|
-
for(var j=0; j<bln; j+=4) { ti[j]=bb[cof+j]; ti[j+1]=bb[cof+j+1]; ti[j+2]=bb[cof+j+2]; ti[j+3]=bb[cof+j+3]; } cof+=bln; }
|
|
13927
|
+
var abuf = UPNG.encode.concatRGBA(nbufs), qres = UPNG.quantize(abuf, ps);
|
|
13882
13928
|
|
|
13883
13929
|
for(var i=0; i<qres.plte.length; i++) plte.push(qres.plte[i].est.rgba);
|
|
13930
|
+
|
|
13931
|
+
var cof = 0;
|
|
13932
|
+
for(var i=0; i<frms.length; i++) {
|
|
13933
|
+
var frm=frms[i], bln=frm.img.length, ind = new Uint8Array(qres.inds.buffer, cof>>2, bln>>2); inds.push(ind);
|
|
13934
|
+
var bb = new Uint8Array(qres.abuf,cof,bln);
|
|
13935
|
+
|
|
13936
|
+
//console.log(frm.img, frm.width, frm.height);
|
|
13937
|
+
//var time = Date.now();
|
|
13938
|
+
if(dither) UPNG.encode.dither(frm.img, frm.rect.width, frm.rect.height, plte, bb, ind);
|
|
13939
|
+
//console.log(Date.now()-time);
|
|
13940
|
+
frm.img.set(bb); cof+=bln;
|
|
13941
|
+
}
|
|
13942
|
+
|
|
13884
13943
|
//console.log("quantize", Date.now()-time); time = Date.now();
|
|
13885
13944
|
}
|
|
13886
13945
|
else {
|
|
@@ -14072,8 +14131,8 @@ end\
|
|
|
14072
14131
|
else if(h*bpl>500000 || bpp==1) ftry=[0];
|
|
14073
14132
|
var opts; if(levelZero) opts={level:0};
|
|
14074
14133
|
|
|
14075
|
-
var CMPR = (levelZero && UZIP!=null) ? UZIP : pako$1;
|
|
14076
14134
|
|
|
14135
|
+
var CMPR = (data.length>10e6 && UZIP!=null) ? UZIP : pako$1;
|
|
14077
14136
|
for(var i=0; i<ftry.length; i++) {
|
|
14078
14137
|
for(var y=0; y<h; y++) UPNG.encode._filterLine(data, img, y, bpl, bpp, ftry[i]);
|
|
14079
14138
|
//var nimg = new Uint8Array(data.length);
|
|
@@ -14083,6 +14142,7 @@ end\
|
|
|
14083
14142
|
//console.log(crc, UZIP.adler(data,2,data.length-6));
|
|
14084
14143
|
fls.push(CMPR["deflate"](data,opts));
|
|
14085
14144
|
}
|
|
14145
|
+
|
|
14086
14146
|
var ti, tsize=1e9;
|
|
14087
14147
|
for(var i=0; i<fls.length; i++) if(fls[i].length<tsize) { ti=i; tsize=fls[i].length; }
|
|
14088
14148
|
return fls[ti];
|
|
@@ -14137,27 +14197,30 @@ end\
|
|
|
14137
14197
|
|
|
14138
14198
|
UPNG.quantize = function(abuf, ps)
|
|
14139
14199
|
{
|
|
14140
|
-
var
|
|
14200
|
+
var sb = new Uint8Array(abuf), tb = sb.slice(0), tb32 = new Uint32Array(tb.buffer);
|
|
14141
14201
|
|
|
14142
|
-
var KD = UPNG.quantize.getKDtree(
|
|
14202
|
+
var KD = UPNG.quantize.getKDtree(tb, ps);
|
|
14143
14203
|
var root = KD[0], leafs = KD[1];
|
|
14144
14204
|
|
|
14145
|
-
UPNG.quantize.planeDst;
|
|
14146
|
-
var
|
|
14205
|
+
var planeDst = UPNG.quantize.planeDst;
|
|
14206
|
+
var len=sb.length;
|
|
14147
14207
|
|
|
14148
|
-
var inds = new Uint8Array(
|
|
14149
|
-
|
|
14150
|
-
var
|
|
14151
|
-
|
|
14152
|
-
|
|
14153
|
-
|
|
14154
|
-
|
|
14155
|
-
|
|
14156
|
-
|
|
14157
|
-
|
|
14158
|
-
|
|
14159
|
-
|
|
14160
|
-
|
|
14208
|
+
var inds = new Uint8Array(len>>2), nd;
|
|
14209
|
+
if(sb.length<20e6) // precise, but slow :(
|
|
14210
|
+
for(var i=0; i<len; i+=4) {
|
|
14211
|
+
var r=sb[i]*(1/255), g=sb[i+1]*(1/255), b=sb[i+2]*(1/255), a=sb[i+3]*(1/255);
|
|
14212
|
+
|
|
14213
|
+
nd = UPNG.quantize.getNearest(root, r, g, b, a);
|
|
14214
|
+
inds[i>>2] = nd.ind; tb32[i>>2] = nd.est.rgba;
|
|
14215
|
+
}
|
|
14216
|
+
else
|
|
14217
|
+
for(var i=0; i<len; i+=4) {
|
|
14218
|
+
var r=sb[i]*(1/255), g=sb[i+1]*(1/255), b=sb[i+2]*(1/255), a=sb[i+3]*(1/255);
|
|
14219
|
+
|
|
14220
|
+
nd = root; while(nd.left) nd = (planeDst(nd.est,r,g,b,a)<=0) ? nd.left : nd.right;
|
|
14221
|
+
inds[i>>2] = nd.ind; tb32[i>>2] = nd.est.rgba;
|
|
14222
|
+
}
|
|
14223
|
+
return { abuf:tb.buffer, inds:inds, plte:leafs };
|
|
14161
14224
|
};
|
|
14162
14225
|
|
|
14163
14226
|
UPNG.quantize.getKDtree = function(nimg, ps, err) {
|
|
@@ -14265,12 +14328,12 @@ end\
|
|
|
14265
14328
|
];
|
|
14266
14329
|
|
|
14267
14330
|
var A = Rj, M = UPNG.M4;
|
|
14268
|
-
var b = [
|
|
14331
|
+
var b = [Math.random(),Math.random(),Math.random(),Math.random()], mi = 0, tmi = 0;
|
|
14269
14332
|
|
|
14270
14333
|
if(N!=0)
|
|
14271
|
-
for(var i=0; i<
|
|
14334
|
+
for(var i=0; i<16; i++) {
|
|
14272
14335
|
b = M.multVec(A, b); tmi = Math.sqrt(M.dot(b,b)); b = M.sml(1/tmi, b);
|
|
14273
|
-
if(Math.abs(tmi-mi)<1e-9) break; mi = tmi;
|
|
14336
|
+
if(i!=0 && Math.abs(tmi-mi)<1e-9) break; mi = tmi;
|
|
14274
14337
|
}
|
|
14275
14338
|
//b = [0,0,1,0]; mi=N;
|
|
14276
14339
|
var q = [m0*iN, m1*iN, m2*iN, m3*iN];
|
|
@@ -14307,6 +14370,66 @@ end\
|
|
|
14307
14370
|
return nimg.buffer;
|
|
14308
14371
|
};
|
|
14309
14372
|
|
|
14373
|
+
UPNG.encode.dither = function(sb, w, h, plte, tb, oind) {
|
|
14374
|
+
|
|
14375
|
+
function addErr(er, tg, ti, f) {
|
|
14376
|
+
tg[ti]+=(er[0]*f)>>4; tg[ti+1]+=(er[1]*f)>>4; tg[ti+2]+=(er[2]*f)>>4; tg[ti+3]+=(er[3]*f)>>4;
|
|
14377
|
+
}
|
|
14378
|
+
function N(x) { return Math.max(0, Math.min(255, x)); }
|
|
14379
|
+
function D(a,b) { var dr=a[0]-b[0], dg=a[1]-b[1], db=a[2]-b[2], da=a[3]-b[3]; return (dr*dr + dg*dg + db*db + da*da); }
|
|
14380
|
+
|
|
14381
|
+
|
|
14382
|
+
var pc=plte.length, nplt = [];
|
|
14383
|
+
for(var i=0; i<pc; i++) {
|
|
14384
|
+
var c = plte[i];
|
|
14385
|
+
nplt.push([((c>>>0)&255), ((c>>>8)&255), ((c>>>16)&255), ((c>>>24)&255)]);
|
|
14386
|
+
}
|
|
14387
|
+
for(var i=0; i<pc; i++) {
|
|
14388
|
+
var ne=0xffffffff, ni=0;
|
|
14389
|
+
for(var j=0; j<pc; j++) { var ce=D(nplt[i],nplt[j]); if(j!=i && ce<ne) { ne=ce; ni=j; } }
|
|
14390
|
+
}
|
|
14391
|
+
|
|
14392
|
+
var tb32 = new Uint32Array(tb.buffer);
|
|
14393
|
+
var err = new Int16Array(w*h*4);
|
|
14394
|
+
|
|
14395
|
+
for(var y=0; y<h; y++) {
|
|
14396
|
+
for(var x=0; x<w; x++) {
|
|
14397
|
+
var i = (y*w+x)*4;
|
|
14398
|
+
|
|
14399
|
+
var cc = [N(sb[i]+err[i]), N(sb[i+1]+err[i+1]), N(sb[i+2]+err[i+2]), N(sb[i+3]+err[i+3])];
|
|
14400
|
+
|
|
14401
|
+
var ni=0, nd = 0xffffff;
|
|
14402
|
+
for(var j=0; j<pc; j++) {
|
|
14403
|
+
var cd = D(cc,nplt[j]);
|
|
14404
|
+
if(cd<nd) { nd=cd; ni=j; }
|
|
14405
|
+
}
|
|
14406
|
+
|
|
14407
|
+
//ni = oind[i>>2];
|
|
14408
|
+
var nc = nplt[ni];
|
|
14409
|
+
var er = [cc[0]-nc[0], cc[1]-nc[1], cc[2]-nc[2], cc[3]-nc[3]];
|
|
14410
|
+
|
|
14411
|
+
//addErr(er, err, i+4, 16);
|
|
14412
|
+
|
|
14413
|
+
//*
|
|
14414
|
+
if(x!=w-1) addErr(er, err, i+4 , 7);
|
|
14415
|
+
if(y!=h-1) {
|
|
14416
|
+
if(x!= 0) addErr(er, err, i+4*w-4, 3);
|
|
14417
|
+
addErr(er, err, i+4*w , 5);
|
|
14418
|
+
if(x!=w-1) addErr(er, err, i+4*w+4, 1); //*/
|
|
14419
|
+
}
|
|
14420
|
+
|
|
14421
|
+
oind[i>>2] = ni; tb32[i>>2] = plte[ni];
|
|
14422
|
+
}
|
|
14423
|
+
}
|
|
14424
|
+
};
|
|
14425
|
+
if (typeof module !== 'undefined') {
|
|
14426
|
+
if (exports && exports.default) {
|
|
14427
|
+
module.exports = exports.default;
|
|
14428
|
+
} else if (exports) {
|
|
14429
|
+
module.exports = exports;
|
|
14430
|
+
}
|
|
14431
|
+
}
|
|
14432
|
+
|
|
14310
14433
|
const getImageType = (ctype) => {
|
|
14311
14434
|
if (ctype === 0)
|
|
14312
14435
|
return PngType.Greyscale;
|