@adnsistemas/pdf-lib 2.7.0 → 2.7.1

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/utils/png.js CHANGED
@@ -2,7 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.PNG = exports.PngType = void 0;
4
4
  const tslib_1 = require("tslib");
5
- const upng_1 = tslib_1.__importDefault(require("@pdf-lib/upng"));
5
+ const upng_1 = tslib_1.__importDefault(require("@adnsistemas/upng"));
6
6
  const getImageType = (ctype) => {
7
7
  if (ctype === 0)
8
8
  return PngType.Greyscale;
@@ -1 +1 @@
1
- {"version":3,"file":"png.js","sourceRoot":"","sources":["../../src/utils/png.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"png.js","sourceRoot":"","sources":["../../src/utils/png.ts"],"names":[],"mappings":"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"}
@@ -13374,7 +13374,7 @@ UPNG.toRGBA8.decodeImage = function(data, w, h, out)
13374
13374
  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; }
13375
13375
  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; }
13376
13376
  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; }
13377
- else if(depth==16) for(var x=0; x<w; x++) { var gr=data[off+(x<<1)], al=(rs(data,off+(x<<i))==tr)?0:255; bf32[to+x]=(al<<24)|(gr<<16)|(gr<<8)|gr; }
13377
+ 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; }
13378
13378
  }
13379
13379
  }
13380
13380
  //console.log(Date.now()-time);
@@ -13400,6 +13400,7 @@ UPNG.decode = function(buff)
13400
13400
  //console.log(type,len);
13401
13401
 
13402
13402
  if (type=="IHDR") { UPNG.decode._IHDR(data, offset, out); }
13403
+ else if(type=="CgBI") { out.tabs[type] = data.slice(offset,offset+4); }
13403
13404
  else if(type=="IDAT") {
13404
13405
  for(var i=0; i<len; i++) dd[doff+i] = data[offset+i];
13405
13406
  doff += len;
@@ -13429,11 +13430,16 @@ UPNG.decode = function(buff)
13429
13430
  out.tabs[type] = [];
13430
13431
  for(var i=0; i<8; i++) out.tabs[type].push(bin.readUint(data, offset+i*4));
13431
13432
  }
13432
- else if(type=="tEXt") {
13433
+ else if(type=="tEXt" || type=="zTXt") {
13433
13434
  if(out.tabs[type]==null) out.tabs[type] = {};
13434
13435
  var nz = bin.nextZero(data, offset);
13435
13436
  var keyw = bin.readASCII(data, offset, nz-offset);
13436
- var text = bin.readASCII(data, nz+1, offset+len-nz-1);
13437
+ var text, tl=offset+len-nz-1;
13438
+ if(type=="tEXt") text = bin.readASCII(data, nz+1, tl);
13439
+ else {
13440
+ var bfr = UPNG.decode._inflate(data.slice(nz+2,nz+2+tl));
13441
+ text = bin.readUTF8(bfr,0,bfr.length);
13442
+ }
13437
13443
  out.tabs[type][keyw] = text;
13438
13444
  }
13439
13445
  else if(type=="iTXt") {
@@ -13441,12 +13447,17 @@ UPNG.decode = function(buff)
13441
13447
  var nz = 0, off = offset;
13442
13448
  nz = bin.nextZero(data, off);
13443
13449
  var keyw = bin.readASCII(data, off, nz-off); off = nz + 1;
13444
- data[off]; data[off+1]; off+=2;
13450
+ var cflag = data[off]; data[off+1]; off+=2;
13445
13451
  nz = bin.nextZero(data, off);
13446
13452
  bin.readASCII(data, off, nz-off); off = nz + 1;
13447
13453
  nz = bin.nextZero(data, off);
13448
13454
  bin.readUTF8(data, off, nz-off); off = nz + 1;
13449
- var text = bin.readUTF8(data, off, len-(off-offset));
13455
+ var text, tl=len-(off-offset);
13456
+ if(cflag==0) text = bin.readUTF8(data, off, tl);
13457
+ else {
13458
+ var bfr = UPNG.decode._inflate(data.slice(off,off+tl));
13459
+ text = bin.readUTF8(bfr,0,bfr.length);
13460
+ }
13450
13461
  out.tabs[type][keyw] = text;
13451
13462
  }
13452
13463
  else if(type=="PLTE") {
@@ -13473,12 +13484,12 @@ UPNG.decode = function(buff)
13473
13484
  else if(type=="IEND") {
13474
13485
  break;
13475
13486
  }
13476
- //else { log("unknown chunk type", type, len); }
13487
+ //else { console.log("unknown chunk type", type, len); out.tabs[type]=data.slice(offset,offset+len); }
13477
13488
  offset += len;
13478
13489
  bin.readUint(data, offset); offset += 4;
13479
13490
  }
13480
13491
  if(foff!=0) { var fr = out.frames[out.frames.length-1];
13481
- fr.data = UPNG.decode._decompress(out, fd.slice(0,foff), fr.rect.width, fr.rect.height); foff=0;
13492
+ fr.data = UPNG.decode._decompress(out, fd.slice(0,foff), fr.rect.width, fr.rect.height);
13482
13493
  }
13483
13494
  out.data = UPNG.decode._decompress(out, dd, out.width, out.height);
13484
13495
 
@@ -13488,7 +13499,8 @@ UPNG.decode = function(buff)
13488
13499
 
13489
13500
  UPNG.decode._decompress = function(out, dd, w, h) {
13490
13501
  var bpp = UPNG.decode._getBPP(out), bpl = Math.ceil(w*bpp/8), buff = new Uint8Array((bpl+1+out.interlace)*h);
13491
- dd = UPNG.decode._inflate(dd,buff);
13502
+ if(out.tabs["CgBI"]) dd = UPNG.inflateRaw(dd,buff);
13503
+ else dd = UPNG.decode._inflate(dd,buff);
13492
13504
  if (out.interlace==0) dd = UPNG.decode._filterZero(dd, out, 0, w, h);
13493
13505
  else if(out.interlace==1) dd = UPNG.decode._readInterlace(dd, out);
13494
13506
  //console.log(Date.now()-time);
@@ -13498,7 +13510,7 @@ UPNG.decode._decompress = function(out, dd, w, h) {
13498
13510
  UPNG.decode._inflate = function(data, buff) { var out=UPNG["inflateRaw"](new Uint8Array(data.buffer, 2,data.length-6),buff); return out; };
13499
13511
  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;
13500
13512
  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;
13501
- if(Z)W=new R(N.length>>>2<<3);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);
13513
+ 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);
13502
13514
  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;
13503
13515
  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;
13504
13516
  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;
@@ -13595,7 +13607,7 @@ UPNG.decode._filterZero = function(data, out, off, w, h)
13595
13607
  var bpp = UPNG.decode._getBPP(out), bpl = Math.ceil(w*bpp/8), paeth = UPNG.decode._paeth;
13596
13608
  bpp = Math.ceil(bpp/8);
13597
13609
 
13598
- var i=0, di=1, type=data[off], x=0;
13610
+ var i,di, type=data[off], x=0;
13599
13611
 
13600
13612
  if(type>1) data[off]=[0,0,1][type-2];
13601
13613
  if(type==3) for(x=bpp; x<bpl; x++) data[x+1] = (data[x+1] + (data[x+1-bpp]>>>1) )&255;
@@ -13695,12 +13707,13 @@ UPNG._copyTile = function(sb, sw, sh, tb, tw, th, xoff, yoff, mode)
13695
13707
 
13696
13708
 
13697
13709
 
13710
+
13698
13711
  UPNG.encode = function(bufs, w, h, ps, dels, tabs, forbidPlte)
13699
13712
  {
13700
13713
  if(ps==null) ps=0;
13701
13714
  if(forbidPlte==null) forbidPlte = false;
13702
13715
 
13703
- var nimg = UPNG.encode.compress(bufs, w, h, ps, [false, false, false, 0, forbidPlte]);
13716
+ var nimg = UPNG.encode.compress(bufs, w, h, ps, [false, false, false, 0, forbidPlte,false]);
13704
13717
  UPNG.encode.compressPNG(nimg, -1);
13705
13718
 
13706
13719
  return UPNG.encode._main(nimg, w, h, dels, tabs);
@@ -13848,7 +13861,7 @@ UPNG.encode.compressPNG = function(out, filter, levelZero) {
13848
13861
  UPNG.encode.compress = function(bufs, w, h, ps, prms) // prms: onlyBlend, minBits, forbidPlte
13849
13862
  {
13850
13863
  //var time = Date.now();
13851
- var onlyBlend = prms[0], evenCrd = prms[1], forbidPrev = prms[2], minBits = prms[3], forbidPlte = prms[4];
13864
+ var onlyBlend = prms[0], evenCrd = prms[1], forbidPrev = prms[2], minBits = prms[3], forbidPlte = prms[4], dither=prms[5];
13852
13865
 
13853
13866
  var ctype = 6, depth = 8, alphaAnd=255;
13854
13867
 
@@ -13864,17 +13877,27 @@ UPNG.encode.compress = function(bufs, w, h, ps, prms) // prms: onlyBlend, minBi
13864
13877
  var frms = UPNG.encode.framize(bufs, w, h, onlyBlend, evenCrd, forbidPrev);
13865
13878
  //console.log("framize", Date.now()-time); time = Date.now();
13866
13879
 
13867
- var cmap={}, plte=[], inds=[];
13880
+ var cmap={}, plte=[], inds=[];
13868
13881
 
13869
13882
  if(ps!=0) {
13870
13883
  var nbufs = []; for(var i=0; i<frms.length; i++) nbufs.push(frms[i].img.buffer);
13871
13884
 
13872
- var abuf = UPNG.encode.concatRGBA(nbufs), qres = UPNG.quantize(abuf, ps);
13873
- var cof = 0, bb = new Uint8Array(qres.abuf);
13874
- 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));
13875
- 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; }
13885
+ var abuf = UPNG.encode.concatRGBA(nbufs), qres = UPNG.quantize(abuf, ps);
13876
13886
 
13877
13887
  for(var i=0; i<qres.plte.length; i++) plte.push(qres.plte[i].est.rgba);
13888
+
13889
+ var cof = 0;
13890
+ for(var i=0; i<frms.length; i++) {
13891
+ var frm=frms[i], bln=frm.img.length, ind = new Uint8Array(qres.inds.buffer, cof>>2, bln>>2); inds.push(ind);
13892
+ var bb = new Uint8Array(qres.abuf,cof,bln);
13893
+
13894
+ //console.log(frm.img, frm.width, frm.height);
13895
+ //var time = Date.now();
13896
+ if(dither) UPNG.encode.dither(frm.img, frm.rect.width, frm.rect.height, plte, bb, ind);
13897
+ //console.log(Date.now()-time);
13898
+ frm.img.set(bb); cof+=bln;
13899
+ }
13900
+
13878
13901
  //console.log("quantize", Date.now()-time); time = Date.now();
13879
13902
  }
13880
13903
  else {
@@ -14066,8 +14089,8 @@ UPNG.encode._filterZero = function(img,h,bpp,bpl,data, filter, levelZero)
14066
14089
  else if(h*bpl>500000 || bpp==1) ftry=[0];
14067
14090
  var opts; if(levelZero) opts={level:0};
14068
14091
 
14069
- var CMPR = (levelZero && UZIP!=null) ? UZIP : pako$1;
14070
14092
 
14093
+ var CMPR = (data.length>10e6 && UZIP!=null) ? UZIP : pako$1;
14071
14094
  for(var i=0; i<ftry.length; i++) {
14072
14095
  for(var y=0; y<h; y++) UPNG.encode._filterLine(data, img, y, bpl, bpp, ftry[i]);
14073
14096
  //var nimg = new Uint8Array(data.length);
@@ -14077,6 +14100,7 @@ UPNG.encode._filterZero = function(img,h,bpp,bpl,data, filter, levelZero)
14077
14100
  //console.log(crc, UZIP.adler(data,2,data.length-6));
14078
14101
  fls.push(CMPR["deflate"](data,opts));
14079
14102
  }
14103
+
14080
14104
  var ti, tsize=1e9;
14081
14105
  for(var i=0; i<fls.length; i++) if(fls[i].length<tsize) { ti=i; tsize=fls[i].length; }
14082
14106
  return fls[ti];
@@ -14131,27 +14155,30 @@ UPNG.crc = {
14131
14155
 
14132
14156
  UPNG.quantize = function(abuf, ps)
14133
14157
  {
14134
- var oimg = new Uint8Array(abuf), nimg = oimg.slice(0), nimg32 = new Uint32Array(nimg.buffer);
14158
+ var sb = new Uint8Array(abuf), tb = sb.slice(0), tb32 = new Uint32Array(tb.buffer);
14135
14159
 
14136
- var KD = UPNG.quantize.getKDtree(nimg, ps);
14160
+ var KD = UPNG.quantize.getKDtree(tb, ps);
14137
14161
  var root = KD[0], leafs = KD[1];
14138
14162
 
14139
- UPNG.quantize.planeDst;
14140
- var sb = oimg, tb = nimg32, len=sb.length;
14141
-
14142
- var inds = new Uint8Array(oimg.length>>2);
14143
- for(var i=0; i<len; i+=4) {
14144
- var r=sb[i]*(1/255), g=sb[i+1]*(1/255), b=sb[i+2]*(1/255), a=sb[i+3]*(1/255);
14163
+ var planeDst = UPNG.quantize.planeDst;
14164
+ var len=sb.length;
14145
14165
 
14146
- // exact, but too slow :(
14147
- var nd = UPNG.quantize.getNearest(root, r, g, b, a);
14148
- //var nd = root;
14149
- //while(nd.left) nd = (planeDst(nd.est,r,g,b,a)<=0) ? nd.left : nd.right;
14150
-
14151
- inds[i>>2] = nd.ind;
14152
- tb[i>>2] = nd.est.rgba;
14153
- }
14154
- return { abuf:nimg.buffer, inds:inds, plte:leafs };
14166
+ var inds = new Uint8Array(len>>2), nd;
14167
+ if(sb.length<20e6) // precise, but slow :(
14168
+ for(var i=0; i<len; i+=4) {
14169
+ var r=sb[i]*(1/255), g=sb[i+1]*(1/255), b=sb[i+2]*(1/255), a=sb[i+3]*(1/255);
14170
+
14171
+ nd = UPNG.quantize.getNearest(root, r, g, b, a);
14172
+ inds[i>>2] = nd.ind; tb32[i>>2] = nd.est.rgba;
14173
+ }
14174
+ else
14175
+ for(var i=0; i<len; i+=4) {
14176
+ var r=sb[i]*(1/255), g=sb[i+1]*(1/255), b=sb[i+2]*(1/255), a=sb[i+3]*(1/255);
14177
+
14178
+ nd = root; while(nd.left) nd = (planeDst(nd.est,r,g,b,a)<=0) ? nd.left : nd.right;
14179
+ inds[i>>2] = nd.ind; tb32[i>>2] = nd.est.rgba;
14180
+ }
14181
+ return { abuf:tb.buffer, inds:inds, plte:leafs };
14155
14182
  };
14156
14183
 
14157
14184
  UPNG.quantize.getKDtree = function(nimg, ps, err) {
@@ -14259,12 +14286,12 @@ UPNG.quantize.estats = function(stats){
14259
14286
  ];
14260
14287
 
14261
14288
  var A = Rj, M = UPNG.M4;
14262
- var b = [0.5,0.5,0.5,0.5], mi = 0, tmi = 0;
14289
+ var b = [Math.random(),Math.random(),Math.random(),Math.random()], mi = 0, tmi = 0;
14263
14290
 
14264
14291
  if(N!=0)
14265
- for(var i=0; i<10; i++) {
14292
+ for(var i=0; i<16; i++) {
14266
14293
  b = M.multVec(A, b); tmi = Math.sqrt(M.dot(b,b)); b = M.sml(1/tmi, b);
14267
- if(Math.abs(tmi-mi)<1e-9) break; mi = tmi;
14294
+ if(i!=0 && Math.abs(tmi-mi)<1e-9) break; mi = tmi;
14268
14295
  }
14269
14296
  //b = [0,0,1,0]; mi=N;
14270
14297
  var q = [m0*iN, m1*iN, m2*iN, m3*iN];
@@ -14301,6 +14328,66 @@ UPNG.encode.concatRGBA = function(bufs) {
14301
14328
  return nimg.buffer;
14302
14329
  };
14303
14330
 
14331
+ UPNG.encode.dither = function(sb, w, h, plte, tb, oind) {
14332
+
14333
+ function addErr(er, tg, ti, f) {
14334
+ 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;
14335
+ }
14336
+ function N(x) { return Math.max(0, Math.min(255, x)); }
14337
+ 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); }
14338
+
14339
+
14340
+ var pc=plte.length, nplt = [];
14341
+ for(var i=0; i<pc; i++) {
14342
+ var c = plte[i];
14343
+ nplt.push([((c>>>0)&255), ((c>>>8)&255), ((c>>>16)&255), ((c>>>24)&255)]);
14344
+ }
14345
+ for(var i=0; i<pc; i++) {
14346
+ var ne=0xffffffff, ni=0;
14347
+ for(var j=0; j<pc; j++) { var ce=D(nplt[i],nplt[j]); if(j!=i && ce<ne) { ne=ce; ni=j; } }
14348
+ }
14349
+
14350
+ var tb32 = new Uint32Array(tb.buffer);
14351
+ var err = new Int16Array(w*h*4);
14352
+
14353
+ for(var y=0; y<h; y++) {
14354
+ for(var x=0; x<w; x++) {
14355
+ var i = (y*w+x)*4;
14356
+
14357
+ 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])];
14358
+
14359
+ var ni=0, nd = 0xffffff;
14360
+ for(var j=0; j<pc; j++) {
14361
+ var cd = D(cc,nplt[j]);
14362
+ if(cd<nd) { nd=cd; ni=j; }
14363
+ }
14364
+
14365
+ //ni = oind[i>>2];
14366
+ var nc = nplt[ni];
14367
+ var er = [cc[0]-nc[0], cc[1]-nc[1], cc[2]-nc[2], cc[3]-nc[3]];
14368
+
14369
+ //addErr(er, err, i+4, 16);
14370
+
14371
+ //*
14372
+ if(x!=w-1) addErr(er, err, i+4 , 7);
14373
+ if(y!=h-1) {
14374
+ if(x!= 0) addErr(er, err, i+4*w-4, 3);
14375
+ addErr(er, err, i+4*w , 5);
14376
+ if(x!=w-1) addErr(er, err, i+4*w+4, 1); //*/
14377
+ }
14378
+
14379
+ oind[i>>2] = ni; tb32[i>>2] = plte[ni];
14380
+ }
14381
+ }
14382
+ };
14383
+ if (typeof module !== 'undefined') {
14384
+ if (exports && exports.default) {
14385
+ module.exports = exports.default;
14386
+ } else if (exports) {
14387
+ module.exports = exports;
14388
+ }
14389
+ }
14390
+
14304
14391
  const getImageType = (ctype) => {
14305
14392
  if (ctype === 0)
14306
14393
  return PngType.Greyscale;