@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
|
@@ -24,6 +24,21 @@ declare class PDFWriter {
|
|
|
24
24
|
protected readonly snapshot: DocumentSnapshot;
|
|
25
25
|
private parsedObjects;
|
|
26
26
|
protected constructor(context: PDFContext, objectsPerTick: number, snapshot: DocumentSnapshot);
|
|
27
|
+
/**
|
|
28
|
+
* If PDF has an XRef Stream, then the last object will be probably be skipped on saving.
|
|
29
|
+
* If that's the case, this property will have that object number, and the PDF /Size can
|
|
30
|
+
* be corrected, to be accurate.
|
|
31
|
+
*/
|
|
32
|
+
protected _largestSkippedObjectNum: number;
|
|
33
|
+
/**
|
|
34
|
+
* For incremental saves, defers the decision to the snapshot.
|
|
35
|
+
* For full saves, checks that the object is not an XRef stream object.
|
|
36
|
+
* @param {boolean} incremental If making an incremental save, or a full save of the PDF
|
|
37
|
+
* @param {number} objNum Object number
|
|
38
|
+
* @param {PDFObject} object PDFObject used to check if it is an XRef stream, when not 'incremental' saving
|
|
39
|
+
* @returns {boolean} whether the object should be saved or not
|
|
40
|
+
*/
|
|
41
|
+
protected shouldSave(incremental: boolean, objNum: number, object: PDFObject): boolean;
|
|
27
42
|
serializeToBuffer(): Promise<Uint8Array>;
|
|
28
43
|
protected computeIndirectObjectSize([ref, object]: [
|
|
29
44
|
PDFRef,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PDFWriter.d.ts","sourceRoot":"","sources":["../../../src/core/writers/PDFWriter.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,kBAAkB,MAAM,gCAAgC,CAAC;AAChE,OAAO,SAAS,MAAM,uBAAuB,CAAC;AAC9C,OAAO,UAAU,MAAM,wBAAwB,CAAC;AAChD,OAAO,cAAc,MAAM,4BAA4B,CAAC;AACxD,OAAO,OAAO,MAAM,oBAAoB,CAAC;AACzC,OAAO,SAAS,MAAM,sBAAsB,CAAC;AAC7C,OAAO,MAAM,MAAM,mBAAmB,CAAC;AACvC,OAAO,UAAU,MAAM,eAAe,CAAC;AAKvC,OAAO,WAAW,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"PDFWriter.d.ts","sourceRoot":"","sources":["../../../src/core/writers/PDFWriter.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,kBAAkB,MAAM,gCAAgC,CAAC;AAChE,OAAO,SAAS,MAAM,uBAAuB,CAAC;AAC9C,OAAO,UAAU,MAAM,wBAAwB,CAAC;AAChD,OAAO,cAAc,MAAM,4BAA4B,CAAC;AACxD,OAAO,OAAO,MAAM,oBAAoB,CAAC;AACzC,OAAO,SAAS,MAAM,sBAAsB,CAAC;AAC7C,OAAO,MAAM,MAAM,mBAAmB,CAAC;AACvC,OAAO,UAAU,MAAM,eAAe,CAAC;AAKvC,OAAO,WAAW,MAAM,yBAAyB,CAAC;AAKlD,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,SAAS,CAAC;IAClB,eAAe,EAAE,CAAC,MAAM,EAAE,SAAS,CAAC,EAAE,CAAC;IACvC,IAAI,CAAC,EAAE,kBAAkB,CAAC;IAC1B,WAAW,CAAC,EAAE,cAAc,CAAC;IAC7B,OAAO,EAAE,UAAU,CAAC;CACrB;AAED,cAAM,SAAS;IACb,MAAM,CAAC,UAAU,YAAa,UAAU,kBAAkB,MAAM,eACE;IAElE,MAAM,CAAC,sBAAsB,YAClB,UAAU,kBACH,MAAM,YACZ,gBAAgB,eAC0B;IAEtD,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC;IAEvC,SAAS,CAAC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAC1C,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,CAAC;IAC9C,OAAO,CAAC,aAAa,CAAK;IAE1B,SAAS,aACP,OAAO,EAAE,UAAU,EACnB,cAAc,EAAE,MAAM,EACtB,QAAQ,EAAE,gBAAgB;IAO5B;;;;OAIG;IACH,SAAS,CAAC,wBAAwB,EAAE,MAAM,CAAK;IAE/C;;;;;;;OAOG;IACH,SAAS,CAAC,UAAU,CAClB,WAAW,EAAE,OAAO,EACpB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,SAAS,GAChB,OAAO;IAeJ,iBAAiB,IAAI,OAAO,CAAC,UAAU,CAAC;IAmE9C,SAAS,CAAC,yBAAyB,CAAC,CAAC,GAAG,EAAE,MAAM,CAAC,EAAE;QACjD,MAAM;QACN,SAAS;KACV,GAAG,MAAM;IAMV,SAAS,CAAC,iBAAiB,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,OAAO;cAoB5C,iBAAiB,CAC/B,WAAW,EAAE,OAAO,GACnB,OAAO,CAAC,iBAAiB,CAAC;IAoD7B,SAAS,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,WAAW;IAYvE,SAAS,CAAC,iBAAiB,MAAO,MAAM,aAGtC;CACH;AAED,eAAe,SAAS,CAAC"}
|
|
@@ -12,9 +12,17 @@ const CharCodes_1 = tslib_1.__importDefault(require("../syntax/CharCodes"));
|
|
|
12
12
|
const utils_1 = require("../../utils");
|
|
13
13
|
const PDFNumber_1 = tslib_1.__importDefault(require("../objects/PDFNumber"));
|
|
14
14
|
const PDFStream_1 = tslib_1.__importDefault(require("../objects/PDFStream"));
|
|
15
|
+
const PDFName_1 = tslib_1.__importDefault(require("../objects/PDFName"));
|
|
16
|
+
const PDFRawStream_1 = tslib_1.__importDefault(require("../objects/PDFRawStream"));
|
|
15
17
|
class PDFWriter {
|
|
16
18
|
constructor(context, objectsPerTick, snapshot) {
|
|
17
19
|
this.parsedObjects = 0;
|
|
20
|
+
/**
|
|
21
|
+
* If PDF has an XRef Stream, then the last object will be probably be skipped on saving.
|
|
22
|
+
* If that's the case, this property will have that object number, and the PDF /Size can
|
|
23
|
+
* be corrected, to be accurate.
|
|
24
|
+
*/
|
|
25
|
+
this._largestSkippedObjectNum = 0;
|
|
18
26
|
this.shouldWaitForTick = (n) => {
|
|
19
27
|
this.parsedObjects += n;
|
|
20
28
|
return this.parsedObjects % this.objectsPerTick === 0;
|
|
@@ -23,6 +31,27 @@ class PDFWriter {
|
|
|
23
31
|
this.objectsPerTick = objectsPerTick;
|
|
24
32
|
this.snapshot = snapshot;
|
|
25
33
|
}
|
|
34
|
+
/**
|
|
35
|
+
* For incremental saves, defers the decision to the snapshot.
|
|
36
|
+
* For full saves, checks that the object is not an XRef stream object.
|
|
37
|
+
* @param {boolean} incremental If making an incremental save, or a full save of the PDF
|
|
38
|
+
* @param {number} objNum Object number
|
|
39
|
+
* @param {PDFObject} object PDFObject used to check if it is an XRef stream, when not 'incremental' saving
|
|
40
|
+
* @returns {boolean} whether the object should be saved or not
|
|
41
|
+
*/
|
|
42
|
+
shouldSave(incremental, objNum, object) {
|
|
43
|
+
let should = true;
|
|
44
|
+
if (incremental) {
|
|
45
|
+
should = this.snapshot.shouldSave(objNum);
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
should = !(object instanceof PDFRawStream_1.default &&
|
|
49
|
+
object.dict.lookup(PDFName_1.default.of('Type')) === PDFName_1.default.of('XRef'));
|
|
50
|
+
}
|
|
51
|
+
if (!should && this._largestSkippedObjectNum < objNum)
|
|
52
|
+
this._largestSkippedObjectNum = objNum;
|
|
53
|
+
return should;
|
|
54
|
+
}
|
|
26
55
|
serializeToBuffer() {
|
|
27
56
|
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
28
57
|
const incremental = !(this.snapshot instanceof snapshot_1.DefaultDocumentSnapshot);
|
|
@@ -36,7 +65,7 @@ class PDFWriter {
|
|
|
36
65
|
buffer[offset++] = CharCodes_1.default.Newline;
|
|
37
66
|
for (let idx = 0, len = indirectObjects.length; idx < len; idx++) {
|
|
38
67
|
const [ref, object] = indirectObjects[idx];
|
|
39
|
-
if (!this.
|
|
68
|
+
if (!this.shouldSave(incremental, ref.objectNumber, object)) {
|
|
40
69
|
continue;
|
|
41
70
|
}
|
|
42
71
|
const objectNumber = String(ref.objectNumber);
|
|
@@ -82,8 +111,16 @@ class PDFWriter {
|
|
|
82
111
|
return refSize + objectSize;
|
|
83
112
|
}
|
|
84
113
|
createTrailerDict(prevStartXRef) {
|
|
114
|
+
/**
|
|
115
|
+
* if last object (XRef Stream) is not in the output, then size is one less.
|
|
116
|
+
* An XRef Stream object should always be the largest object number in PDF
|
|
117
|
+
*/
|
|
118
|
+
const size = this.context.largestObjectNumber +
|
|
119
|
+
(this._largestSkippedObjectNum === this.context.largestObjectNumber
|
|
120
|
+
? 0
|
|
121
|
+
: 1);
|
|
85
122
|
return this.context.obj({
|
|
86
|
-
Size:
|
|
123
|
+
Size: size,
|
|
87
124
|
Root: this.context.trailerInfo.Root,
|
|
88
125
|
Encrypt: this.context.trailerInfo.Encrypt,
|
|
89
126
|
Info: this.context.trailerInfo.Info,
|
|
@@ -93,6 +130,7 @@ class PDFWriter {
|
|
|
93
130
|
}
|
|
94
131
|
computeBufferSize(incremental) {
|
|
95
132
|
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
133
|
+
this._largestSkippedObjectNum = 0;
|
|
96
134
|
const header = PDFHeader_1.default.forVersion(1, 7);
|
|
97
135
|
let size = this.snapshot.pdfSize;
|
|
98
136
|
if (!incremental) {
|
|
@@ -105,7 +143,7 @@ class PDFWriter {
|
|
|
105
143
|
for (let idx = 0, len = indirectObjects.length; idx < len; idx++) {
|
|
106
144
|
const indirectObject = indirectObjects[idx];
|
|
107
145
|
const [ref, object] = indirectObject;
|
|
108
|
-
if (!this.
|
|
146
|
+
if (!this.shouldSave(incremental, ref.objectNumber, object))
|
|
109
147
|
continue;
|
|
110
148
|
if (security)
|
|
111
149
|
this.encrypt(ref, object, security);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PDFWriter.js","sourceRoot":"","sources":["../../../src/core/writers/PDFWriter.ts"],"names":[],"mappings":";;;AAAA,iDAG4B;AAE5B,gGAAgE;AAChE,8EAA8C;AAC9C,gFAAgD;AAChD,wFAAwD;AAGxD,uEAAuC;AAEvC,4FAA4D;AAC5D,4EAA4C;AAC5C,uCAAgE;AAChE,6EAA6C;AAE7C,6EAA6C;
|
|
1
|
+
{"version":3,"file":"PDFWriter.js","sourceRoot":"","sources":["../../../src/core/writers/PDFWriter.ts"],"names":[],"mappings":"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"}
|
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("@
|
|
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;
|
package/cjs/utils/png.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"png.js","sourceRoot":"","sources":["../../src/utils/png.ts"],"names":[],"mappings":";;;;AAAA,
|
|
1
|
+
{"version":3,"file":"png.js","sourceRoot":"","sources":["../../src/utils/png.ts"],"names":[],"mappings":"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"}
|
package/dist/pdf-lib.esm.js
CHANGED
|
@@ -10325,6 +10325,12 @@ PDFObjectStream.withContextAndObjects = (context, objects, encode = true) => new
|
|
|
10325
10325
|
class PDFWriter {
|
|
10326
10326
|
constructor(context, objectsPerTick, snapshot) {
|
|
10327
10327
|
this.parsedObjects = 0;
|
|
10328
|
+
/**
|
|
10329
|
+
* If PDF has an XRef Stream, then the last object will be probably be skipped on saving.
|
|
10330
|
+
* If that's the case, this property will have that object number, and the PDF /Size can
|
|
10331
|
+
* be corrected, to be accurate.
|
|
10332
|
+
*/
|
|
10333
|
+
this._largestSkippedObjectNum = 0;
|
|
10328
10334
|
this.shouldWaitForTick = (n) => {
|
|
10329
10335
|
this.parsedObjects += n;
|
|
10330
10336
|
return this.parsedObjects % this.objectsPerTick === 0;
|
|
@@ -10333,6 +10339,27 @@ class PDFWriter {
|
|
|
10333
10339
|
this.objectsPerTick = objectsPerTick;
|
|
10334
10340
|
this.snapshot = snapshot;
|
|
10335
10341
|
}
|
|
10342
|
+
/**
|
|
10343
|
+
* For incremental saves, defers the decision to the snapshot.
|
|
10344
|
+
* For full saves, checks that the object is not an XRef stream object.
|
|
10345
|
+
* @param {boolean} incremental If making an incremental save, or a full save of the PDF
|
|
10346
|
+
* @param {number} objNum Object number
|
|
10347
|
+
* @param {PDFObject} object PDFObject used to check if it is an XRef stream, when not 'incremental' saving
|
|
10348
|
+
* @returns {boolean} whether the object should be saved or not
|
|
10349
|
+
*/
|
|
10350
|
+
shouldSave(incremental, objNum, object) {
|
|
10351
|
+
let should = true;
|
|
10352
|
+
if (incremental) {
|
|
10353
|
+
should = this.snapshot.shouldSave(objNum);
|
|
10354
|
+
}
|
|
10355
|
+
else {
|
|
10356
|
+
should = !(object instanceof PDFRawStream &&
|
|
10357
|
+
object.dict.lookup(PDFName.of('Type')) === PDFName.of('XRef'));
|
|
10358
|
+
}
|
|
10359
|
+
if (!should && this._largestSkippedObjectNum < objNum)
|
|
10360
|
+
this._largestSkippedObjectNum = objNum;
|
|
10361
|
+
return should;
|
|
10362
|
+
}
|
|
10336
10363
|
serializeToBuffer() {
|
|
10337
10364
|
return __awaiter(this, void 0, void 0, function* () {
|
|
10338
10365
|
const incremental = !(this.snapshot instanceof DefaultDocumentSnapshot);
|
|
@@ -10346,7 +10373,7 @@ class PDFWriter {
|
|
|
10346
10373
|
buffer[offset++] = CharCodes$1.Newline;
|
|
10347
10374
|
for (let idx = 0, len = indirectObjects.length; idx < len; idx++) {
|
|
10348
10375
|
const [ref, object] = indirectObjects[idx];
|
|
10349
|
-
if (!this.
|
|
10376
|
+
if (!this.shouldSave(incremental, ref.objectNumber, object)) {
|
|
10350
10377
|
continue;
|
|
10351
10378
|
}
|
|
10352
10379
|
const objectNumber = String(ref.objectNumber);
|
|
@@ -10392,8 +10419,16 @@ class PDFWriter {
|
|
|
10392
10419
|
return refSize + objectSize;
|
|
10393
10420
|
}
|
|
10394
10421
|
createTrailerDict(prevStartXRef) {
|
|
10422
|
+
/**
|
|
10423
|
+
* if last object (XRef Stream) is not in the output, then size is one less.
|
|
10424
|
+
* An XRef Stream object should always be the largest object number in PDF
|
|
10425
|
+
*/
|
|
10426
|
+
const size = this.context.largestObjectNumber +
|
|
10427
|
+
(this._largestSkippedObjectNum === this.context.largestObjectNumber
|
|
10428
|
+
? 0
|
|
10429
|
+
: 1);
|
|
10395
10430
|
return this.context.obj({
|
|
10396
|
-
Size:
|
|
10431
|
+
Size: size,
|
|
10397
10432
|
Root: this.context.trailerInfo.Root,
|
|
10398
10433
|
Encrypt: this.context.trailerInfo.Encrypt,
|
|
10399
10434
|
Info: this.context.trailerInfo.Info,
|
|
@@ -10403,6 +10438,7 @@ class PDFWriter {
|
|
|
10403
10438
|
}
|
|
10404
10439
|
computeBufferSize(incremental) {
|
|
10405
10440
|
return __awaiter(this, void 0, void 0, function* () {
|
|
10441
|
+
this._largestSkippedObjectNum = 0;
|
|
10406
10442
|
const header = PDFHeader.forVersion(1, 7);
|
|
10407
10443
|
let size = this.snapshot.pdfSize;
|
|
10408
10444
|
if (!incremental) {
|
|
@@ -10415,7 +10451,7 @@ class PDFWriter {
|
|
|
10415
10451
|
for (let idx = 0, len = indirectObjects.length; idx < len; idx++) {
|
|
10416
10452
|
const indirectObject = indirectObjects[idx];
|
|
10417
10453
|
const [ref, object] = indirectObject;
|
|
10418
|
-
if (!this.
|
|
10454
|
+
if (!this.shouldSave(incremental, ref.objectNumber, object))
|
|
10419
10455
|
continue;
|
|
10420
10456
|
if (security)
|
|
10421
10457
|
this.encrypt(ref, object, security);
|
|
@@ -13374,7 +13410,7 @@ UPNG.toRGBA8.decodeImage = function(data, w, h, out)
|
|
|
13374
13410
|
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
13411
|
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
13412
|
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<<
|
|
13413
|
+
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
13414
|
}
|
|
13379
13415
|
}
|
|
13380
13416
|
//console.log(Date.now()-time);
|
|
@@ -13400,6 +13436,7 @@ UPNG.decode = function(buff)
|
|
|
13400
13436
|
//console.log(type,len);
|
|
13401
13437
|
|
|
13402
13438
|
if (type=="IHDR") { UPNG.decode._IHDR(data, offset, out); }
|
|
13439
|
+
else if(type=="CgBI") { out.tabs[type] = data.slice(offset,offset+4); }
|
|
13403
13440
|
else if(type=="IDAT") {
|
|
13404
13441
|
for(var i=0; i<len; i++) dd[doff+i] = data[offset+i];
|
|
13405
13442
|
doff += len;
|
|
@@ -13429,11 +13466,16 @@ UPNG.decode = function(buff)
|
|
|
13429
13466
|
out.tabs[type] = [];
|
|
13430
13467
|
for(var i=0; i<8; i++) out.tabs[type].push(bin.readUint(data, offset+i*4));
|
|
13431
13468
|
}
|
|
13432
|
-
else if(type=="tEXt") {
|
|
13469
|
+
else if(type=="tEXt" || type=="zTXt") {
|
|
13433
13470
|
if(out.tabs[type]==null) out.tabs[type] = {};
|
|
13434
13471
|
var nz = bin.nextZero(data, offset);
|
|
13435
13472
|
var keyw = bin.readASCII(data, offset, nz-offset);
|
|
13436
|
-
var text =
|
|
13473
|
+
var text, tl=offset+len-nz-1;
|
|
13474
|
+
if(type=="tEXt") text = bin.readASCII(data, nz+1, tl);
|
|
13475
|
+
else {
|
|
13476
|
+
var bfr = UPNG.decode._inflate(data.slice(nz+2,nz+2+tl));
|
|
13477
|
+
text = bin.readUTF8(bfr,0,bfr.length);
|
|
13478
|
+
}
|
|
13437
13479
|
out.tabs[type][keyw] = text;
|
|
13438
13480
|
}
|
|
13439
13481
|
else if(type=="iTXt") {
|
|
@@ -13441,12 +13483,17 @@ UPNG.decode = function(buff)
|
|
|
13441
13483
|
var nz = 0, off = offset;
|
|
13442
13484
|
nz = bin.nextZero(data, off);
|
|
13443
13485
|
var keyw = bin.readASCII(data, off, nz-off); off = nz + 1;
|
|
13444
|
-
data[off]; data[off+1]; off+=2;
|
|
13486
|
+
var cflag = data[off]; data[off+1]; off+=2;
|
|
13445
13487
|
nz = bin.nextZero(data, off);
|
|
13446
13488
|
bin.readASCII(data, off, nz-off); off = nz + 1;
|
|
13447
13489
|
nz = bin.nextZero(data, off);
|
|
13448
13490
|
bin.readUTF8(data, off, nz-off); off = nz + 1;
|
|
13449
|
-
var text
|
|
13491
|
+
var text, tl=len-(off-offset);
|
|
13492
|
+
if(cflag==0) text = bin.readUTF8(data, off, tl);
|
|
13493
|
+
else {
|
|
13494
|
+
var bfr = UPNG.decode._inflate(data.slice(off,off+tl));
|
|
13495
|
+
text = bin.readUTF8(bfr,0,bfr.length);
|
|
13496
|
+
}
|
|
13450
13497
|
out.tabs[type][keyw] = text;
|
|
13451
13498
|
}
|
|
13452
13499
|
else if(type=="PLTE") {
|
|
@@ -13473,12 +13520,12 @@ UPNG.decode = function(buff)
|
|
|
13473
13520
|
else if(type=="IEND") {
|
|
13474
13521
|
break;
|
|
13475
13522
|
}
|
|
13476
|
-
//else { log("unknown chunk type", type, len); }
|
|
13523
|
+
//else { console.log("unknown chunk type", type, len); out.tabs[type]=data.slice(offset,offset+len); }
|
|
13477
13524
|
offset += len;
|
|
13478
13525
|
bin.readUint(data, offset); offset += 4;
|
|
13479
13526
|
}
|
|
13480
13527
|
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);
|
|
13528
|
+
fr.data = UPNG.decode._decompress(out, fd.slice(0,foff), fr.rect.width, fr.rect.height);
|
|
13482
13529
|
}
|
|
13483
13530
|
out.data = UPNG.decode._decompress(out, dd, out.width, out.height);
|
|
13484
13531
|
|
|
@@ -13488,7 +13535,8 @@ UPNG.decode = function(buff)
|
|
|
13488
13535
|
|
|
13489
13536
|
UPNG.decode._decompress = function(out, dd, w, h) {
|
|
13490
13537
|
var bpp = UPNG.decode._getBPP(out), bpl = Math.ceil(w*bpp/8), buff = new Uint8Array((bpl+1+out.interlace)*h);
|
|
13491
|
-
dd = UPNG.
|
|
13538
|
+
if(out.tabs["CgBI"]) dd = UPNG.inflateRaw(dd,buff);
|
|
13539
|
+
else dd = UPNG.decode._inflate(dd,buff);
|
|
13492
13540
|
if (out.interlace==0) dd = UPNG.decode._filterZero(dd, out, 0, w, h);
|
|
13493
13541
|
else if(out.interlace==1) dd = UPNG.decode._readInterlace(dd, out);
|
|
13494
13542
|
//console.log(Date.now()-time);
|
|
@@ -13498,7 +13546,7 @@ UPNG.decode._decompress = function(out, dd, w, h) {
|
|
|
13498
13546
|
UPNG.decode._inflate = function(data, buff) { var out=UPNG["inflateRaw"](new Uint8Array(data.buffer, 2,data.length-6),buff); return out; };
|
|
13499
13547
|
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
13548
|
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<<
|
|
13549
|
+
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
13550
|
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
13551
|
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
13552
|
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 +13643,7 @@ UPNG.decode._filterZero = function(data, out, off, w, h)
|
|
|
13595
13643
|
var bpp = UPNG.decode._getBPP(out), bpl = Math.ceil(w*bpp/8), paeth = UPNG.decode._paeth;
|
|
13596
13644
|
bpp = Math.ceil(bpp/8);
|
|
13597
13645
|
|
|
13598
|
-
var i
|
|
13646
|
+
var i,di, type=data[off], x=0;
|
|
13599
13647
|
|
|
13600
13648
|
if(type>1) data[off]=[0,0,1][type-2];
|
|
13601
13649
|
if(type==3) for(x=bpp; x<bpl; x++) data[x+1] = (data[x+1] + (data[x+1-bpp]>>>1) )&255;
|
|
@@ -13695,12 +13743,13 @@ UPNG._copyTile = function(sb, sw, sh, tb, tw, th, xoff, yoff, mode)
|
|
|
13695
13743
|
|
|
13696
13744
|
|
|
13697
13745
|
|
|
13746
|
+
|
|
13698
13747
|
UPNG.encode = function(bufs, w, h, ps, dels, tabs, forbidPlte)
|
|
13699
13748
|
{
|
|
13700
13749
|
if(ps==null) ps=0;
|
|
13701
13750
|
if(forbidPlte==null) forbidPlte = false;
|
|
13702
13751
|
|
|
13703
|
-
var nimg = UPNG.encode.compress(bufs, w, h, ps, [false, false, false, 0, forbidPlte]);
|
|
13752
|
+
var nimg = UPNG.encode.compress(bufs, w, h, ps, [false, false, false, 0, forbidPlte,false]);
|
|
13704
13753
|
UPNG.encode.compressPNG(nimg, -1);
|
|
13705
13754
|
|
|
13706
13755
|
return UPNG.encode._main(nimg, w, h, dels, tabs);
|
|
@@ -13848,7 +13897,7 @@ UPNG.encode.compressPNG = function(out, filter, levelZero) {
|
|
|
13848
13897
|
UPNG.encode.compress = function(bufs, w, h, ps, prms) // prms: onlyBlend, minBits, forbidPlte
|
|
13849
13898
|
{
|
|
13850
13899
|
//var time = Date.now();
|
|
13851
|
-
var onlyBlend = prms[0], evenCrd = prms[1], forbidPrev = prms[2], minBits = prms[3], forbidPlte = prms[4];
|
|
13900
|
+
var onlyBlend = prms[0], evenCrd = prms[1], forbidPrev = prms[2], minBits = prms[3], forbidPlte = prms[4], dither=prms[5];
|
|
13852
13901
|
|
|
13853
13902
|
var ctype = 6, depth = 8, alphaAnd=255;
|
|
13854
13903
|
|
|
@@ -13864,17 +13913,27 @@ UPNG.encode.compress = function(bufs, w, h, ps, prms) // prms: onlyBlend, minBi
|
|
|
13864
13913
|
var frms = UPNG.encode.framize(bufs, w, h, onlyBlend, evenCrd, forbidPrev);
|
|
13865
13914
|
//console.log("framize", Date.now()-time); time = Date.now();
|
|
13866
13915
|
|
|
13867
|
-
var cmap={}, plte=[], inds=[];
|
|
13916
|
+
var cmap={}, plte=[], inds=[];
|
|
13868
13917
|
|
|
13869
13918
|
if(ps!=0) {
|
|
13870
13919
|
var nbufs = []; for(var i=0; i<frms.length; i++) nbufs.push(frms[i].img.buffer);
|
|
13871
13920
|
|
|
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; }
|
|
13921
|
+
var abuf = UPNG.encode.concatRGBA(nbufs), qres = UPNG.quantize(abuf, ps);
|
|
13876
13922
|
|
|
13877
13923
|
for(var i=0; i<qres.plte.length; i++) plte.push(qres.plte[i].est.rgba);
|
|
13924
|
+
|
|
13925
|
+
var cof = 0;
|
|
13926
|
+
for(var i=0; i<frms.length; i++) {
|
|
13927
|
+
var frm=frms[i], bln=frm.img.length, ind = new Uint8Array(qres.inds.buffer, cof>>2, bln>>2); inds.push(ind);
|
|
13928
|
+
var bb = new Uint8Array(qres.abuf,cof,bln);
|
|
13929
|
+
|
|
13930
|
+
//console.log(frm.img, frm.width, frm.height);
|
|
13931
|
+
//var time = Date.now();
|
|
13932
|
+
if(dither) UPNG.encode.dither(frm.img, frm.rect.width, frm.rect.height, plte, bb, ind);
|
|
13933
|
+
//console.log(Date.now()-time);
|
|
13934
|
+
frm.img.set(bb); cof+=bln;
|
|
13935
|
+
}
|
|
13936
|
+
|
|
13878
13937
|
//console.log("quantize", Date.now()-time); time = Date.now();
|
|
13879
13938
|
}
|
|
13880
13939
|
else {
|
|
@@ -14066,8 +14125,8 @@ UPNG.encode._filterZero = function(img,h,bpp,bpl,data, filter, levelZero)
|
|
|
14066
14125
|
else if(h*bpl>500000 || bpp==1) ftry=[0];
|
|
14067
14126
|
var opts; if(levelZero) opts={level:0};
|
|
14068
14127
|
|
|
14069
|
-
var CMPR = (levelZero && UZIP!=null) ? UZIP : pako$1;
|
|
14070
14128
|
|
|
14129
|
+
var CMPR = (data.length>10e6 && UZIP!=null) ? UZIP : pako$1;
|
|
14071
14130
|
for(var i=0; i<ftry.length; i++) {
|
|
14072
14131
|
for(var y=0; y<h; y++) UPNG.encode._filterLine(data, img, y, bpl, bpp, ftry[i]);
|
|
14073
14132
|
//var nimg = new Uint8Array(data.length);
|
|
@@ -14077,6 +14136,7 @@ UPNG.encode._filterZero = function(img,h,bpp,bpl,data, filter, levelZero)
|
|
|
14077
14136
|
//console.log(crc, UZIP.adler(data,2,data.length-6));
|
|
14078
14137
|
fls.push(CMPR["deflate"](data,opts));
|
|
14079
14138
|
}
|
|
14139
|
+
|
|
14080
14140
|
var ti, tsize=1e9;
|
|
14081
14141
|
for(var i=0; i<fls.length; i++) if(fls[i].length<tsize) { ti=i; tsize=fls[i].length; }
|
|
14082
14142
|
return fls[ti];
|
|
@@ -14131,27 +14191,30 @@ UPNG.crc = {
|
|
|
14131
14191
|
|
|
14132
14192
|
UPNG.quantize = function(abuf, ps)
|
|
14133
14193
|
{
|
|
14134
|
-
var
|
|
14194
|
+
var sb = new Uint8Array(abuf), tb = sb.slice(0), tb32 = new Uint32Array(tb.buffer);
|
|
14135
14195
|
|
|
14136
|
-
var KD = UPNG.quantize.getKDtree(
|
|
14196
|
+
var KD = UPNG.quantize.getKDtree(tb, ps);
|
|
14137
14197
|
var root = KD[0], leafs = KD[1];
|
|
14138
14198
|
|
|
14139
|
-
UPNG.quantize.planeDst;
|
|
14140
|
-
var
|
|
14199
|
+
var planeDst = UPNG.quantize.planeDst;
|
|
14200
|
+
var len=sb.length;
|
|
14141
14201
|
|
|
14142
|
-
var inds = new Uint8Array(
|
|
14143
|
-
|
|
14144
|
-
var
|
|
14145
|
-
|
|
14146
|
-
|
|
14147
|
-
|
|
14148
|
-
|
|
14149
|
-
|
|
14150
|
-
|
|
14151
|
-
|
|
14152
|
-
|
|
14153
|
-
|
|
14154
|
-
|
|
14202
|
+
var inds = new Uint8Array(len>>2), nd;
|
|
14203
|
+
if(sb.length<20e6) // precise, but slow :(
|
|
14204
|
+
for(var i=0; i<len; i+=4) {
|
|
14205
|
+
var r=sb[i]*(1/255), g=sb[i+1]*(1/255), b=sb[i+2]*(1/255), a=sb[i+3]*(1/255);
|
|
14206
|
+
|
|
14207
|
+
nd = UPNG.quantize.getNearest(root, r, g, b, a);
|
|
14208
|
+
inds[i>>2] = nd.ind; tb32[i>>2] = nd.est.rgba;
|
|
14209
|
+
}
|
|
14210
|
+
else
|
|
14211
|
+
for(var i=0; i<len; i+=4) {
|
|
14212
|
+
var r=sb[i]*(1/255), g=sb[i+1]*(1/255), b=sb[i+2]*(1/255), a=sb[i+3]*(1/255);
|
|
14213
|
+
|
|
14214
|
+
nd = root; while(nd.left) nd = (planeDst(nd.est,r,g,b,a)<=0) ? nd.left : nd.right;
|
|
14215
|
+
inds[i>>2] = nd.ind; tb32[i>>2] = nd.est.rgba;
|
|
14216
|
+
}
|
|
14217
|
+
return { abuf:tb.buffer, inds:inds, plte:leafs };
|
|
14155
14218
|
};
|
|
14156
14219
|
|
|
14157
14220
|
UPNG.quantize.getKDtree = function(nimg, ps, err) {
|
|
@@ -14259,12 +14322,12 @@ UPNG.quantize.estats = function(stats){
|
|
|
14259
14322
|
];
|
|
14260
14323
|
|
|
14261
14324
|
var A = Rj, M = UPNG.M4;
|
|
14262
|
-
var b = [
|
|
14325
|
+
var b = [Math.random(),Math.random(),Math.random(),Math.random()], mi = 0, tmi = 0;
|
|
14263
14326
|
|
|
14264
14327
|
if(N!=0)
|
|
14265
|
-
for(var i=0; i<
|
|
14328
|
+
for(var i=0; i<16; i++) {
|
|
14266
14329
|
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;
|
|
14330
|
+
if(i!=0 && Math.abs(tmi-mi)<1e-9) break; mi = tmi;
|
|
14268
14331
|
}
|
|
14269
14332
|
//b = [0,0,1,0]; mi=N;
|
|
14270
14333
|
var q = [m0*iN, m1*iN, m2*iN, m3*iN];
|
|
@@ -14301,6 +14364,66 @@ UPNG.encode.concatRGBA = function(bufs) {
|
|
|
14301
14364
|
return nimg.buffer;
|
|
14302
14365
|
};
|
|
14303
14366
|
|
|
14367
|
+
UPNG.encode.dither = function(sb, w, h, plte, tb, oind) {
|
|
14368
|
+
|
|
14369
|
+
function addErr(er, tg, ti, f) {
|
|
14370
|
+
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;
|
|
14371
|
+
}
|
|
14372
|
+
function N(x) { return Math.max(0, Math.min(255, x)); }
|
|
14373
|
+
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); }
|
|
14374
|
+
|
|
14375
|
+
|
|
14376
|
+
var pc=plte.length, nplt = [];
|
|
14377
|
+
for(var i=0; i<pc; i++) {
|
|
14378
|
+
var c = plte[i];
|
|
14379
|
+
nplt.push([((c>>>0)&255), ((c>>>8)&255), ((c>>>16)&255), ((c>>>24)&255)]);
|
|
14380
|
+
}
|
|
14381
|
+
for(var i=0; i<pc; i++) {
|
|
14382
|
+
var ne=0xffffffff, ni=0;
|
|
14383
|
+
for(var j=0; j<pc; j++) { var ce=D(nplt[i],nplt[j]); if(j!=i && ce<ne) { ne=ce; ni=j; } }
|
|
14384
|
+
}
|
|
14385
|
+
|
|
14386
|
+
var tb32 = new Uint32Array(tb.buffer);
|
|
14387
|
+
var err = new Int16Array(w*h*4);
|
|
14388
|
+
|
|
14389
|
+
for(var y=0; y<h; y++) {
|
|
14390
|
+
for(var x=0; x<w; x++) {
|
|
14391
|
+
var i = (y*w+x)*4;
|
|
14392
|
+
|
|
14393
|
+
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])];
|
|
14394
|
+
|
|
14395
|
+
var ni=0, nd = 0xffffff;
|
|
14396
|
+
for(var j=0; j<pc; j++) {
|
|
14397
|
+
var cd = D(cc,nplt[j]);
|
|
14398
|
+
if(cd<nd) { nd=cd; ni=j; }
|
|
14399
|
+
}
|
|
14400
|
+
|
|
14401
|
+
//ni = oind[i>>2];
|
|
14402
|
+
var nc = nplt[ni];
|
|
14403
|
+
var er = [cc[0]-nc[0], cc[1]-nc[1], cc[2]-nc[2], cc[3]-nc[3]];
|
|
14404
|
+
|
|
14405
|
+
//addErr(er, err, i+4, 16);
|
|
14406
|
+
|
|
14407
|
+
//*
|
|
14408
|
+
if(x!=w-1) addErr(er, err, i+4 , 7);
|
|
14409
|
+
if(y!=h-1) {
|
|
14410
|
+
if(x!= 0) addErr(er, err, i+4*w-4, 3);
|
|
14411
|
+
addErr(er, err, i+4*w , 5);
|
|
14412
|
+
if(x!=w-1) addErr(er, err, i+4*w+4, 1); //*/
|
|
14413
|
+
}
|
|
14414
|
+
|
|
14415
|
+
oind[i>>2] = ni; tb32[i>>2] = plte[ni];
|
|
14416
|
+
}
|
|
14417
|
+
}
|
|
14418
|
+
};
|
|
14419
|
+
if (typeof module !== 'undefined') {
|
|
14420
|
+
if (exports && exports.default) {
|
|
14421
|
+
module.exports = exports.default;
|
|
14422
|
+
} else if (exports) {
|
|
14423
|
+
module.exports = exports;
|
|
14424
|
+
}
|
|
14425
|
+
}
|
|
14426
|
+
|
|
14304
14427
|
const getImageType = (ctype) => {
|
|
14305
14428
|
if (ctype === 0)
|
|
14306
14429
|
return PngType.Greyscale;
|