@mistweaverco/kulala-cli 0.7.0 → 0.8.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/cli.cjs +3799 -19
- package/dist/install-backend.cjs +1 -1
- package/package.json +6 -3
package/dist/cli.cjs
CHANGED
|
@@ -46,7 +46,7 @@ let node_readline = require("node:readline");
|
|
|
46
46
|
node_readline = __toESM(node_readline, 1);
|
|
47
47
|
var package_default = {
|
|
48
48
|
name: "@mistweaverco/kulala-cli",
|
|
49
|
-
version: "0.
|
|
49
|
+
version: "0.8.0",
|
|
50
50
|
repository: {
|
|
51
51
|
"type": "git",
|
|
52
52
|
"url": "https://github.com/mistweaverco/kulala-cli"
|
|
@@ -62,16 +62,19 @@ var package_default = {
|
|
|
62
62
|
"postinstall": "node dist/install-backend.cjs || true"
|
|
63
63
|
},
|
|
64
64
|
devDependencies: {
|
|
65
|
-
"@inquirer/core": "
|
|
65
|
+
"@inquirer/core": "11.2.1",
|
|
66
66
|
"@inquirer/select": "4.3.4",
|
|
67
|
-
"@inquirer/type": "
|
|
67
|
+
"@inquirer/type": "4.0.7",
|
|
68
68
|
"@types/node": "25.9.1",
|
|
69
|
+
"@types/pngjs": "6.0.5",
|
|
69
70
|
"chalk": "5.6.2",
|
|
70
71
|
"cli-highlight": "2.1.11",
|
|
71
72
|
"commander": "15.0.0",
|
|
72
73
|
"eslint-plugin-prettier": "5.5.6",
|
|
73
74
|
"globals": "17.6.0",
|
|
75
|
+
"jpeg-js": "0.4.4",
|
|
74
76
|
"picocolors": "1.1.1",
|
|
77
|
+
"pngjs": "7.0.0",
|
|
75
78
|
"prettier": "3.8.4",
|
|
76
79
|
"tsx": "4.22.4",
|
|
77
80
|
"typescript": "5.9.3",
|
|
@@ -3471,7 +3474,7 @@ function fileWalker(inputPath, extensions) {
|
|
|
3471
3474
|
}
|
|
3472
3475
|
//#endregion
|
|
3473
3476
|
//#region src/versions/backend.ts
|
|
3474
|
-
var KULALA_CORE_VERSION = "0.24.
|
|
3477
|
+
var KULALA_CORE_VERSION = "0.24.1";
|
|
3475
3478
|
//#endregion
|
|
3476
3479
|
//#region src/lib/downloader/index.ts
|
|
3477
3480
|
var BINARY_NAME = "kulala-core";
|
|
@@ -57805,7 +57808,7 @@ var require_foreign_content = /* @__PURE__ */ __commonJSMin(((exports) => {
|
|
|
57805
57808
|
}));
|
|
57806
57809
|
//#endregion
|
|
57807
57810
|
//#region node_modules/.pnpm/parse5@5.1.1/node_modules/parse5/lib/parser/index.js
|
|
57808
|
-
var require_parser = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
57811
|
+
var require_parser$1 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
57809
57812
|
var Tokenizer = require_tokenizer();
|
|
57810
57813
|
var OpenElementStack = require_open_element_stack();
|
|
57811
57814
|
var FormattingElementList = require_formatting_element_list();
|
|
@@ -59683,7 +59686,7 @@ var require_serializer = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
|
59683
59686
|
//#endregion
|
|
59684
59687
|
//#region node_modules/.pnpm/parse5@5.1.1/node_modules/parse5/lib/index.js
|
|
59685
59688
|
var require_lib$2 = /* @__PURE__ */ __commonJSMin(((exports) => {
|
|
59686
|
-
var Parser = require_parser();
|
|
59689
|
+
var Parser = require_parser$1();
|
|
59687
59690
|
var Serializer = require_serializer();
|
|
59688
59691
|
exports.parse = function parse(html, options) {
|
|
59689
59692
|
return new Parser(options).parse(html);
|
|
@@ -62842,18 +62845,3742 @@ function highlightCode(text, language) {
|
|
|
62842
62845
|
}
|
|
62843
62846
|
}
|
|
62844
62847
|
//#endregion
|
|
62848
|
+
//#region node_modules/.pnpm/jpeg-js@0.4.4/node_modules/jpeg-js/lib/encoder.js
|
|
62849
|
+
var require_encoder = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
62850
|
+
function JPEGEncoder(quality) {
|
|
62851
|
+
var ffloor = Math.floor;
|
|
62852
|
+
var YTable = new Array(64);
|
|
62853
|
+
var UVTable = new Array(64);
|
|
62854
|
+
var fdtbl_Y = new Array(64);
|
|
62855
|
+
var fdtbl_UV = new Array(64);
|
|
62856
|
+
var YDC_HT;
|
|
62857
|
+
var UVDC_HT;
|
|
62858
|
+
var YAC_HT;
|
|
62859
|
+
var UVAC_HT;
|
|
62860
|
+
var bitcode = new Array(65535);
|
|
62861
|
+
var category = new Array(65535);
|
|
62862
|
+
var outputfDCTQuant = new Array(64);
|
|
62863
|
+
var DU = new Array(64);
|
|
62864
|
+
var byteout = [];
|
|
62865
|
+
var bytenew = 0;
|
|
62866
|
+
var bytepos = 7;
|
|
62867
|
+
var YDU = new Array(64);
|
|
62868
|
+
var UDU = new Array(64);
|
|
62869
|
+
var VDU = new Array(64);
|
|
62870
|
+
var clt = new Array(256);
|
|
62871
|
+
var RGB_YUV_TABLE = new Array(2048);
|
|
62872
|
+
var currentQuality;
|
|
62873
|
+
var ZigZag = [
|
|
62874
|
+
0,
|
|
62875
|
+
1,
|
|
62876
|
+
5,
|
|
62877
|
+
6,
|
|
62878
|
+
14,
|
|
62879
|
+
15,
|
|
62880
|
+
27,
|
|
62881
|
+
28,
|
|
62882
|
+
2,
|
|
62883
|
+
4,
|
|
62884
|
+
7,
|
|
62885
|
+
13,
|
|
62886
|
+
16,
|
|
62887
|
+
26,
|
|
62888
|
+
29,
|
|
62889
|
+
42,
|
|
62890
|
+
3,
|
|
62891
|
+
8,
|
|
62892
|
+
12,
|
|
62893
|
+
17,
|
|
62894
|
+
25,
|
|
62895
|
+
30,
|
|
62896
|
+
41,
|
|
62897
|
+
43,
|
|
62898
|
+
9,
|
|
62899
|
+
11,
|
|
62900
|
+
18,
|
|
62901
|
+
24,
|
|
62902
|
+
31,
|
|
62903
|
+
40,
|
|
62904
|
+
44,
|
|
62905
|
+
53,
|
|
62906
|
+
10,
|
|
62907
|
+
19,
|
|
62908
|
+
23,
|
|
62909
|
+
32,
|
|
62910
|
+
39,
|
|
62911
|
+
45,
|
|
62912
|
+
52,
|
|
62913
|
+
54,
|
|
62914
|
+
20,
|
|
62915
|
+
22,
|
|
62916
|
+
33,
|
|
62917
|
+
38,
|
|
62918
|
+
46,
|
|
62919
|
+
51,
|
|
62920
|
+
55,
|
|
62921
|
+
60,
|
|
62922
|
+
21,
|
|
62923
|
+
34,
|
|
62924
|
+
37,
|
|
62925
|
+
47,
|
|
62926
|
+
50,
|
|
62927
|
+
56,
|
|
62928
|
+
59,
|
|
62929
|
+
61,
|
|
62930
|
+
35,
|
|
62931
|
+
36,
|
|
62932
|
+
48,
|
|
62933
|
+
49,
|
|
62934
|
+
57,
|
|
62935
|
+
58,
|
|
62936
|
+
62,
|
|
62937
|
+
63
|
|
62938
|
+
];
|
|
62939
|
+
var std_dc_luminance_nrcodes = [
|
|
62940
|
+
0,
|
|
62941
|
+
0,
|
|
62942
|
+
1,
|
|
62943
|
+
5,
|
|
62944
|
+
1,
|
|
62945
|
+
1,
|
|
62946
|
+
1,
|
|
62947
|
+
1,
|
|
62948
|
+
1,
|
|
62949
|
+
1,
|
|
62950
|
+
0,
|
|
62951
|
+
0,
|
|
62952
|
+
0,
|
|
62953
|
+
0,
|
|
62954
|
+
0,
|
|
62955
|
+
0,
|
|
62956
|
+
0
|
|
62957
|
+
];
|
|
62958
|
+
var std_dc_luminance_values = [
|
|
62959
|
+
0,
|
|
62960
|
+
1,
|
|
62961
|
+
2,
|
|
62962
|
+
3,
|
|
62963
|
+
4,
|
|
62964
|
+
5,
|
|
62965
|
+
6,
|
|
62966
|
+
7,
|
|
62967
|
+
8,
|
|
62968
|
+
9,
|
|
62969
|
+
10,
|
|
62970
|
+
11
|
|
62971
|
+
];
|
|
62972
|
+
var std_ac_luminance_nrcodes = [
|
|
62973
|
+
0,
|
|
62974
|
+
0,
|
|
62975
|
+
2,
|
|
62976
|
+
1,
|
|
62977
|
+
3,
|
|
62978
|
+
3,
|
|
62979
|
+
2,
|
|
62980
|
+
4,
|
|
62981
|
+
3,
|
|
62982
|
+
5,
|
|
62983
|
+
5,
|
|
62984
|
+
4,
|
|
62985
|
+
4,
|
|
62986
|
+
0,
|
|
62987
|
+
0,
|
|
62988
|
+
1,
|
|
62989
|
+
125
|
|
62990
|
+
];
|
|
62991
|
+
var std_ac_luminance_values = [
|
|
62992
|
+
1,
|
|
62993
|
+
2,
|
|
62994
|
+
3,
|
|
62995
|
+
0,
|
|
62996
|
+
4,
|
|
62997
|
+
17,
|
|
62998
|
+
5,
|
|
62999
|
+
18,
|
|
63000
|
+
33,
|
|
63001
|
+
49,
|
|
63002
|
+
65,
|
|
63003
|
+
6,
|
|
63004
|
+
19,
|
|
63005
|
+
81,
|
|
63006
|
+
97,
|
|
63007
|
+
7,
|
|
63008
|
+
34,
|
|
63009
|
+
113,
|
|
63010
|
+
20,
|
|
63011
|
+
50,
|
|
63012
|
+
129,
|
|
63013
|
+
145,
|
|
63014
|
+
161,
|
|
63015
|
+
8,
|
|
63016
|
+
35,
|
|
63017
|
+
66,
|
|
63018
|
+
177,
|
|
63019
|
+
193,
|
|
63020
|
+
21,
|
|
63021
|
+
82,
|
|
63022
|
+
209,
|
|
63023
|
+
240,
|
|
63024
|
+
36,
|
|
63025
|
+
51,
|
|
63026
|
+
98,
|
|
63027
|
+
114,
|
|
63028
|
+
130,
|
|
63029
|
+
9,
|
|
63030
|
+
10,
|
|
63031
|
+
22,
|
|
63032
|
+
23,
|
|
63033
|
+
24,
|
|
63034
|
+
25,
|
|
63035
|
+
26,
|
|
63036
|
+
37,
|
|
63037
|
+
38,
|
|
63038
|
+
39,
|
|
63039
|
+
40,
|
|
63040
|
+
41,
|
|
63041
|
+
42,
|
|
63042
|
+
52,
|
|
63043
|
+
53,
|
|
63044
|
+
54,
|
|
63045
|
+
55,
|
|
63046
|
+
56,
|
|
63047
|
+
57,
|
|
63048
|
+
58,
|
|
63049
|
+
67,
|
|
63050
|
+
68,
|
|
63051
|
+
69,
|
|
63052
|
+
70,
|
|
63053
|
+
71,
|
|
63054
|
+
72,
|
|
63055
|
+
73,
|
|
63056
|
+
74,
|
|
63057
|
+
83,
|
|
63058
|
+
84,
|
|
63059
|
+
85,
|
|
63060
|
+
86,
|
|
63061
|
+
87,
|
|
63062
|
+
88,
|
|
63063
|
+
89,
|
|
63064
|
+
90,
|
|
63065
|
+
99,
|
|
63066
|
+
100,
|
|
63067
|
+
101,
|
|
63068
|
+
102,
|
|
63069
|
+
103,
|
|
63070
|
+
104,
|
|
63071
|
+
105,
|
|
63072
|
+
106,
|
|
63073
|
+
115,
|
|
63074
|
+
116,
|
|
63075
|
+
117,
|
|
63076
|
+
118,
|
|
63077
|
+
119,
|
|
63078
|
+
120,
|
|
63079
|
+
121,
|
|
63080
|
+
122,
|
|
63081
|
+
131,
|
|
63082
|
+
132,
|
|
63083
|
+
133,
|
|
63084
|
+
134,
|
|
63085
|
+
135,
|
|
63086
|
+
136,
|
|
63087
|
+
137,
|
|
63088
|
+
138,
|
|
63089
|
+
146,
|
|
63090
|
+
147,
|
|
63091
|
+
148,
|
|
63092
|
+
149,
|
|
63093
|
+
150,
|
|
63094
|
+
151,
|
|
63095
|
+
152,
|
|
63096
|
+
153,
|
|
63097
|
+
154,
|
|
63098
|
+
162,
|
|
63099
|
+
163,
|
|
63100
|
+
164,
|
|
63101
|
+
165,
|
|
63102
|
+
166,
|
|
63103
|
+
167,
|
|
63104
|
+
168,
|
|
63105
|
+
169,
|
|
63106
|
+
170,
|
|
63107
|
+
178,
|
|
63108
|
+
179,
|
|
63109
|
+
180,
|
|
63110
|
+
181,
|
|
63111
|
+
182,
|
|
63112
|
+
183,
|
|
63113
|
+
184,
|
|
63114
|
+
185,
|
|
63115
|
+
186,
|
|
63116
|
+
194,
|
|
63117
|
+
195,
|
|
63118
|
+
196,
|
|
63119
|
+
197,
|
|
63120
|
+
198,
|
|
63121
|
+
199,
|
|
63122
|
+
200,
|
|
63123
|
+
201,
|
|
63124
|
+
202,
|
|
63125
|
+
210,
|
|
63126
|
+
211,
|
|
63127
|
+
212,
|
|
63128
|
+
213,
|
|
63129
|
+
214,
|
|
63130
|
+
215,
|
|
63131
|
+
216,
|
|
63132
|
+
217,
|
|
63133
|
+
218,
|
|
63134
|
+
225,
|
|
63135
|
+
226,
|
|
63136
|
+
227,
|
|
63137
|
+
228,
|
|
63138
|
+
229,
|
|
63139
|
+
230,
|
|
63140
|
+
231,
|
|
63141
|
+
232,
|
|
63142
|
+
233,
|
|
63143
|
+
234,
|
|
63144
|
+
241,
|
|
63145
|
+
242,
|
|
63146
|
+
243,
|
|
63147
|
+
244,
|
|
63148
|
+
245,
|
|
63149
|
+
246,
|
|
63150
|
+
247,
|
|
63151
|
+
248,
|
|
63152
|
+
249,
|
|
63153
|
+
250
|
|
63154
|
+
];
|
|
63155
|
+
var std_dc_chrominance_nrcodes = [
|
|
63156
|
+
0,
|
|
63157
|
+
0,
|
|
63158
|
+
3,
|
|
63159
|
+
1,
|
|
63160
|
+
1,
|
|
63161
|
+
1,
|
|
63162
|
+
1,
|
|
63163
|
+
1,
|
|
63164
|
+
1,
|
|
63165
|
+
1,
|
|
63166
|
+
1,
|
|
63167
|
+
1,
|
|
63168
|
+
0,
|
|
63169
|
+
0,
|
|
63170
|
+
0,
|
|
63171
|
+
0,
|
|
63172
|
+
0
|
|
63173
|
+
];
|
|
63174
|
+
var std_dc_chrominance_values = [
|
|
63175
|
+
0,
|
|
63176
|
+
1,
|
|
63177
|
+
2,
|
|
63178
|
+
3,
|
|
63179
|
+
4,
|
|
63180
|
+
5,
|
|
63181
|
+
6,
|
|
63182
|
+
7,
|
|
63183
|
+
8,
|
|
63184
|
+
9,
|
|
63185
|
+
10,
|
|
63186
|
+
11
|
|
63187
|
+
];
|
|
63188
|
+
var std_ac_chrominance_nrcodes = [
|
|
63189
|
+
0,
|
|
63190
|
+
0,
|
|
63191
|
+
2,
|
|
63192
|
+
1,
|
|
63193
|
+
2,
|
|
63194
|
+
4,
|
|
63195
|
+
4,
|
|
63196
|
+
3,
|
|
63197
|
+
4,
|
|
63198
|
+
7,
|
|
63199
|
+
5,
|
|
63200
|
+
4,
|
|
63201
|
+
4,
|
|
63202
|
+
0,
|
|
63203
|
+
1,
|
|
63204
|
+
2,
|
|
63205
|
+
119
|
|
63206
|
+
];
|
|
63207
|
+
var std_ac_chrominance_values = [
|
|
63208
|
+
0,
|
|
63209
|
+
1,
|
|
63210
|
+
2,
|
|
63211
|
+
3,
|
|
63212
|
+
17,
|
|
63213
|
+
4,
|
|
63214
|
+
5,
|
|
63215
|
+
33,
|
|
63216
|
+
49,
|
|
63217
|
+
6,
|
|
63218
|
+
18,
|
|
63219
|
+
65,
|
|
63220
|
+
81,
|
|
63221
|
+
7,
|
|
63222
|
+
97,
|
|
63223
|
+
113,
|
|
63224
|
+
19,
|
|
63225
|
+
34,
|
|
63226
|
+
50,
|
|
63227
|
+
129,
|
|
63228
|
+
8,
|
|
63229
|
+
20,
|
|
63230
|
+
66,
|
|
63231
|
+
145,
|
|
63232
|
+
161,
|
|
63233
|
+
177,
|
|
63234
|
+
193,
|
|
63235
|
+
9,
|
|
63236
|
+
35,
|
|
63237
|
+
51,
|
|
63238
|
+
82,
|
|
63239
|
+
240,
|
|
63240
|
+
21,
|
|
63241
|
+
98,
|
|
63242
|
+
114,
|
|
63243
|
+
209,
|
|
63244
|
+
10,
|
|
63245
|
+
22,
|
|
63246
|
+
36,
|
|
63247
|
+
52,
|
|
63248
|
+
225,
|
|
63249
|
+
37,
|
|
63250
|
+
241,
|
|
63251
|
+
23,
|
|
63252
|
+
24,
|
|
63253
|
+
25,
|
|
63254
|
+
26,
|
|
63255
|
+
38,
|
|
63256
|
+
39,
|
|
63257
|
+
40,
|
|
63258
|
+
41,
|
|
63259
|
+
42,
|
|
63260
|
+
53,
|
|
63261
|
+
54,
|
|
63262
|
+
55,
|
|
63263
|
+
56,
|
|
63264
|
+
57,
|
|
63265
|
+
58,
|
|
63266
|
+
67,
|
|
63267
|
+
68,
|
|
63268
|
+
69,
|
|
63269
|
+
70,
|
|
63270
|
+
71,
|
|
63271
|
+
72,
|
|
63272
|
+
73,
|
|
63273
|
+
74,
|
|
63274
|
+
83,
|
|
63275
|
+
84,
|
|
63276
|
+
85,
|
|
63277
|
+
86,
|
|
63278
|
+
87,
|
|
63279
|
+
88,
|
|
63280
|
+
89,
|
|
63281
|
+
90,
|
|
63282
|
+
99,
|
|
63283
|
+
100,
|
|
63284
|
+
101,
|
|
63285
|
+
102,
|
|
63286
|
+
103,
|
|
63287
|
+
104,
|
|
63288
|
+
105,
|
|
63289
|
+
106,
|
|
63290
|
+
115,
|
|
63291
|
+
116,
|
|
63292
|
+
117,
|
|
63293
|
+
118,
|
|
63294
|
+
119,
|
|
63295
|
+
120,
|
|
63296
|
+
121,
|
|
63297
|
+
122,
|
|
63298
|
+
130,
|
|
63299
|
+
131,
|
|
63300
|
+
132,
|
|
63301
|
+
133,
|
|
63302
|
+
134,
|
|
63303
|
+
135,
|
|
63304
|
+
136,
|
|
63305
|
+
137,
|
|
63306
|
+
138,
|
|
63307
|
+
146,
|
|
63308
|
+
147,
|
|
63309
|
+
148,
|
|
63310
|
+
149,
|
|
63311
|
+
150,
|
|
63312
|
+
151,
|
|
63313
|
+
152,
|
|
63314
|
+
153,
|
|
63315
|
+
154,
|
|
63316
|
+
162,
|
|
63317
|
+
163,
|
|
63318
|
+
164,
|
|
63319
|
+
165,
|
|
63320
|
+
166,
|
|
63321
|
+
167,
|
|
63322
|
+
168,
|
|
63323
|
+
169,
|
|
63324
|
+
170,
|
|
63325
|
+
178,
|
|
63326
|
+
179,
|
|
63327
|
+
180,
|
|
63328
|
+
181,
|
|
63329
|
+
182,
|
|
63330
|
+
183,
|
|
63331
|
+
184,
|
|
63332
|
+
185,
|
|
63333
|
+
186,
|
|
63334
|
+
194,
|
|
63335
|
+
195,
|
|
63336
|
+
196,
|
|
63337
|
+
197,
|
|
63338
|
+
198,
|
|
63339
|
+
199,
|
|
63340
|
+
200,
|
|
63341
|
+
201,
|
|
63342
|
+
202,
|
|
63343
|
+
210,
|
|
63344
|
+
211,
|
|
63345
|
+
212,
|
|
63346
|
+
213,
|
|
63347
|
+
214,
|
|
63348
|
+
215,
|
|
63349
|
+
216,
|
|
63350
|
+
217,
|
|
63351
|
+
218,
|
|
63352
|
+
226,
|
|
63353
|
+
227,
|
|
63354
|
+
228,
|
|
63355
|
+
229,
|
|
63356
|
+
230,
|
|
63357
|
+
231,
|
|
63358
|
+
232,
|
|
63359
|
+
233,
|
|
63360
|
+
234,
|
|
63361
|
+
242,
|
|
63362
|
+
243,
|
|
63363
|
+
244,
|
|
63364
|
+
245,
|
|
63365
|
+
246,
|
|
63366
|
+
247,
|
|
63367
|
+
248,
|
|
63368
|
+
249,
|
|
63369
|
+
250
|
|
63370
|
+
];
|
|
63371
|
+
function initQuantTables(sf) {
|
|
63372
|
+
var YQT = [
|
|
63373
|
+
16,
|
|
63374
|
+
11,
|
|
63375
|
+
10,
|
|
63376
|
+
16,
|
|
63377
|
+
24,
|
|
63378
|
+
40,
|
|
63379
|
+
51,
|
|
63380
|
+
61,
|
|
63381
|
+
12,
|
|
63382
|
+
12,
|
|
63383
|
+
14,
|
|
63384
|
+
19,
|
|
63385
|
+
26,
|
|
63386
|
+
58,
|
|
63387
|
+
60,
|
|
63388
|
+
55,
|
|
63389
|
+
14,
|
|
63390
|
+
13,
|
|
63391
|
+
16,
|
|
63392
|
+
24,
|
|
63393
|
+
40,
|
|
63394
|
+
57,
|
|
63395
|
+
69,
|
|
63396
|
+
56,
|
|
63397
|
+
14,
|
|
63398
|
+
17,
|
|
63399
|
+
22,
|
|
63400
|
+
29,
|
|
63401
|
+
51,
|
|
63402
|
+
87,
|
|
63403
|
+
80,
|
|
63404
|
+
62,
|
|
63405
|
+
18,
|
|
63406
|
+
22,
|
|
63407
|
+
37,
|
|
63408
|
+
56,
|
|
63409
|
+
68,
|
|
63410
|
+
109,
|
|
63411
|
+
103,
|
|
63412
|
+
77,
|
|
63413
|
+
24,
|
|
63414
|
+
35,
|
|
63415
|
+
55,
|
|
63416
|
+
64,
|
|
63417
|
+
81,
|
|
63418
|
+
104,
|
|
63419
|
+
113,
|
|
63420
|
+
92,
|
|
63421
|
+
49,
|
|
63422
|
+
64,
|
|
63423
|
+
78,
|
|
63424
|
+
87,
|
|
63425
|
+
103,
|
|
63426
|
+
121,
|
|
63427
|
+
120,
|
|
63428
|
+
101,
|
|
63429
|
+
72,
|
|
63430
|
+
92,
|
|
63431
|
+
95,
|
|
63432
|
+
98,
|
|
63433
|
+
112,
|
|
63434
|
+
100,
|
|
63435
|
+
103,
|
|
63436
|
+
99
|
|
63437
|
+
];
|
|
63438
|
+
for (var i = 0; i < 64; i++) {
|
|
63439
|
+
var t = ffloor((YQT[i] * sf + 50) / 100);
|
|
63440
|
+
if (t < 1) t = 1;
|
|
63441
|
+
else if (t > 255) t = 255;
|
|
63442
|
+
YTable[ZigZag[i]] = t;
|
|
63443
|
+
}
|
|
63444
|
+
var UVQT = [
|
|
63445
|
+
17,
|
|
63446
|
+
18,
|
|
63447
|
+
24,
|
|
63448
|
+
47,
|
|
63449
|
+
99,
|
|
63450
|
+
99,
|
|
63451
|
+
99,
|
|
63452
|
+
99,
|
|
63453
|
+
18,
|
|
63454
|
+
21,
|
|
63455
|
+
26,
|
|
63456
|
+
66,
|
|
63457
|
+
99,
|
|
63458
|
+
99,
|
|
63459
|
+
99,
|
|
63460
|
+
99,
|
|
63461
|
+
24,
|
|
63462
|
+
26,
|
|
63463
|
+
56,
|
|
63464
|
+
99,
|
|
63465
|
+
99,
|
|
63466
|
+
99,
|
|
63467
|
+
99,
|
|
63468
|
+
99,
|
|
63469
|
+
47,
|
|
63470
|
+
66,
|
|
63471
|
+
99,
|
|
63472
|
+
99,
|
|
63473
|
+
99,
|
|
63474
|
+
99,
|
|
63475
|
+
99,
|
|
63476
|
+
99,
|
|
63477
|
+
99,
|
|
63478
|
+
99,
|
|
63479
|
+
99,
|
|
63480
|
+
99,
|
|
63481
|
+
99,
|
|
63482
|
+
99,
|
|
63483
|
+
99,
|
|
63484
|
+
99,
|
|
63485
|
+
99,
|
|
63486
|
+
99,
|
|
63487
|
+
99,
|
|
63488
|
+
99,
|
|
63489
|
+
99,
|
|
63490
|
+
99,
|
|
63491
|
+
99,
|
|
63492
|
+
99,
|
|
63493
|
+
99,
|
|
63494
|
+
99,
|
|
63495
|
+
99,
|
|
63496
|
+
99,
|
|
63497
|
+
99,
|
|
63498
|
+
99,
|
|
63499
|
+
99,
|
|
63500
|
+
99,
|
|
63501
|
+
99,
|
|
63502
|
+
99,
|
|
63503
|
+
99,
|
|
63504
|
+
99,
|
|
63505
|
+
99,
|
|
63506
|
+
99,
|
|
63507
|
+
99,
|
|
63508
|
+
99
|
|
63509
|
+
];
|
|
63510
|
+
for (var j = 0; j < 64; j++) {
|
|
63511
|
+
var u = ffloor((UVQT[j] * sf + 50) / 100);
|
|
63512
|
+
if (u < 1) u = 1;
|
|
63513
|
+
else if (u > 255) u = 255;
|
|
63514
|
+
UVTable[ZigZag[j]] = u;
|
|
63515
|
+
}
|
|
63516
|
+
var aasf = [
|
|
63517
|
+
1,
|
|
63518
|
+
1.387039845,
|
|
63519
|
+
1.306562965,
|
|
63520
|
+
1.175875602,
|
|
63521
|
+
1,
|
|
63522
|
+
.785694958,
|
|
63523
|
+
.5411961,
|
|
63524
|
+
.275899379
|
|
63525
|
+
];
|
|
63526
|
+
var k = 0;
|
|
63527
|
+
for (var row = 0; row < 8; row++) for (var col = 0; col < 8; col++) {
|
|
63528
|
+
fdtbl_Y[k] = 1 / (YTable[ZigZag[k]] * aasf[row] * aasf[col] * 8);
|
|
63529
|
+
fdtbl_UV[k] = 1 / (UVTable[ZigZag[k]] * aasf[row] * aasf[col] * 8);
|
|
63530
|
+
k++;
|
|
63531
|
+
}
|
|
63532
|
+
}
|
|
63533
|
+
function computeHuffmanTbl(nrcodes, std_table) {
|
|
63534
|
+
var codevalue = 0;
|
|
63535
|
+
var pos_in_table = 0;
|
|
63536
|
+
var HT = new Array();
|
|
63537
|
+
for (var k = 1; k <= 16; k++) {
|
|
63538
|
+
for (var j = 1; j <= nrcodes[k]; j++) {
|
|
63539
|
+
HT[std_table[pos_in_table]] = [];
|
|
63540
|
+
HT[std_table[pos_in_table]][0] = codevalue;
|
|
63541
|
+
HT[std_table[pos_in_table]][1] = k;
|
|
63542
|
+
pos_in_table++;
|
|
63543
|
+
codevalue++;
|
|
63544
|
+
}
|
|
63545
|
+
codevalue *= 2;
|
|
63546
|
+
}
|
|
63547
|
+
return HT;
|
|
63548
|
+
}
|
|
63549
|
+
function initHuffmanTbl() {
|
|
63550
|
+
YDC_HT = computeHuffmanTbl(std_dc_luminance_nrcodes, std_dc_luminance_values);
|
|
63551
|
+
UVDC_HT = computeHuffmanTbl(std_dc_chrominance_nrcodes, std_dc_chrominance_values);
|
|
63552
|
+
YAC_HT = computeHuffmanTbl(std_ac_luminance_nrcodes, std_ac_luminance_values);
|
|
63553
|
+
UVAC_HT = computeHuffmanTbl(std_ac_chrominance_nrcodes, std_ac_chrominance_values);
|
|
63554
|
+
}
|
|
63555
|
+
function initCategoryNumber() {
|
|
63556
|
+
var nrlower = 1;
|
|
63557
|
+
var nrupper = 2;
|
|
63558
|
+
for (var cat = 1; cat <= 15; cat++) {
|
|
63559
|
+
for (var nr = nrlower; nr < nrupper; nr++) {
|
|
63560
|
+
category[32767 + nr] = cat;
|
|
63561
|
+
bitcode[32767 + nr] = [];
|
|
63562
|
+
bitcode[32767 + nr][1] = cat;
|
|
63563
|
+
bitcode[32767 + nr][0] = nr;
|
|
63564
|
+
}
|
|
63565
|
+
for (var nrneg = -(nrupper - 1); nrneg <= -nrlower; nrneg++) {
|
|
63566
|
+
category[32767 + nrneg] = cat;
|
|
63567
|
+
bitcode[32767 + nrneg] = [];
|
|
63568
|
+
bitcode[32767 + nrneg][1] = cat;
|
|
63569
|
+
bitcode[32767 + nrneg][0] = nrupper - 1 + nrneg;
|
|
63570
|
+
}
|
|
63571
|
+
nrlower <<= 1;
|
|
63572
|
+
nrupper <<= 1;
|
|
63573
|
+
}
|
|
63574
|
+
}
|
|
63575
|
+
function initRGBYUVTable() {
|
|
63576
|
+
for (var i = 0; i < 256; i++) {
|
|
63577
|
+
RGB_YUV_TABLE[i] = 19595 * i;
|
|
63578
|
+
RGB_YUV_TABLE[i + 256 >> 0] = 38470 * i;
|
|
63579
|
+
RGB_YUV_TABLE[i + 512 >> 0] = 7471 * i + 32768;
|
|
63580
|
+
RGB_YUV_TABLE[i + 768 >> 0] = -11059 * i;
|
|
63581
|
+
RGB_YUV_TABLE[i + 1024 >> 0] = -21709 * i;
|
|
63582
|
+
RGB_YUV_TABLE[i + 1280 >> 0] = 32768 * i + 8421375;
|
|
63583
|
+
RGB_YUV_TABLE[i + 1536 >> 0] = -27439 * i;
|
|
63584
|
+
RGB_YUV_TABLE[i + 1792 >> 0] = -5329 * i;
|
|
63585
|
+
}
|
|
63586
|
+
}
|
|
63587
|
+
function writeBits(bs) {
|
|
63588
|
+
var value = bs[0];
|
|
63589
|
+
var posval = bs[1] - 1;
|
|
63590
|
+
while (posval >= 0) {
|
|
63591
|
+
if (value & 1 << posval) bytenew |= 1 << bytepos;
|
|
63592
|
+
posval--;
|
|
63593
|
+
bytepos--;
|
|
63594
|
+
if (bytepos < 0) {
|
|
63595
|
+
if (bytenew == 255) {
|
|
63596
|
+
writeByte(255);
|
|
63597
|
+
writeByte(0);
|
|
63598
|
+
} else writeByte(bytenew);
|
|
63599
|
+
bytepos = 7;
|
|
63600
|
+
bytenew = 0;
|
|
63601
|
+
}
|
|
63602
|
+
}
|
|
63603
|
+
}
|
|
63604
|
+
function writeByte(value) {
|
|
63605
|
+
byteout.push(value);
|
|
63606
|
+
}
|
|
63607
|
+
function writeWord(value) {
|
|
63608
|
+
writeByte(value >> 8 & 255);
|
|
63609
|
+
writeByte(value & 255);
|
|
63610
|
+
}
|
|
63611
|
+
function fDCTQuant(data, fdtbl) {
|
|
63612
|
+
var d0, d1, d2, d3, d4, d5, d6, d7;
|
|
63613
|
+
var dataOff = 0;
|
|
63614
|
+
var i;
|
|
63615
|
+
var I8 = 8;
|
|
63616
|
+
var I64 = 64;
|
|
63617
|
+
for (i = 0; i < I8; ++i) {
|
|
63618
|
+
d0 = data[dataOff];
|
|
63619
|
+
d1 = data[dataOff + 1];
|
|
63620
|
+
d2 = data[dataOff + 2];
|
|
63621
|
+
d3 = data[dataOff + 3];
|
|
63622
|
+
d4 = data[dataOff + 4];
|
|
63623
|
+
d5 = data[dataOff + 5];
|
|
63624
|
+
d6 = data[dataOff + 6];
|
|
63625
|
+
d7 = data[dataOff + 7];
|
|
63626
|
+
var tmp0 = d0 + d7;
|
|
63627
|
+
var tmp7 = d0 - d7;
|
|
63628
|
+
var tmp1 = d1 + d6;
|
|
63629
|
+
var tmp6 = d1 - d6;
|
|
63630
|
+
var tmp2 = d2 + d5;
|
|
63631
|
+
var tmp5 = d2 - d5;
|
|
63632
|
+
var tmp3 = d3 + d4;
|
|
63633
|
+
var tmp4 = d3 - d4;
|
|
63634
|
+
var tmp10 = tmp0 + tmp3;
|
|
63635
|
+
var tmp13 = tmp0 - tmp3;
|
|
63636
|
+
var tmp11 = tmp1 + tmp2;
|
|
63637
|
+
var tmp12 = tmp1 - tmp2;
|
|
63638
|
+
data[dataOff] = tmp10 + tmp11;
|
|
63639
|
+
data[dataOff + 4] = tmp10 - tmp11;
|
|
63640
|
+
var z1 = (tmp12 + tmp13) * .707106781;
|
|
63641
|
+
data[dataOff + 2] = tmp13 + z1;
|
|
63642
|
+
data[dataOff + 6] = tmp13 - z1;
|
|
63643
|
+
tmp10 = tmp4 + tmp5;
|
|
63644
|
+
tmp11 = tmp5 + tmp6;
|
|
63645
|
+
tmp12 = tmp6 + tmp7;
|
|
63646
|
+
var z5 = (tmp10 - tmp12) * .382683433;
|
|
63647
|
+
var z2 = .5411961 * tmp10 + z5;
|
|
63648
|
+
var z4 = 1.306562965 * tmp12 + z5;
|
|
63649
|
+
var z3 = tmp11 * .707106781;
|
|
63650
|
+
var z11 = tmp7 + z3;
|
|
63651
|
+
var z13 = tmp7 - z3;
|
|
63652
|
+
data[dataOff + 5] = z13 + z2;
|
|
63653
|
+
data[dataOff + 3] = z13 - z2;
|
|
63654
|
+
data[dataOff + 1] = z11 + z4;
|
|
63655
|
+
data[dataOff + 7] = z11 - z4;
|
|
63656
|
+
dataOff += 8;
|
|
63657
|
+
}
|
|
63658
|
+
dataOff = 0;
|
|
63659
|
+
for (i = 0; i < I8; ++i) {
|
|
63660
|
+
d0 = data[dataOff];
|
|
63661
|
+
d1 = data[dataOff + 8];
|
|
63662
|
+
d2 = data[dataOff + 16];
|
|
63663
|
+
d3 = data[dataOff + 24];
|
|
63664
|
+
d4 = data[dataOff + 32];
|
|
63665
|
+
d5 = data[dataOff + 40];
|
|
63666
|
+
d6 = data[dataOff + 48];
|
|
63667
|
+
d7 = data[dataOff + 56];
|
|
63668
|
+
var tmp0p2 = d0 + d7;
|
|
63669
|
+
var tmp7p2 = d0 - d7;
|
|
63670
|
+
var tmp1p2 = d1 + d6;
|
|
63671
|
+
var tmp6p2 = d1 - d6;
|
|
63672
|
+
var tmp2p2 = d2 + d5;
|
|
63673
|
+
var tmp5p2 = d2 - d5;
|
|
63674
|
+
var tmp3p2 = d3 + d4;
|
|
63675
|
+
var tmp4p2 = d3 - d4;
|
|
63676
|
+
var tmp10p2 = tmp0p2 + tmp3p2;
|
|
63677
|
+
var tmp13p2 = tmp0p2 - tmp3p2;
|
|
63678
|
+
var tmp11p2 = tmp1p2 + tmp2p2;
|
|
63679
|
+
var tmp12p2 = tmp1p2 - tmp2p2;
|
|
63680
|
+
data[dataOff] = tmp10p2 + tmp11p2;
|
|
63681
|
+
data[dataOff + 32] = tmp10p2 - tmp11p2;
|
|
63682
|
+
var z1p2 = (tmp12p2 + tmp13p2) * .707106781;
|
|
63683
|
+
data[dataOff + 16] = tmp13p2 + z1p2;
|
|
63684
|
+
data[dataOff + 48] = tmp13p2 - z1p2;
|
|
63685
|
+
tmp10p2 = tmp4p2 + tmp5p2;
|
|
63686
|
+
tmp11p2 = tmp5p2 + tmp6p2;
|
|
63687
|
+
tmp12p2 = tmp6p2 + tmp7p2;
|
|
63688
|
+
var z5p2 = (tmp10p2 - tmp12p2) * .382683433;
|
|
63689
|
+
var z2p2 = .5411961 * tmp10p2 + z5p2;
|
|
63690
|
+
var z4p2 = 1.306562965 * tmp12p2 + z5p2;
|
|
63691
|
+
var z3p2 = tmp11p2 * .707106781;
|
|
63692
|
+
var z11p2 = tmp7p2 + z3p2;
|
|
63693
|
+
var z13p2 = tmp7p2 - z3p2;
|
|
63694
|
+
data[dataOff + 40] = z13p2 + z2p2;
|
|
63695
|
+
data[dataOff + 24] = z13p2 - z2p2;
|
|
63696
|
+
data[dataOff + 8] = z11p2 + z4p2;
|
|
63697
|
+
data[dataOff + 56] = z11p2 - z4p2;
|
|
63698
|
+
dataOff++;
|
|
63699
|
+
}
|
|
63700
|
+
var fDCTQuant;
|
|
63701
|
+
for (i = 0; i < I64; ++i) {
|
|
63702
|
+
fDCTQuant = data[i] * fdtbl[i];
|
|
63703
|
+
outputfDCTQuant[i] = fDCTQuant > 0 ? fDCTQuant + .5 | 0 : fDCTQuant - .5 | 0;
|
|
63704
|
+
}
|
|
63705
|
+
return outputfDCTQuant;
|
|
63706
|
+
}
|
|
63707
|
+
function writeAPP0() {
|
|
63708
|
+
writeWord(65504);
|
|
63709
|
+
writeWord(16);
|
|
63710
|
+
writeByte(74);
|
|
63711
|
+
writeByte(70);
|
|
63712
|
+
writeByte(73);
|
|
63713
|
+
writeByte(70);
|
|
63714
|
+
writeByte(0);
|
|
63715
|
+
writeByte(1);
|
|
63716
|
+
writeByte(1);
|
|
63717
|
+
writeByte(0);
|
|
63718
|
+
writeWord(1);
|
|
63719
|
+
writeWord(1);
|
|
63720
|
+
writeByte(0);
|
|
63721
|
+
writeByte(0);
|
|
63722
|
+
}
|
|
63723
|
+
function writeAPP1(exifBuffer) {
|
|
63724
|
+
if (!exifBuffer) return;
|
|
63725
|
+
writeWord(65505);
|
|
63726
|
+
if (exifBuffer[0] === 69 && exifBuffer[1] === 120 && exifBuffer[2] === 105 && exifBuffer[3] === 102) writeWord(exifBuffer.length + 2);
|
|
63727
|
+
else {
|
|
63728
|
+
writeWord(exifBuffer.length + 5 + 2);
|
|
63729
|
+
writeByte(69);
|
|
63730
|
+
writeByte(120);
|
|
63731
|
+
writeByte(105);
|
|
63732
|
+
writeByte(102);
|
|
63733
|
+
writeByte(0);
|
|
63734
|
+
}
|
|
63735
|
+
for (var i = 0; i < exifBuffer.length; i++) writeByte(exifBuffer[i]);
|
|
63736
|
+
}
|
|
63737
|
+
function writeSOF0(width, height) {
|
|
63738
|
+
writeWord(65472);
|
|
63739
|
+
writeWord(17);
|
|
63740
|
+
writeByte(8);
|
|
63741
|
+
writeWord(height);
|
|
63742
|
+
writeWord(width);
|
|
63743
|
+
writeByte(3);
|
|
63744
|
+
writeByte(1);
|
|
63745
|
+
writeByte(17);
|
|
63746
|
+
writeByte(0);
|
|
63747
|
+
writeByte(2);
|
|
63748
|
+
writeByte(17);
|
|
63749
|
+
writeByte(1);
|
|
63750
|
+
writeByte(3);
|
|
63751
|
+
writeByte(17);
|
|
63752
|
+
writeByte(1);
|
|
63753
|
+
}
|
|
63754
|
+
function writeDQT() {
|
|
63755
|
+
writeWord(65499);
|
|
63756
|
+
writeWord(132);
|
|
63757
|
+
writeByte(0);
|
|
63758
|
+
for (var i = 0; i < 64; i++) writeByte(YTable[i]);
|
|
63759
|
+
writeByte(1);
|
|
63760
|
+
for (var j = 0; j < 64; j++) writeByte(UVTable[j]);
|
|
63761
|
+
}
|
|
63762
|
+
function writeDHT() {
|
|
63763
|
+
writeWord(65476);
|
|
63764
|
+
writeWord(418);
|
|
63765
|
+
writeByte(0);
|
|
63766
|
+
for (var i = 0; i < 16; i++) writeByte(std_dc_luminance_nrcodes[i + 1]);
|
|
63767
|
+
for (var j = 0; j <= 11; j++) writeByte(std_dc_luminance_values[j]);
|
|
63768
|
+
writeByte(16);
|
|
63769
|
+
for (var k = 0; k < 16; k++) writeByte(std_ac_luminance_nrcodes[k + 1]);
|
|
63770
|
+
for (var l = 0; l <= 161; l++) writeByte(std_ac_luminance_values[l]);
|
|
63771
|
+
writeByte(1);
|
|
63772
|
+
for (var m = 0; m < 16; m++) writeByte(std_dc_chrominance_nrcodes[m + 1]);
|
|
63773
|
+
for (var n = 0; n <= 11; n++) writeByte(std_dc_chrominance_values[n]);
|
|
63774
|
+
writeByte(17);
|
|
63775
|
+
for (var o = 0; o < 16; o++) writeByte(std_ac_chrominance_nrcodes[o + 1]);
|
|
63776
|
+
for (var p = 0; p <= 161; p++) writeByte(std_ac_chrominance_values[p]);
|
|
63777
|
+
}
|
|
63778
|
+
function writeCOM(comments) {
|
|
63779
|
+
if (typeof comments === "undefined" || comments.constructor !== Array) return;
|
|
63780
|
+
comments.forEach((e) => {
|
|
63781
|
+
if (typeof e !== "string") return;
|
|
63782
|
+
writeWord(65534);
|
|
63783
|
+
var l = e.length;
|
|
63784
|
+
writeWord(l + 2);
|
|
63785
|
+
var i;
|
|
63786
|
+
for (i = 0; i < l; i++) writeByte(e.charCodeAt(i));
|
|
63787
|
+
});
|
|
63788
|
+
}
|
|
63789
|
+
function writeSOS() {
|
|
63790
|
+
writeWord(65498);
|
|
63791
|
+
writeWord(12);
|
|
63792
|
+
writeByte(3);
|
|
63793
|
+
writeByte(1);
|
|
63794
|
+
writeByte(0);
|
|
63795
|
+
writeByte(2);
|
|
63796
|
+
writeByte(17);
|
|
63797
|
+
writeByte(3);
|
|
63798
|
+
writeByte(17);
|
|
63799
|
+
writeByte(0);
|
|
63800
|
+
writeByte(63);
|
|
63801
|
+
writeByte(0);
|
|
63802
|
+
}
|
|
63803
|
+
function processDU(CDU, fdtbl, DC, HTDC, HTAC) {
|
|
63804
|
+
var EOB = HTAC[0];
|
|
63805
|
+
var M16zeroes = HTAC[240];
|
|
63806
|
+
var pos;
|
|
63807
|
+
var I16 = 16;
|
|
63808
|
+
var I63 = 63;
|
|
63809
|
+
var I64 = 64;
|
|
63810
|
+
var DU_DCT = fDCTQuant(CDU, fdtbl);
|
|
63811
|
+
for (var j = 0; j < I64; ++j) DU[ZigZag[j]] = DU_DCT[j];
|
|
63812
|
+
var Diff = DU[0] - DC;
|
|
63813
|
+
DC = DU[0];
|
|
63814
|
+
if (Diff == 0) writeBits(HTDC[0]);
|
|
63815
|
+
else {
|
|
63816
|
+
pos = 32767 + Diff;
|
|
63817
|
+
writeBits(HTDC[category[pos]]);
|
|
63818
|
+
writeBits(bitcode[pos]);
|
|
63819
|
+
}
|
|
63820
|
+
var end0pos = 63;
|
|
63821
|
+
for (; end0pos > 0 && DU[end0pos] == 0; end0pos--);
|
|
63822
|
+
if (end0pos == 0) {
|
|
63823
|
+
writeBits(EOB);
|
|
63824
|
+
return DC;
|
|
63825
|
+
}
|
|
63826
|
+
var i = 1;
|
|
63827
|
+
var lng;
|
|
63828
|
+
while (i <= end0pos) {
|
|
63829
|
+
var startpos = i;
|
|
63830
|
+
for (; DU[i] == 0 && i <= end0pos; ++i);
|
|
63831
|
+
var nrzeroes = i - startpos;
|
|
63832
|
+
if (nrzeroes >= I16) {
|
|
63833
|
+
lng = nrzeroes >> 4;
|
|
63834
|
+
for (var nrmarker = 1; nrmarker <= lng; ++nrmarker) writeBits(M16zeroes);
|
|
63835
|
+
nrzeroes = nrzeroes & 15;
|
|
63836
|
+
}
|
|
63837
|
+
pos = 32767 + DU[i];
|
|
63838
|
+
writeBits(HTAC[(nrzeroes << 4) + category[pos]]);
|
|
63839
|
+
writeBits(bitcode[pos]);
|
|
63840
|
+
i++;
|
|
63841
|
+
}
|
|
63842
|
+
if (end0pos != I63) writeBits(EOB);
|
|
63843
|
+
return DC;
|
|
63844
|
+
}
|
|
63845
|
+
function initCharLookupTable() {
|
|
63846
|
+
var sfcc = String.fromCharCode;
|
|
63847
|
+
for (var i = 0; i < 256; i++) clt[i] = sfcc(i);
|
|
63848
|
+
}
|
|
63849
|
+
this.encode = function(image, quality) {
|
|
63850
|
+
(/* @__PURE__ */ new Date()).getTime();
|
|
63851
|
+
if (quality) setQuality(quality);
|
|
63852
|
+
byteout = new Array();
|
|
63853
|
+
bytenew = 0;
|
|
63854
|
+
bytepos = 7;
|
|
63855
|
+
writeWord(65496);
|
|
63856
|
+
writeAPP0();
|
|
63857
|
+
writeCOM(image.comments);
|
|
63858
|
+
writeAPP1(image.exifBuffer);
|
|
63859
|
+
writeDQT();
|
|
63860
|
+
writeSOF0(image.width, image.height);
|
|
63861
|
+
writeDHT();
|
|
63862
|
+
writeSOS();
|
|
63863
|
+
var DCY = 0;
|
|
63864
|
+
var DCU = 0;
|
|
63865
|
+
var DCV = 0;
|
|
63866
|
+
bytenew = 0;
|
|
63867
|
+
bytepos = 7;
|
|
63868
|
+
this.encode.displayName = "_encode_";
|
|
63869
|
+
var imageData = image.data;
|
|
63870
|
+
var width = image.width;
|
|
63871
|
+
var height = image.height;
|
|
63872
|
+
var quadWidth = width * 4;
|
|
63873
|
+
width * 3;
|
|
63874
|
+
var x, y = 0;
|
|
63875
|
+
var r, g, b;
|
|
63876
|
+
var start, p, col, row, pos;
|
|
63877
|
+
while (y < height) {
|
|
63878
|
+
x = 0;
|
|
63879
|
+
while (x < quadWidth) {
|
|
63880
|
+
start = quadWidth * y + x;
|
|
63881
|
+
p = start;
|
|
63882
|
+
col = -1;
|
|
63883
|
+
row = 0;
|
|
63884
|
+
for (pos = 0; pos < 64; pos++) {
|
|
63885
|
+
row = pos >> 3;
|
|
63886
|
+
col = (pos & 7) * 4;
|
|
63887
|
+
p = start + row * quadWidth + col;
|
|
63888
|
+
if (y + row >= height) p -= quadWidth * (y + 1 + row - height);
|
|
63889
|
+
if (x + col >= quadWidth) p -= x + col - quadWidth + 4;
|
|
63890
|
+
r = imageData[p++];
|
|
63891
|
+
g = imageData[p++];
|
|
63892
|
+
b = imageData[p++];
|
|
63893
|
+
YDU[pos] = (RGB_YUV_TABLE[r] + RGB_YUV_TABLE[g + 256 >> 0] + RGB_YUV_TABLE[b + 512 >> 0] >> 16) - 128;
|
|
63894
|
+
UDU[pos] = (RGB_YUV_TABLE[r + 768 >> 0] + RGB_YUV_TABLE[g + 1024 >> 0] + RGB_YUV_TABLE[b + 1280 >> 0] >> 16) - 128;
|
|
63895
|
+
VDU[pos] = (RGB_YUV_TABLE[r + 1280 >> 0] + RGB_YUV_TABLE[g + 1536 >> 0] + RGB_YUV_TABLE[b + 1792 >> 0] >> 16) - 128;
|
|
63896
|
+
}
|
|
63897
|
+
DCY = processDU(YDU, fdtbl_Y, DCY, YDC_HT, YAC_HT);
|
|
63898
|
+
DCU = processDU(UDU, fdtbl_UV, DCU, UVDC_HT, UVAC_HT);
|
|
63899
|
+
DCV = processDU(VDU, fdtbl_UV, DCV, UVDC_HT, UVAC_HT);
|
|
63900
|
+
x += 32;
|
|
63901
|
+
}
|
|
63902
|
+
y += 8;
|
|
63903
|
+
}
|
|
63904
|
+
if (bytepos >= 0) {
|
|
63905
|
+
var fillbits = [];
|
|
63906
|
+
fillbits[1] = bytepos + 1;
|
|
63907
|
+
fillbits[0] = (1 << bytepos + 1) - 1;
|
|
63908
|
+
writeBits(fillbits);
|
|
63909
|
+
}
|
|
63910
|
+
writeWord(65497);
|
|
63911
|
+
if (typeof module === "undefined") return new Uint8Array(byteout);
|
|
63912
|
+
return Buffer.from(byteout);
|
|
63913
|
+
};
|
|
63914
|
+
function setQuality(quality) {
|
|
63915
|
+
if (quality <= 0) quality = 1;
|
|
63916
|
+
if (quality > 100) quality = 100;
|
|
63917
|
+
if (currentQuality == quality) return;
|
|
63918
|
+
var sf = 0;
|
|
63919
|
+
if (quality < 50) sf = Math.floor(5e3 / quality);
|
|
63920
|
+
else sf = Math.floor(200 - quality * 2);
|
|
63921
|
+
initQuantTables(sf);
|
|
63922
|
+
currentQuality = quality;
|
|
63923
|
+
}
|
|
63924
|
+
function init() {
|
|
63925
|
+
var time_start = (/* @__PURE__ */ new Date()).getTime();
|
|
63926
|
+
if (!quality) quality = 50;
|
|
63927
|
+
initCharLookupTable();
|
|
63928
|
+
initHuffmanTbl();
|
|
63929
|
+
initCategoryNumber();
|
|
63930
|
+
initRGBYUVTable();
|
|
63931
|
+
setQuality(quality);
|
|
63932
|
+
(/* @__PURE__ */ new Date()).getTime() - time_start;
|
|
63933
|
+
}
|
|
63934
|
+
init();
|
|
63935
|
+
}
|
|
63936
|
+
if (typeof module !== "undefined") module.exports = encode;
|
|
63937
|
+
else if (typeof window !== "undefined") {
|
|
63938
|
+
window["jpeg-js"] = window["jpeg-js"] || {};
|
|
63939
|
+
window["jpeg-js"].encode = encode;
|
|
63940
|
+
}
|
|
63941
|
+
function encode(imgData, qu) {
|
|
63942
|
+
if (typeof qu === "undefined") qu = 50;
|
|
63943
|
+
return {
|
|
63944
|
+
data: new JPEGEncoder(qu).encode(imgData, qu),
|
|
63945
|
+
width: imgData.width,
|
|
63946
|
+
height: imgData.height
|
|
63947
|
+
};
|
|
63948
|
+
}
|
|
63949
|
+
}));
|
|
63950
|
+
//#endregion
|
|
63951
|
+
//#region node_modules/.pnpm/jpeg-js@0.4.4/node_modules/jpeg-js/lib/decoder.js
|
|
63952
|
+
var require_decoder = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
63953
|
+
var JpegImage = (function jpegImage() {
|
|
63954
|
+
"use strict";
|
|
63955
|
+
var dctZigZag = new Int32Array([
|
|
63956
|
+
0,
|
|
63957
|
+
1,
|
|
63958
|
+
8,
|
|
63959
|
+
16,
|
|
63960
|
+
9,
|
|
63961
|
+
2,
|
|
63962
|
+
3,
|
|
63963
|
+
10,
|
|
63964
|
+
17,
|
|
63965
|
+
24,
|
|
63966
|
+
32,
|
|
63967
|
+
25,
|
|
63968
|
+
18,
|
|
63969
|
+
11,
|
|
63970
|
+
4,
|
|
63971
|
+
5,
|
|
63972
|
+
12,
|
|
63973
|
+
19,
|
|
63974
|
+
26,
|
|
63975
|
+
33,
|
|
63976
|
+
40,
|
|
63977
|
+
48,
|
|
63978
|
+
41,
|
|
63979
|
+
34,
|
|
63980
|
+
27,
|
|
63981
|
+
20,
|
|
63982
|
+
13,
|
|
63983
|
+
6,
|
|
63984
|
+
7,
|
|
63985
|
+
14,
|
|
63986
|
+
21,
|
|
63987
|
+
28,
|
|
63988
|
+
35,
|
|
63989
|
+
42,
|
|
63990
|
+
49,
|
|
63991
|
+
56,
|
|
63992
|
+
57,
|
|
63993
|
+
50,
|
|
63994
|
+
43,
|
|
63995
|
+
36,
|
|
63996
|
+
29,
|
|
63997
|
+
22,
|
|
63998
|
+
15,
|
|
63999
|
+
23,
|
|
64000
|
+
30,
|
|
64001
|
+
37,
|
|
64002
|
+
44,
|
|
64003
|
+
51,
|
|
64004
|
+
58,
|
|
64005
|
+
59,
|
|
64006
|
+
52,
|
|
64007
|
+
45,
|
|
64008
|
+
38,
|
|
64009
|
+
31,
|
|
64010
|
+
39,
|
|
64011
|
+
46,
|
|
64012
|
+
53,
|
|
64013
|
+
60,
|
|
64014
|
+
61,
|
|
64015
|
+
54,
|
|
64016
|
+
47,
|
|
64017
|
+
55,
|
|
64018
|
+
62,
|
|
64019
|
+
63
|
|
64020
|
+
]);
|
|
64021
|
+
var dctCos1 = 4017;
|
|
64022
|
+
var dctSin1 = 799;
|
|
64023
|
+
var dctCos3 = 3406;
|
|
64024
|
+
var dctSin3 = 2276;
|
|
64025
|
+
var dctCos6 = 1567;
|
|
64026
|
+
var dctSin6 = 3784;
|
|
64027
|
+
var dctSqrt2 = 5793;
|
|
64028
|
+
var dctSqrt1d2 = 2896;
|
|
64029
|
+
function constructor() {}
|
|
64030
|
+
function buildHuffmanTable(codeLengths, values) {
|
|
64031
|
+
var k = 0, code = [], i, j, length = 16;
|
|
64032
|
+
while (length > 0 && !codeLengths[length - 1]) length--;
|
|
64033
|
+
code.push({
|
|
64034
|
+
children: [],
|
|
64035
|
+
index: 0
|
|
64036
|
+
});
|
|
64037
|
+
var p = code[0], q;
|
|
64038
|
+
for (i = 0; i < length; i++) {
|
|
64039
|
+
for (j = 0; j < codeLengths[i]; j++) {
|
|
64040
|
+
p = code.pop();
|
|
64041
|
+
p.children[p.index] = values[k];
|
|
64042
|
+
while (p.index > 0) {
|
|
64043
|
+
if (code.length === 0) throw new Error("Could not recreate Huffman Table");
|
|
64044
|
+
p = code.pop();
|
|
64045
|
+
}
|
|
64046
|
+
p.index++;
|
|
64047
|
+
code.push(p);
|
|
64048
|
+
while (code.length <= i) {
|
|
64049
|
+
code.push(q = {
|
|
64050
|
+
children: [],
|
|
64051
|
+
index: 0
|
|
64052
|
+
});
|
|
64053
|
+
p.children[p.index] = q.children;
|
|
64054
|
+
p = q;
|
|
64055
|
+
}
|
|
64056
|
+
k++;
|
|
64057
|
+
}
|
|
64058
|
+
if (i + 1 < length) {
|
|
64059
|
+
code.push(q = {
|
|
64060
|
+
children: [],
|
|
64061
|
+
index: 0
|
|
64062
|
+
});
|
|
64063
|
+
p.children[p.index] = q.children;
|
|
64064
|
+
p = q;
|
|
64065
|
+
}
|
|
64066
|
+
}
|
|
64067
|
+
return code[0].children;
|
|
64068
|
+
}
|
|
64069
|
+
function decodeScan(data, offset, frame, components, resetInterval, spectralStart, spectralEnd, successivePrev, successive, opts) {
|
|
64070
|
+
frame.precision;
|
|
64071
|
+
frame.samplesPerLine;
|
|
64072
|
+
frame.scanLines;
|
|
64073
|
+
var mcusPerLine = frame.mcusPerLine;
|
|
64074
|
+
var progressive = frame.progressive;
|
|
64075
|
+
frame.maxH;
|
|
64076
|
+
frame.maxV;
|
|
64077
|
+
var startOffset = offset, bitsData = 0, bitsCount = 0;
|
|
64078
|
+
function readBit() {
|
|
64079
|
+
if (bitsCount > 0) {
|
|
64080
|
+
bitsCount--;
|
|
64081
|
+
return bitsData >> bitsCount & 1;
|
|
64082
|
+
}
|
|
64083
|
+
bitsData = data[offset++];
|
|
64084
|
+
if (bitsData == 255) {
|
|
64085
|
+
var nextByte = data[offset++];
|
|
64086
|
+
if (nextByte) throw new Error("unexpected marker: " + (bitsData << 8 | nextByte).toString(16));
|
|
64087
|
+
}
|
|
64088
|
+
bitsCount = 7;
|
|
64089
|
+
return bitsData >>> 7;
|
|
64090
|
+
}
|
|
64091
|
+
function decodeHuffman(tree) {
|
|
64092
|
+
var node = tree, bit;
|
|
64093
|
+
while ((bit = readBit()) !== null) {
|
|
64094
|
+
node = node[bit];
|
|
64095
|
+
if (typeof node === "number") return node;
|
|
64096
|
+
if (typeof node !== "object") throw new Error("invalid huffman sequence");
|
|
64097
|
+
}
|
|
64098
|
+
return null;
|
|
64099
|
+
}
|
|
64100
|
+
function receive(length) {
|
|
64101
|
+
var n = 0;
|
|
64102
|
+
while (length > 0) {
|
|
64103
|
+
var bit = readBit();
|
|
64104
|
+
if (bit === null) return;
|
|
64105
|
+
n = n << 1 | bit;
|
|
64106
|
+
length--;
|
|
64107
|
+
}
|
|
64108
|
+
return n;
|
|
64109
|
+
}
|
|
64110
|
+
function receiveAndExtend(length) {
|
|
64111
|
+
var n = receive(length);
|
|
64112
|
+
if (n >= 1 << length - 1) return n;
|
|
64113
|
+
return n + (-1 << length) + 1;
|
|
64114
|
+
}
|
|
64115
|
+
function decodeBaseline(component, zz) {
|
|
64116
|
+
var t = decodeHuffman(component.huffmanTableDC);
|
|
64117
|
+
var diff = t === 0 ? 0 : receiveAndExtend(t);
|
|
64118
|
+
zz[0] = component.pred += diff;
|
|
64119
|
+
var k = 1;
|
|
64120
|
+
while (k < 64) {
|
|
64121
|
+
var rs = decodeHuffman(component.huffmanTableAC);
|
|
64122
|
+
var s = rs & 15, r = rs >> 4;
|
|
64123
|
+
if (s === 0) {
|
|
64124
|
+
if (r < 15) break;
|
|
64125
|
+
k += 16;
|
|
64126
|
+
continue;
|
|
64127
|
+
}
|
|
64128
|
+
k += r;
|
|
64129
|
+
var z = dctZigZag[k];
|
|
64130
|
+
zz[z] = receiveAndExtend(s);
|
|
64131
|
+
k++;
|
|
64132
|
+
}
|
|
64133
|
+
}
|
|
64134
|
+
function decodeDCFirst(component, zz) {
|
|
64135
|
+
var t = decodeHuffman(component.huffmanTableDC);
|
|
64136
|
+
var diff = t === 0 ? 0 : receiveAndExtend(t) << successive;
|
|
64137
|
+
zz[0] = component.pred += diff;
|
|
64138
|
+
}
|
|
64139
|
+
function decodeDCSuccessive(component, zz) {
|
|
64140
|
+
zz[0] |= readBit() << successive;
|
|
64141
|
+
}
|
|
64142
|
+
var eobrun = 0;
|
|
64143
|
+
function decodeACFirst(component, zz) {
|
|
64144
|
+
if (eobrun > 0) {
|
|
64145
|
+
eobrun--;
|
|
64146
|
+
return;
|
|
64147
|
+
}
|
|
64148
|
+
var k = spectralStart, e = spectralEnd;
|
|
64149
|
+
while (k <= e) {
|
|
64150
|
+
var rs = decodeHuffman(component.huffmanTableAC);
|
|
64151
|
+
var s = rs & 15, r = rs >> 4;
|
|
64152
|
+
if (s === 0) {
|
|
64153
|
+
if (r < 15) {
|
|
64154
|
+
eobrun = receive(r) + (1 << r) - 1;
|
|
64155
|
+
break;
|
|
64156
|
+
}
|
|
64157
|
+
k += 16;
|
|
64158
|
+
continue;
|
|
64159
|
+
}
|
|
64160
|
+
k += r;
|
|
64161
|
+
var z = dctZigZag[k];
|
|
64162
|
+
zz[z] = receiveAndExtend(s) * (1 << successive);
|
|
64163
|
+
k++;
|
|
64164
|
+
}
|
|
64165
|
+
}
|
|
64166
|
+
var successiveACState = 0, successiveACNextValue;
|
|
64167
|
+
function decodeACSuccessive(component, zz) {
|
|
64168
|
+
var k = spectralStart, e = spectralEnd, r = 0;
|
|
64169
|
+
while (k <= e) {
|
|
64170
|
+
var z = dctZigZag[k];
|
|
64171
|
+
var direction = zz[z] < 0 ? -1 : 1;
|
|
64172
|
+
switch (successiveACState) {
|
|
64173
|
+
case 0:
|
|
64174
|
+
var rs = decodeHuffman(component.huffmanTableAC);
|
|
64175
|
+
var s = rs & 15, r = rs >> 4;
|
|
64176
|
+
if (s === 0) if (r < 15) {
|
|
64177
|
+
eobrun = receive(r) + (1 << r);
|
|
64178
|
+
successiveACState = 4;
|
|
64179
|
+
} else {
|
|
64180
|
+
r = 16;
|
|
64181
|
+
successiveACState = 1;
|
|
64182
|
+
}
|
|
64183
|
+
else {
|
|
64184
|
+
if (s !== 1) throw new Error("invalid ACn encoding");
|
|
64185
|
+
successiveACNextValue = receiveAndExtend(s);
|
|
64186
|
+
successiveACState = r ? 2 : 3;
|
|
64187
|
+
}
|
|
64188
|
+
continue;
|
|
64189
|
+
case 1:
|
|
64190
|
+
case 2:
|
|
64191
|
+
if (zz[z]) zz[z] += (readBit() << successive) * direction;
|
|
64192
|
+
else {
|
|
64193
|
+
r--;
|
|
64194
|
+
if (r === 0) successiveACState = successiveACState == 2 ? 3 : 0;
|
|
64195
|
+
}
|
|
64196
|
+
break;
|
|
64197
|
+
case 3:
|
|
64198
|
+
if (zz[z]) zz[z] += (readBit() << successive) * direction;
|
|
64199
|
+
else {
|
|
64200
|
+
zz[z] = successiveACNextValue << successive;
|
|
64201
|
+
successiveACState = 0;
|
|
64202
|
+
}
|
|
64203
|
+
break;
|
|
64204
|
+
case 4:
|
|
64205
|
+
if (zz[z]) zz[z] += (readBit() << successive) * direction;
|
|
64206
|
+
break;
|
|
64207
|
+
}
|
|
64208
|
+
k++;
|
|
64209
|
+
}
|
|
64210
|
+
if (successiveACState === 4) {
|
|
64211
|
+
eobrun--;
|
|
64212
|
+
if (eobrun === 0) successiveACState = 0;
|
|
64213
|
+
}
|
|
64214
|
+
}
|
|
64215
|
+
function decodeMcu(component, decode, mcu, row, col) {
|
|
64216
|
+
var mcuRow = mcu / mcusPerLine | 0;
|
|
64217
|
+
var mcuCol = mcu % mcusPerLine;
|
|
64218
|
+
var blockRow = mcuRow * component.v + row;
|
|
64219
|
+
var blockCol = mcuCol * component.h + col;
|
|
64220
|
+
if (component.blocks[blockRow] === void 0 && opts.tolerantDecoding) return;
|
|
64221
|
+
decode(component, component.blocks[blockRow][blockCol]);
|
|
64222
|
+
}
|
|
64223
|
+
function decodeBlock(component, decode, mcu) {
|
|
64224
|
+
var blockRow = mcu / component.blocksPerLine | 0;
|
|
64225
|
+
var blockCol = mcu % component.blocksPerLine;
|
|
64226
|
+
if (component.blocks[blockRow] === void 0 && opts.tolerantDecoding) return;
|
|
64227
|
+
decode(component, component.blocks[blockRow][blockCol]);
|
|
64228
|
+
}
|
|
64229
|
+
var componentsLength = components.length;
|
|
64230
|
+
var component, i, j, k, n;
|
|
64231
|
+
var decodeFn;
|
|
64232
|
+
if (progressive) if (spectralStart === 0) decodeFn = successivePrev === 0 ? decodeDCFirst : decodeDCSuccessive;
|
|
64233
|
+
else decodeFn = successivePrev === 0 ? decodeACFirst : decodeACSuccessive;
|
|
64234
|
+
else decodeFn = decodeBaseline;
|
|
64235
|
+
var mcu = 0, marker;
|
|
64236
|
+
var mcuExpected;
|
|
64237
|
+
if (componentsLength == 1) mcuExpected = components[0].blocksPerLine * components[0].blocksPerColumn;
|
|
64238
|
+
else mcuExpected = mcusPerLine * frame.mcusPerColumn;
|
|
64239
|
+
if (!resetInterval) resetInterval = mcuExpected;
|
|
64240
|
+
var h, v;
|
|
64241
|
+
while (mcu < mcuExpected) {
|
|
64242
|
+
for (i = 0; i < componentsLength; i++) components[i].pred = 0;
|
|
64243
|
+
eobrun = 0;
|
|
64244
|
+
if (componentsLength == 1) {
|
|
64245
|
+
component = components[0];
|
|
64246
|
+
for (n = 0; n < resetInterval; n++) {
|
|
64247
|
+
decodeBlock(component, decodeFn, mcu);
|
|
64248
|
+
mcu++;
|
|
64249
|
+
}
|
|
64250
|
+
} else for (n = 0; n < resetInterval; n++) {
|
|
64251
|
+
for (i = 0; i < componentsLength; i++) {
|
|
64252
|
+
component = components[i];
|
|
64253
|
+
h = component.h;
|
|
64254
|
+
v = component.v;
|
|
64255
|
+
for (j = 0; j < v; j++) for (k = 0; k < h; k++) decodeMcu(component, decodeFn, mcu, j, k);
|
|
64256
|
+
}
|
|
64257
|
+
mcu++;
|
|
64258
|
+
if (mcu === mcuExpected) break;
|
|
64259
|
+
}
|
|
64260
|
+
if (mcu === mcuExpected) do {
|
|
64261
|
+
if (data[offset] === 255) {
|
|
64262
|
+
if (data[offset + 1] !== 0) break;
|
|
64263
|
+
}
|
|
64264
|
+
offset += 1;
|
|
64265
|
+
} while (offset < data.length - 2);
|
|
64266
|
+
bitsCount = 0;
|
|
64267
|
+
marker = data[offset] << 8 | data[offset + 1];
|
|
64268
|
+
if (marker < 65280) throw new Error("marker was not found");
|
|
64269
|
+
if (marker >= 65488 && marker <= 65495) offset += 2;
|
|
64270
|
+
else break;
|
|
64271
|
+
}
|
|
64272
|
+
return offset - startOffset;
|
|
64273
|
+
}
|
|
64274
|
+
function buildComponentData(frame, component) {
|
|
64275
|
+
var lines = [];
|
|
64276
|
+
var blocksPerLine = component.blocksPerLine;
|
|
64277
|
+
var blocksPerColumn = component.blocksPerColumn;
|
|
64278
|
+
var samplesPerLine = blocksPerLine << 3;
|
|
64279
|
+
var R = new Int32Array(64), r = new Uint8Array(64);
|
|
64280
|
+
function quantizeAndInverse(zz, dataOut, dataIn) {
|
|
64281
|
+
var qt = component.quantizationTable;
|
|
64282
|
+
var v0, v1, v2, v3, v4, v5, v6, v7, t;
|
|
64283
|
+
var p = dataIn;
|
|
64284
|
+
var i;
|
|
64285
|
+
for (i = 0; i < 64; i++) p[i] = zz[i] * qt[i];
|
|
64286
|
+
for (i = 0; i < 8; ++i) {
|
|
64287
|
+
var row = 8 * i;
|
|
64288
|
+
if (p[1 + row] == 0 && p[2 + row] == 0 && p[3 + row] == 0 && p[4 + row] == 0 && p[5 + row] == 0 && p[6 + row] == 0 && p[7 + row] == 0) {
|
|
64289
|
+
t = dctSqrt2 * p[0 + row] + 512 >> 10;
|
|
64290
|
+
p[0 + row] = t;
|
|
64291
|
+
p[1 + row] = t;
|
|
64292
|
+
p[2 + row] = t;
|
|
64293
|
+
p[3 + row] = t;
|
|
64294
|
+
p[4 + row] = t;
|
|
64295
|
+
p[5 + row] = t;
|
|
64296
|
+
p[6 + row] = t;
|
|
64297
|
+
p[7 + row] = t;
|
|
64298
|
+
continue;
|
|
64299
|
+
}
|
|
64300
|
+
v0 = dctSqrt2 * p[0 + row] + 128 >> 8;
|
|
64301
|
+
v1 = dctSqrt2 * p[4 + row] + 128 >> 8;
|
|
64302
|
+
v2 = p[2 + row];
|
|
64303
|
+
v3 = p[6 + row];
|
|
64304
|
+
v4 = dctSqrt1d2 * (p[1 + row] - p[7 + row]) + 128 >> 8;
|
|
64305
|
+
v7 = dctSqrt1d2 * (p[1 + row] + p[7 + row]) + 128 >> 8;
|
|
64306
|
+
v5 = p[3 + row] << 4;
|
|
64307
|
+
v6 = p[5 + row] << 4;
|
|
64308
|
+
t = v0 - v1 + 1 >> 1;
|
|
64309
|
+
v0 = v0 + v1 + 1 >> 1;
|
|
64310
|
+
v1 = t;
|
|
64311
|
+
t = v2 * dctSin6 + v3 * dctCos6 + 128 >> 8;
|
|
64312
|
+
v2 = v2 * dctCos6 - v3 * dctSin6 + 128 >> 8;
|
|
64313
|
+
v3 = t;
|
|
64314
|
+
t = v4 - v6 + 1 >> 1;
|
|
64315
|
+
v4 = v4 + v6 + 1 >> 1;
|
|
64316
|
+
v6 = t;
|
|
64317
|
+
t = v7 + v5 + 1 >> 1;
|
|
64318
|
+
v5 = v7 - v5 + 1 >> 1;
|
|
64319
|
+
v7 = t;
|
|
64320
|
+
t = v0 - v3 + 1 >> 1;
|
|
64321
|
+
v0 = v0 + v3 + 1 >> 1;
|
|
64322
|
+
v3 = t;
|
|
64323
|
+
t = v1 - v2 + 1 >> 1;
|
|
64324
|
+
v1 = v1 + v2 + 1 >> 1;
|
|
64325
|
+
v2 = t;
|
|
64326
|
+
t = v4 * dctSin3 + v7 * dctCos3 + 2048 >> 12;
|
|
64327
|
+
v4 = v4 * dctCos3 - v7 * dctSin3 + 2048 >> 12;
|
|
64328
|
+
v7 = t;
|
|
64329
|
+
t = v5 * dctSin1 + v6 * dctCos1 + 2048 >> 12;
|
|
64330
|
+
v5 = v5 * dctCos1 - v6 * dctSin1 + 2048 >> 12;
|
|
64331
|
+
v6 = t;
|
|
64332
|
+
p[0 + row] = v0 + v7;
|
|
64333
|
+
p[7 + row] = v0 - v7;
|
|
64334
|
+
p[1 + row] = v1 + v6;
|
|
64335
|
+
p[6 + row] = v1 - v6;
|
|
64336
|
+
p[2 + row] = v2 + v5;
|
|
64337
|
+
p[5 + row] = v2 - v5;
|
|
64338
|
+
p[3 + row] = v3 + v4;
|
|
64339
|
+
p[4 + row] = v3 - v4;
|
|
64340
|
+
}
|
|
64341
|
+
for (i = 0; i < 8; ++i) {
|
|
64342
|
+
var col = i;
|
|
64343
|
+
if (p[8 + col] == 0 && p[16 + col] == 0 && p[24 + col] == 0 && p[32 + col] == 0 && p[40 + col] == 0 && p[48 + col] == 0 && p[56 + col] == 0) {
|
|
64344
|
+
t = dctSqrt2 * dataIn[i + 0] + 8192 >> 14;
|
|
64345
|
+
p[0 + col] = t;
|
|
64346
|
+
p[8 + col] = t;
|
|
64347
|
+
p[16 + col] = t;
|
|
64348
|
+
p[24 + col] = t;
|
|
64349
|
+
p[32 + col] = t;
|
|
64350
|
+
p[40 + col] = t;
|
|
64351
|
+
p[48 + col] = t;
|
|
64352
|
+
p[56 + col] = t;
|
|
64353
|
+
continue;
|
|
64354
|
+
}
|
|
64355
|
+
v0 = dctSqrt2 * p[0 + col] + 2048 >> 12;
|
|
64356
|
+
v1 = dctSqrt2 * p[32 + col] + 2048 >> 12;
|
|
64357
|
+
v2 = p[16 + col];
|
|
64358
|
+
v3 = p[48 + col];
|
|
64359
|
+
v4 = dctSqrt1d2 * (p[8 + col] - p[56 + col]) + 2048 >> 12;
|
|
64360
|
+
v7 = dctSqrt1d2 * (p[8 + col] + p[56 + col]) + 2048 >> 12;
|
|
64361
|
+
v5 = p[24 + col];
|
|
64362
|
+
v6 = p[40 + col];
|
|
64363
|
+
t = v0 - v1 + 1 >> 1;
|
|
64364
|
+
v0 = v0 + v1 + 1 >> 1;
|
|
64365
|
+
v1 = t;
|
|
64366
|
+
t = v2 * dctSin6 + v3 * dctCos6 + 2048 >> 12;
|
|
64367
|
+
v2 = v2 * dctCos6 - v3 * dctSin6 + 2048 >> 12;
|
|
64368
|
+
v3 = t;
|
|
64369
|
+
t = v4 - v6 + 1 >> 1;
|
|
64370
|
+
v4 = v4 + v6 + 1 >> 1;
|
|
64371
|
+
v6 = t;
|
|
64372
|
+
t = v7 + v5 + 1 >> 1;
|
|
64373
|
+
v5 = v7 - v5 + 1 >> 1;
|
|
64374
|
+
v7 = t;
|
|
64375
|
+
t = v0 - v3 + 1 >> 1;
|
|
64376
|
+
v0 = v0 + v3 + 1 >> 1;
|
|
64377
|
+
v3 = t;
|
|
64378
|
+
t = v1 - v2 + 1 >> 1;
|
|
64379
|
+
v1 = v1 + v2 + 1 >> 1;
|
|
64380
|
+
v2 = t;
|
|
64381
|
+
t = v4 * dctSin3 + v7 * dctCos3 + 2048 >> 12;
|
|
64382
|
+
v4 = v4 * dctCos3 - v7 * dctSin3 + 2048 >> 12;
|
|
64383
|
+
v7 = t;
|
|
64384
|
+
t = v5 * dctSin1 + v6 * dctCos1 + 2048 >> 12;
|
|
64385
|
+
v5 = v5 * dctCos1 - v6 * dctSin1 + 2048 >> 12;
|
|
64386
|
+
v6 = t;
|
|
64387
|
+
p[0 + col] = v0 + v7;
|
|
64388
|
+
p[56 + col] = v0 - v7;
|
|
64389
|
+
p[8 + col] = v1 + v6;
|
|
64390
|
+
p[48 + col] = v1 - v6;
|
|
64391
|
+
p[16 + col] = v2 + v5;
|
|
64392
|
+
p[40 + col] = v2 - v5;
|
|
64393
|
+
p[24 + col] = v3 + v4;
|
|
64394
|
+
p[32 + col] = v3 - v4;
|
|
64395
|
+
}
|
|
64396
|
+
for (i = 0; i < 64; ++i) {
|
|
64397
|
+
var sample = 128 + (p[i] + 8 >> 4);
|
|
64398
|
+
dataOut[i] = sample < 0 ? 0 : sample > 255 ? 255 : sample;
|
|
64399
|
+
}
|
|
64400
|
+
}
|
|
64401
|
+
requestMemoryAllocation(samplesPerLine * blocksPerColumn * 8);
|
|
64402
|
+
var i, j;
|
|
64403
|
+
for (var blockRow = 0; blockRow < blocksPerColumn; blockRow++) {
|
|
64404
|
+
var scanLine = blockRow << 3;
|
|
64405
|
+
for (i = 0; i < 8; i++) lines.push(new Uint8Array(samplesPerLine));
|
|
64406
|
+
for (var blockCol = 0; blockCol < blocksPerLine; blockCol++) {
|
|
64407
|
+
quantizeAndInverse(component.blocks[blockRow][blockCol], r, R);
|
|
64408
|
+
var offset = 0, sample = blockCol << 3;
|
|
64409
|
+
for (j = 0; j < 8; j++) {
|
|
64410
|
+
var line = lines[scanLine + j];
|
|
64411
|
+
for (i = 0; i < 8; i++) line[sample + i] = r[offset++];
|
|
64412
|
+
}
|
|
64413
|
+
}
|
|
64414
|
+
}
|
|
64415
|
+
return lines;
|
|
64416
|
+
}
|
|
64417
|
+
function clampTo8bit(a) {
|
|
64418
|
+
return a < 0 ? 0 : a > 255 ? 255 : a;
|
|
64419
|
+
}
|
|
64420
|
+
constructor.prototype = {
|
|
64421
|
+
load: function load(path) {
|
|
64422
|
+
var xhr = new XMLHttpRequest();
|
|
64423
|
+
xhr.open("GET", path, true);
|
|
64424
|
+
xhr.responseType = "arraybuffer";
|
|
64425
|
+
xhr.onload = (function() {
|
|
64426
|
+
var data = new Uint8Array(xhr.response || xhr.mozResponseArrayBuffer);
|
|
64427
|
+
this.parse(data);
|
|
64428
|
+
if (this.onload) this.onload();
|
|
64429
|
+
}).bind(this);
|
|
64430
|
+
xhr.send(null);
|
|
64431
|
+
},
|
|
64432
|
+
parse: function parse(data) {
|
|
64433
|
+
var maxResolutionInPixels = this.opts.maxResolutionInMP * 1e3 * 1e3, offset = 0;
|
|
64434
|
+
data.length;
|
|
64435
|
+
function readUint16() {
|
|
64436
|
+
var value = data[offset] << 8 | data[offset + 1];
|
|
64437
|
+
offset += 2;
|
|
64438
|
+
return value;
|
|
64439
|
+
}
|
|
64440
|
+
function readDataBlock() {
|
|
64441
|
+
var length = readUint16();
|
|
64442
|
+
var array = data.subarray(offset, offset + length - 2);
|
|
64443
|
+
offset += array.length;
|
|
64444
|
+
return array;
|
|
64445
|
+
}
|
|
64446
|
+
function prepareComponents(frame) {
|
|
64447
|
+
var maxH = 1, maxV = 1;
|
|
64448
|
+
var component, componentId;
|
|
64449
|
+
for (componentId in frame.components) if (frame.components.hasOwnProperty(componentId)) {
|
|
64450
|
+
component = frame.components[componentId];
|
|
64451
|
+
if (maxH < component.h) maxH = component.h;
|
|
64452
|
+
if (maxV < component.v) maxV = component.v;
|
|
64453
|
+
}
|
|
64454
|
+
var mcusPerLine = Math.ceil(frame.samplesPerLine / 8 / maxH);
|
|
64455
|
+
var mcusPerColumn = Math.ceil(frame.scanLines / 8 / maxV);
|
|
64456
|
+
for (componentId in frame.components) if (frame.components.hasOwnProperty(componentId)) {
|
|
64457
|
+
component = frame.components[componentId];
|
|
64458
|
+
var blocksPerLine = Math.ceil(Math.ceil(frame.samplesPerLine / 8) * component.h / maxH);
|
|
64459
|
+
var blocksPerColumn = Math.ceil(Math.ceil(frame.scanLines / 8) * component.v / maxV);
|
|
64460
|
+
var blocksPerLineForMcu = mcusPerLine * component.h;
|
|
64461
|
+
var blocksPerColumnForMcu = mcusPerColumn * component.v;
|
|
64462
|
+
var blocksToAllocate = blocksPerColumnForMcu * blocksPerLineForMcu;
|
|
64463
|
+
var blocks = [];
|
|
64464
|
+
requestMemoryAllocation(blocksToAllocate * 256);
|
|
64465
|
+
for (var i = 0; i < blocksPerColumnForMcu; i++) {
|
|
64466
|
+
var row = [];
|
|
64467
|
+
for (var j = 0; j < blocksPerLineForMcu; j++) row.push(new Int32Array(64));
|
|
64468
|
+
blocks.push(row);
|
|
64469
|
+
}
|
|
64470
|
+
component.blocksPerLine = blocksPerLine;
|
|
64471
|
+
component.blocksPerColumn = blocksPerColumn;
|
|
64472
|
+
component.blocks = blocks;
|
|
64473
|
+
}
|
|
64474
|
+
frame.maxH = maxH;
|
|
64475
|
+
frame.maxV = maxV;
|
|
64476
|
+
frame.mcusPerLine = mcusPerLine;
|
|
64477
|
+
frame.mcusPerColumn = mcusPerColumn;
|
|
64478
|
+
}
|
|
64479
|
+
var jfif = null;
|
|
64480
|
+
var adobe = null;
|
|
64481
|
+
var frame, resetInterval;
|
|
64482
|
+
var quantizationTables = [], frames = [];
|
|
64483
|
+
var huffmanTablesAC = [], huffmanTablesDC = [];
|
|
64484
|
+
var fileMarker = readUint16();
|
|
64485
|
+
var malformedDataOffset = -1;
|
|
64486
|
+
this.comments = [];
|
|
64487
|
+
if (fileMarker != 65496) throw new Error("SOI not found");
|
|
64488
|
+
fileMarker = readUint16();
|
|
64489
|
+
while (fileMarker != 65497) {
|
|
64490
|
+
var i, j;
|
|
64491
|
+
switch (fileMarker) {
|
|
64492
|
+
case 65280: break;
|
|
64493
|
+
case 65504:
|
|
64494
|
+
case 65505:
|
|
64495
|
+
case 65506:
|
|
64496
|
+
case 65507:
|
|
64497
|
+
case 65508:
|
|
64498
|
+
case 65509:
|
|
64499
|
+
case 65510:
|
|
64500
|
+
case 65511:
|
|
64501
|
+
case 65512:
|
|
64502
|
+
case 65513:
|
|
64503
|
+
case 65514:
|
|
64504
|
+
case 65515:
|
|
64505
|
+
case 65516:
|
|
64506
|
+
case 65517:
|
|
64507
|
+
case 65518:
|
|
64508
|
+
case 65519:
|
|
64509
|
+
case 65534:
|
|
64510
|
+
var appData = readDataBlock();
|
|
64511
|
+
if (fileMarker === 65534) {
|
|
64512
|
+
var comment = String.fromCharCode.apply(null, appData);
|
|
64513
|
+
this.comments.push(comment);
|
|
64514
|
+
}
|
|
64515
|
+
if (fileMarker === 65504) {
|
|
64516
|
+
if (appData[0] === 74 && appData[1] === 70 && appData[2] === 73 && appData[3] === 70 && appData[4] === 0) jfif = {
|
|
64517
|
+
version: {
|
|
64518
|
+
major: appData[5],
|
|
64519
|
+
minor: appData[6]
|
|
64520
|
+
},
|
|
64521
|
+
densityUnits: appData[7],
|
|
64522
|
+
xDensity: appData[8] << 8 | appData[9],
|
|
64523
|
+
yDensity: appData[10] << 8 | appData[11],
|
|
64524
|
+
thumbWidth: appData[12],
|
|
64525
|
+
thumbHeight: appData[13],
|
|
64526
|
+
thumbData: appData.subarray(14, 14 + 3 * appData[12] * appData[13])
|
|
64527
|
+
};
|
|
64528
|
+
}
|
|
64529
|
+
if (fileMarker === 65505) {
|
|
64530
|
+
if (appData[0] === 69 && appData[1] === 120 && appData[2] === 105 && appData[3] === 102 && appData[4] === 0) this.exifBuffer = appData.subarray(5, appData.length);
|
|
64531
|
+
}
|
|
64532
|
+
if (fileMarker === 65518) {
|
|
64533
|
+
if (appData[0] === 65 && appData[1] === 100 && appData[2] === 111 && appData[3] === 98 && appData[4] === 101 && appData[5] === 0) adobe = {
|
|
64534
|
+
version: appData[6],
|
|
64535
|
+
flags0: appData[7] << 8 | appData[8],
|
|
64536
|
+
flags1: appData[9] << 8 | appData[10],
|
|
64537
|
+
transformCode: appData[11]
|
|
64538
|
+
};
|
|
64539
|
+
}
|
|
64540
|
+
break;
|
|
64541
|
+
case 65499:
|
|
64542
|
+
var quantizationTablesEnd = readUint16() + offset - 2;
|
|
64543
|
+
while (offset < quantizationTablesEnd) {
|
|
64544
|
+
var quantizationTableSpec = data[offset++];
|
|
64545
|
+
requestMemoryAllocation(256);
|
|
64546
|
+
var tableData = new Int32Array(64);
|
|
64547
|
+
if (quantizationTableSpec >> 4 === 0) for (j = 0; j < 64; j++) {
|
|
64548
|
+
var z = dctZigZag[j];
|
|
64549
|
+
tableData[z] = data[offset++];
|
|
64550
|
+
}
|
|
64551
|
+
else if (quantizationTableSpec >> 4 === 1) for (j = 0; j < 64; j++) {
|
|
64552
|
+
var z = dctZigZag[j];
|
|
64553
|
+
tableData[z] = readUint16();
|
|
64554
|
+
}
|
|
64555
|
+
else throw new Error("DQT: invalid table spec");
|
|
64556
|
+
quantizationTables[quantizationTableSpec & 15] = tableData;
|
|
64557
|
+
}
|
|
64558
|
+
break;
|
|
64559
|
+
case 65472:
|
|
64560
|
+
case 65473:
|
|
64561
|
+
case 65474:
|
|
64562
|
+
readUint16();
|
|
64563
|
+
frame = {};
|
|
64564
|
+
frame.extended = fileMarker === 65473;
|
|
64565
|
+
frame.progressive = fileMarker === 65474;
|
|
64566
|
+
frame.precision = data[offset++];
|
|
64567
|
+
frame.scanLines = readUint16();
|
|
64568
|
+
frame.samplesPerLine = readUint16();
|
|
64569
|
+
frame.components = {};
|
|
64570
|
+
frame.componentsOrder = [];
|
|
64571
|
+
var pixelsInFrame = frame.scanLines * frame.samplesPerLine;
|
|
64572
|
+
if (pixelsInFrame > maxResolutionInPixels) {
|
|
64573
|
+
var exceededAmount = Math.ceil((pixelsInFrame - maxResolutionInPixels) / 1e6);
|
|
64574
|
+
throw new Error(`maxResolutionInMP limit exceeded by ${exceededAmount}MP`);
|
|
64575
|
+
}
|
|
64576
|
+
var componentsCount = data[offset++], componentId;
|
|
64577
|
+
for (i = 0; i < componentsCount; i++) {
|
|
64578
|
+
componentId = data[offset];
|
|
64579
|
+
var h = data[offset + 1] >> 4;
|
|
64580
|
+
var v = data[offset + 1] & 15;
|
|
64581
|
+
var qId = data[offset + 2];
|
|
64582
|
+
if (h <= 0 || v <= 0) throw new Error("Invalid sampling factor, expected values above 0");
|
|
64583
|
+
frame.componentsOrder.push(componentId);
|
|
64584
|
+
frame.components[componentId] = {
|
|
64585
|
+
h,
|
|
64586
|
+
v,
|
|
64587
|
+
quantizationIdx: qId
|
|
64588
|
+
};
|
|
64589
|
+
offset += 3;
|
|
64590
|
+
}
|
|
64591
|
+
prepareComponents(frame);
|
|
64592
|
+
frames.push(frame);
|
|
64593
|
+
break;
|
|
64594
|
+
case 65476:
|
|
64595
|
+
var huffmanLength = readUint16();
|
|
64596
|
+
for (i = 2; i < huffmanLength;) {
|
|
64597
|
+
var huffmanTableSpec = data[offset++];
|
|
64598
|
+
var codeLengths = new Uint8Array(16);
|
|
64599
|
+
var codeLengthSum = 0;
|
|
64600
|
+
for (j = 0; j < 16; j++, offset++) codeLengthSum += codeLengths[j] = data[offset];
|
|
64601
|
+
requestMemoryAllocation(16 + codeLengthSum);
|
|
64602
|
+
var huffmanValues = new Uint8Array(codeLengthSum);
|
|
64603
|
+
for (j = 0; j < codeLengthSum; j++, offset++) huffmanValues[j] = data[offset];
|
|
64604
|
+
i += 17 + codeLengthSum;
|
|
64605
|
+
(huffmanTableSpec >> 4 === 0 ? huffmanTablesDC : huffmanTablesAC)[huffmanTableSpec & 15] = buildHuffmanTable(codeLengths, huffmanValues);
|
|
64606
|
+
}
|
|
64607
|
+
break;
|
|
64608
|
+
case 65501:
|
|
64609
|
+
readUint16();
|
|
64610
|
+
resetInterval = readUint16();
|
|
64611
|
+
break;
|
|
64612
|
+
case 65500:
|
|
64613
|
+
readUint16();
|
|
64614
|
+
readUint16();
|
|
64615
|
+
break;
|
|
64616
|
+
case 65498:
|
|
64617
|
+
readUint16();
|
|
64618
|
+
var selectorsCount = data[offset++];
|
|
64619
|
+
var components = [], component;
|
|
64620
|
+
for (i = 0; i < selectorsCount; i++) {
|
|
64621
|
+
component = frame.components[data[offset++]];
|
|
64622
|
+
var tableSpec = data[offset++];
|
|
64623
|
+
component.huffmanTableDC = huffmanTablesDC[tableSpec >> 4];
|
|
64624
|
+
component.huffmanTableAC = huffmanTablesAC[tableSpec & 15];
|
|
64625
|
+
components.push(component);
|
|
64626
|
+
}
|
|
64627
|
+
var spectralStart = data[offset++];
|
|
64628
|
+
var spectralEnd = data[offset++];
|
|
64629
|
+
var successiveApproximation = data[offset++];
|
|
64630
|
+
var processed = decodeScan(data, offset, frame, components, resetInterval, spectralStart, spectralEnd, successiveApproximation >> 4, successiveApproximation & 15, this.opts);
|
|
64631
|
+
offset += processed;
|
|
64632
|
+
break;
|
|
64633
|
+
case 65535:
|
|
64634
|
+
if (data[offset] !== 255) offset--;
|
|
64635
|
+
break;
|
|
64636
|
+
default:
|
|
64637
|
+
if (data[offset - 3] == 255 && data[offset - 2] >= 192 && data[offset - 2] <= 254) {
|
|
64638
|
+
offset -= 3;
|
|
64639
|
+
break;
|
|
64640
|
+
} else if (fileMarker === 224 || fileMarker == 225) {
|
|
64641
|
+
if (malformedDataOffset !== -1) throw new Error(`first unknown JPEG marker at offset ${malformedDataOffset.toString(16)}, second unknown JPEG marker ${fileMarker.toString(16)} at offset ${(offset - 1).toString(16)}`);
|
|
64642
|
+
malformedDataOffset = offset - 1;
|
|
64643
|
+
const nextOffset = readUint16();
|
|
64644
|
+
if (data[offset + nextOffset - 2] === 255) {
|
|
64645
|
+
offset += nextOffset - 2;
|
|
64646
|
+
break;
|
|
64647
|
+
}
|
|
64648
|
+
}
|
|
64649
|
+
throw new Error("unknown JPEG marker " + fileMarker.toString(16));
|
|
64650
|
+
}
|
|
64651
|
+
fileMarker = readUint16();
|
|
64652
|
+
}
|
|
64653
|
+
if (frames.length != 1) throw new Error("only single frame JPEGs supported");
|
|
64654
|
+
for (var i = 0; i < frames.length; i++) {
|
|
64655
|
+
var cp = frames[i].components;
|
|
64656
|
+
for (var j in cp) {
|
|
64657
|
+
cp[j].quantizationTable = quantizationTables[cp[j].quantizationIdx];
|
|
64658
|
+
delete cp[j].quantizationIdx;
|
|
64659
|
+
}
|
|
64660
|
+
}
|
|
64661
|
+
this.width = frame.samplesPerLine;
|
|
64662
|
+
this.height = frame.scanLines;
|
|
64663
|
+
this.jfif = jfif;
|
|
64664
|
+
this.adobe = adobe;
|
|
64665
|
+
this.components = [];
|
|
64666
|
+
for (var i = 0; i < frame.componentsOrder.length; i++) {
|
|
64667
|
+
var component = frame.components[frame.componentsOrder[i]];
|
|
64668
|
+
this.components.push({
|
|
64669
|
+
lines: buildComponentData(frame, component),
|
|
64670
|
+
scaleX: component.h / frame.maxH,
|
|
64671
|
+
scaleY: component.v / frame.maxV
|
|
64672
|
+
});
|
|
64673
|
+
}
|
|
64674
|
+
},
|
|
64675
|
+
getData: function getData(width, height) {
|
|
64676
|
+
var scaleX = this.width / width, scaleY = this.height / height;
|
|
64677
|
+
var component1, component2, component3, component4;
|
|
64678
|
+
var component1Line, component2Line, component3Line, component4Line;
|
|
64679
|
+
var x, y;
|
|
64680
|
+
var offset = 0;
|
|
64681
|
+
var Y, Cb, Cr, K, C, M, Ye, R, G, B;
|
|
64682
|
+
var colorTransform;
|
|
64683
|
+
var dataLength = width * height * this.components.length;
|
|
64684
|
+
requestMemoryAllocation(dataLength);
|
|
64685
|
+
var data = new Uint8Array(dataLength);
|
|
64686
|
+
switch (this.components.length) {
|
|
64687
|
+
case 1:
|
|
64688
|
+
component1 = this.components[0];
|
|
64689
|
+
for (y = 0; y < height; y++) {
|
|
64690
|
+
component1Line = component1.lines[0 | y * component1.scaleY * scaleY];
|
|
64691
|
+
for (x = 0; x < width; x++) {
|
|
64692
|
+
Y = component1Line[0 | x * component1.scaleX * scaleX];
|
|
64693
|
+
data[offset++] = Y;
|
|
64694
|
+
}
|
|
64695
|
+
}
|
|
64696
|
+
break;
|
|
64697
|
+
case 2:
|
|
64698
|
+
component1 = this.components[0];
|
|
64699
|
+
component2 = this.components[1];
|
|
64700
|
+
for (y = 0; y < height; y++) {
|
|
64701
|
+
component1Line = component1.lines[0 | y * component1.scaleY * scaleY];
|
|
64702
|
+
component2Line = component2.lines[0 | y * component2.scaleY * scaleY];
|
|
64703
|
+
for (x = 0; x < width; x++) {
|
|
64704
|
+
Y = component1Line[0 | x * component1.scaleX * scaleX];
|
|
64705
|
+
data[offset++] = Y;
|
|
64706
|
+
Y = component2Line[0 | x * component2.scaleX * scaleX];
|
|
64707
|
+
data[offset++] = Y;
|
|
64708
|
+
}
|
|
64709
|
+
}
|
|
64710
|
+
break;
|
|
64711
|
+
case 3:
|
|
64712
|
+
colorTransform = true;
|
|
64713
|
+
if (this.adobe && this.adobe.transformCode) colorTransform = true;
|
|
64714
|
+
else if (typeof this.opts.colorTransform !== "undefined") colorTransform = !!this.opts.colorTransform;
|
|
64715
|
+
component1 = this.components[0];
|
|
64716
|
+
component2 = this.components[1];
|
|
64717
|
+
component3 = this.components[2];
|
|
64718
|
+
for (y = 0; y < height; y++) {
|
|
64719
|
+
component1Line = component1.lines[0 | y * component1.scaleY * scaleY];
|
|
64720
|
+
component2Line = component2.lines[0 | y * component2.scaleY * scaleY];
|
|
64721
|
+
component3Line = component3.lines[0 | y * component3.scaleY * scaleY];
|
|
64722
|
+
for (x = 0; x < width; x++) {
|
|
64723
|
+
if (!colorTransform) {
|
|
64724
|
+
R = component1Line[0 | x * component1.scaleX * scaleX];
|
|
64725
|
+
G = component2Line[0 | x * component2.scaleX * scaleX];
|
|
64726
|
+
B = component3Line[0 | x * component3.scaleX * scaleX];
|
|
64727
|
+
} else {
|
|
64728
|
+
Y = component1Line[0 | x * component1.scaleX * scaleX];
|
|
64729
|
+
Cb = component2Line[0 | x * component2.scaleX * scaleX];
|
|
64730
|
+
Cr = component3Line[0 | x * component3.scaleX * scaleX];
|
|
64731
|
+
R = clampTo8bit(Y + 1.402 * (Cr - 128));
|
|
64732
|
+
G = clampTo8bit(Y - .3441363 * (Cb - 128) - .71413636 * (Cr - 128));
|
|
64733
|
+
B = clampTo8bit(Y + 1.772 * (Cb - 128));
|
|
64734
|
+
}
|
|
64735
|
+
data[offset++] = R;
|
|
64736
|
+
data[offset++] = G;
|
|
64737
|
+
data[offset++] = B;
|
|
64738
|
+
}
|
|
64739
|
+
}
|
|
64740
|
+
break;
|
|
64741
|
+
case 4:
|
|
64742
|
+
if (!this.adobe) throw new Error("Unsupported color mode (4 components)");
|
|
64743
|
+
colorTransform = false;
|
|
64744
|
+
if (this.adobe && this.adobe.transformCode) colorTransform = true;
|
|
64745
|
+
else if (typeof this.opts.colorTransform !== "undefined") colorTransform = !!this.opts.colorTransform;
|
|
64746
|
+
component1 = this.components[0];
|
|
64747
|
+
component2 = this.components[1];
|
|
64748
|
+
component3 = this.components[2];
|
|
64749
|
+
component4 = this.components[3];
|
|
64750
|
+
for (y = 0; y < height; y++) {
|
|
64751
|
+
component1Line = component1.lines[0 | y * component1.scaleY * scaleY];
|
|
64752
|
+
component2Line = component2.lines[0 | y * component2.scaleY * scaleY];
|
|
64753
|
+
component3Line = component3.lines[0 | y * component3.scaleY * scaleY];
|
|
64754
|
+
component4Line = component4.lines[0 | y * component4.scaleY * scaleY];
|
|
64755
|
+
for (x = 0; x < width; x++) {
|
|
64756
|
+
if (!colorTransform) {
|
|
64757
|
+
C = component1Line[0 | x * component1.scaleX * scaleX];
|
|
64758
|
+
M = component2Line[0 | x * component2.scaleX * scaleX];
|
|
64759
|
+
Ye = component3Line[0 | x * component3.scaleX * scaleX];
|
|
64760
|
+
K = component4Line[0 | x * component4.scaleX * scaleX];
|
|
64761
|
+
} else {
|
|
64762
|
+
Y = component1Line[0 | x * component1.scaleX * scaleX];
|
|
64763
|
+
Cb = component2Line[0 | x * component2.scaleX * scaleX];
|
|
64764
|
+
Cr = component3Line[0 | x * component3.scaleX * scaleX];
|
|
64765
|
+
K = component4Line[0 | x * component4.scaleX * scaleX];
|
|
64766
|
+
C = 255 - clampTo8bit(Y + 1.402 * (Cr - 128));
|
|
64767
|
+
M = 255 - clampTo8bit(Y - .3441363 * (Cb - 128) - .71413636 * (Cr - 128));
|
|
64768
|
+
Ye = 255 - clampTo8bit(Y + 1.772 * (Cb - 128));
|
|
64769
|
+
}
|
|
64770
|
+
data[offset++] = 255 - C;
|
|
64771
|
+
data[offset++] = 255 - M;
|
|
64772
|
+
data[offset++] = 255 - Ye;
|
|
64773
|
+
data[offset++] = 255 - K;
|
|
64774
|
+
}
|
|
64775
|
+
}
|
|
64776
|
+
break;
|
|
64777
|
+
default: throw new Error("Unsupported color mode");
|
|
64778
|
+
}
|
|
64779
|
+
return data;
|
|
64780
|
+
},
|
|
64781
|
+
copyToImageData: function copyToImageData(imageData, formatAsRGBA) {
|
|
64782
|
+
var width = imageData.width, height = imageData.height;
|
|
64783
|
+
var imageDataArray = imageData.data;
|
|
64784
|
+
var data = this.getData(width, height);
|
|
64785
|
+
var i = 0, j = 0, x, y;
|
|
64786
|
+
var Y, K, C, M, R, G, B;
|
|
64787
|
+
switch (this.components.length) {
|
|
64788
|
+
case 1:
|
|
64789
|
+
for (y = 0; y < height; y++) for (x = 0; x < width; x++) {
|
|
64790
|
+
Y = data[i++];
|
|
64791
|
+
imageDataArray[j++] = Y;
|
|
64792
|
+
imageDataArray[j++] = Y;
|
|
64793
|
+
imageDataArray[j++] = Y;
|
|
64794
|
+
if (formatAsRGBA) imageDataArray[j++] = 255;
|
|
64795
|
+
}
|
|
64796
|
+
break;
|
|
64797
|
+
case 3:
|
|
64798
|
+
for (y = 0; y < height; y++) for (x = 0; x < width; x++) {
|
|
64799
|
+
R = data[i++];
|
|
64800
|
+
G = data[i++];
|
|
64801
|
+
B = data[i++];
|
|
64802
|
+
imageDataArray[j++] = R;
|
|
64803
|
+
imageDataArray[j++] = G;
|
|
64804
|
+
imageDataArray[j++] = B;
|
|
64805
|
+
if (formatAsRGBA) imageDataArray[j++] = 255;
|
|
64806
|
+
}
|
|
64807
|
+
break;
|
|
64808
|
+
case 4:
|
|
64809
|
+
for (y = 0; y < height; y++) for (x = 0; x < width; x++) {
|
|
64810
|
+
C = data[i++];
|
|
64811
|
+
M = data[i++];
|
|
64812
|
+
Y = data[i++];
|
|
64813
|
+
K = data[i++];
|
|
64814
|
+
R = 255 - clampTo8bit(C * (1 - K / 255) + K);
|
|
64815
|
+
G = 255 - clampTo8bit(M * (1 - K / 255) + K);
|
|
64816
|
+
B = 255 - clampTo8bit(Y * (1 - K / 255) + K);
|
|
64817
|
+
imageDataArray[j++] = R;
|
|
64818
|
+
imageDataArray[j++] = G;
|
|
64819
|
+
imageDataArray[j++] = B;
|
|
64820
|
+
if (formatAsRGBA) imageDataArray[j++] = 255;
|
|
64821
|
+
}
|
|
64822
|
+
break;
|
|
64823
|
+
default: throw new Error("Unsupported color mode");
|
|
64824
|
+
}
|
|
64825
|
+
}
|
|
64826
|
+
};
|
|
64827
|
+
var totalBytesAllocated = 0;
|
|
64828
|
+
var maxMemoryUsageBytes = 0;
|
|
64829
|
+
function requestMemoryAllocation(increaseAmount = 0) {
|
|
64830
|
+
var totalMemoryImpactBytes = totalBytesAllocated + increaseAmount;
|
|
64831
|
+
if (totalMemoryImpactBytes > maxMemoryUsageBytes) {
|
|
64832
|
+
var exceededAmount = Math.ceil((totalMemoryImpactBytes - maxMemoryUsageBytes) / 1024 / 1024);
|
|
64833
|
+
throw new Error(`maxMemoryUsageInMB limit exceeded by at least ${exceededAmount}MB`);
|
|
64834
|
+
}
|
|
64835
|
+
totalBytesAllocated = totalMemoryImpactBytes;
|
|
64836
|
+
}
|
|
64837
|
+
constructor.resetMaxMemoryUsage = function(maxMemoryUsageBytes_) {
|
|
64838
|
+
totalBytesAllocated = 0;
|
|
64839
|
+
maxMemoryUsageBytes = maxMemoryUsageBytes_;
|
|
64840
|
+
};
|
|
64841
|
+
constructor.getBytesAllocated = function() {
|
|
64842
|
+
return totalBytesAllocated;
|
|
64843
|
+
};
|
|
64844
|
+
constructor.requestMemoryAllocation = requestMemoryAllocation;
|
|
64845
|
+
return constructor;
|
|
64846
|
+
})();
|
|
64847
|
+
if (typeof module !== "undefined") module.exports = decode;
|
|
64848
|
+
else if (typeof window !== "undefined") {
|
|
64849
|
+
window["jpeg-js"] = window["jpeg-js"] || {};
|
|
64850
|
+
window["jpeg-js"].decode = decode;
|
|
64851
|
+
}
|
|
64852
|
+
function decode(jpegData, userOpts = {}) {
|
|
64853
|
+
var opts = {
|
|
64854
|
+
colorTransform: void 0,
|
|
64855
|
+
useTArray: false,
|
|
64856
|
+
formatAsRGBA: true,
|
|
64857
|
+
tolerantDecoding: true,
|
|
64858
|
+
maxResolutionInMP: 100,
|
|
64859
|
+
maxMemoryUsageInMB: 512,
|
|
64860
|
+
...userOpts
|
|
64861
|
+
};
|
|
64862
|
+
var arr = new Uint8Array(jpegData);
|
|
64863
|
+
var decoder = new JpegImage();
|
|
64864
|
+
decoder.opts = opts;
|
|
64865
|
+
JpegImage.resetMaxMemoryUsage(opts.maxMemoryUsageInMB * 1024 * 1024);
|
|
64866
|
+
decoder.parse(arr);
|
|
64867
|
+
var channels = opts.formatAsRGBA ? 4 : 3;
|
|
64868
|
+
var bytesNeeded = decoder.width * decoder.height * channels;
|
|
64869
|
+
try {
|
|
64870
|
+
JpegImage.requestMemoryAllocation(bytesNeeded);
|
|
64871
|
+
var image = {
|
|
64872
|
+
width: decoder.width,
|
|
64873
|
+
height: decoder.height,
|
|
64874
|
+
exifBuffer: decoder.exifBuffer,
|
|
64875
|
+
data: opts.useTArray ? new Uint8Array(bytesNeeded) : Buffer.alloc(bytesNeeded)
|
|
64876
|
+
};
|
|
64877
|
+
if (decoder.comments.length > 0) image["comments"] = decoder.comments;
|
|
64878
|
+
} catch (err) {
|
|
64879
|
+
if (err instanceof RangeError) throw new Error("Could not allocate enough memory for the image. Required: " + bytesNeeded);
|
|
64880
|
+
if (err instanceof ReferenceError) {
|
|
64881
|
+
if (err.message === "Buffer is not defined") throw new Error("Buffer is not globally defined in this environment. Consider setting useTArray to true");
|
|
64882
|
+
}
|
|
64883
|
+
throw err;
|
|
64884
|
+
}
|
|
64885
|
+
decoder.copyToImageData(image, opts.formatAsRGBA);
|
|
64886
|
+
return image;
|
|
64887
|
+
}
|
|
64888
|
+
}));
|
|
64889
|
+
//#endregion
|
|
64890
|
+
//#region node_modules/.pnpm/jpeg-js@0.4.4/node_modules/jpeg-js/index.js
|
|
64891
|
+
var require_jpeg_js = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
64892
|
+
module.exports = {
|
|
64893
|
+
encode: require_encoder(),
|
|
64894
|
+
decode: require_decoder()
|
|
64895
|
+
};
|
|
64896
|
+
}));
|
|
64897
|
+
//#endregion
|
|
64898
|
+
//#region node_modules/.pnpm/pngjs@7.0.0/node_modules/pngjs/lib/chunkstream.js
|
|
64899
|
+
var require_chunkstream = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
64900
|
+
var util$5 = require("util");
|
|
64901
|
+
var Stream$3 = require("stream");
|
|
64902
|
+
var ChunkStream = module.exports = function() {
|
|
64903
|
+
Stream$3.call(this);
|
|
64904
|
+
this._buffers = [];
|
|
64905
|
+
this._buffered = 0;
|
|
64906
|
+
this._reads = [];
|
|
64907
|
+
this._paused = false;
|
|
64908
|
+
this._encoding = "utf8";
|
|
64909
|
+
this.writable = true;
|
|
64910
|
+
};
|
|
64911
|
+
util$5.inherits(ChunkStream, Stream$3);
|
|
64912
|
+
ChunkStream.prototype.read = function(length, callback) {
|
|
64913
|
+
this._reads.push({
|
|
64914
|
+
length: Math.abs(length),
|
|
64915
|
+
allowLess: length < 0,
|
|
64916
|
+
func: callback
|
|
64917
|
+
});
|
|
64918
|
+
process.nextTick(function() {
|
|
64919
|
+
this._process();
|
|
64920
|
+
if (this._paused && this._reads && this._reads.length > 0) {
|
|
64921
|
+
this._paused = false;
|
|
64922
|
+
this.emit("drain");
|
|
64923
|
+
}
|
|
64924
|
+
}.bind(this));
|
|
64925
|
+
};
|
|
64926
|
+
ChunkStream.prototype.write = function(data, encoding) {
|
|
64927
|
+
if (!this.writable) {
|
|
64928
|
+
this.emit("error", /* @__PURE__ */ new Error("Stream not writable"));
|
|
64929
|
+
return false;
|
|
64930
|
+
}
|
|
64931
|
+
let dataBuffer;
|
|
64932
|
+
if (Buffer.isBuffer(data)) dataBuffer = data;
|
|
64933
|
+
else dataBuffer = Buffer.from(data, encoding || this._encoding);
|
|
64934
|
+
this._buffers.push(dataBuffer);
|
|
64935
|
+
this._buffered += dataBuffer.length;
|
|
64936
|
+
this._process();
|
|
64937
|
+
if (this._reads && this._reads.length === 0) this._paused = true;
|
|
64938
|
+
return this.writable && !this._paused;
|
|
64939
|
+
};
|
|
64940
|
+
ChunkStream.prototype.end = function(data, encoding) {
|
|
64941
|
+
if (data) this.write(data, encoding);
|
|
64942
|
+
this.writable = false;
|
|
64943
|
+
if (!this._buffers) return;
|
|
64944
|
+
if (this._buffers.length === 0) this._end();
|
|
64945
|
+
else {
|
|
64946
|
+
this._buffers.push(null);
|
|
64947
|
+
this._process();
|
|
64948
|
+
}
|
|
64949
|
+
};
|
|
64950
|
+
ChunkStream.prototype.destroySoon = ChunkStream.prototype.end;
|
|
64951
|
+
ChunkStream.prototype._end = function() {
|
|
64952
|
+
if (this._reads.length > 0) this.emit("error", /* @__PURE__ */ new Error("Unexpected end of input"));
|
|
64953
|
+
this.destroy();
|
|
64954
|
+
};
|
|
64955
|
+
ChunkStream.prototype.destroy = function() {
|
|
64956
|
+
if (!this._buffers) return;
|
|
64957
|
+
this.writable = false;
|
|
64958
|
+
this._reads = null;
|
|
64959
|
+
this._buffers = null;
|
|
64960
|
+
this.emit("close");
|
|
64961
|
+
};
|
|
64962
|
+
ChunkStream.prototype._processReadAllowingLess = function(read) {
|
|
64963
|
+
this._reads.shift();
|
|
64964
|
+
let smallerBuf = this._buffers[0];
|
|
64965
|
+
if (smallerBuf.length > read.length) {
|
|
64966
|
+
this._buffered -= read.length;
|
|
64967
|
+
this._buffers[0] = smallerBuf.slice(read.length);
|
|
64968
|
+
read.func.call(this, smallerBuf.slice(0, read.length));
|
|
64969
|
+
} else {
|
|
64970
|
+
this._buffered -= smallerBuf.length;
|
|
64971
|
+
this._buffers.shift();
|
|
64972
|
+
read.func.call(this, smallerBuf);
|
|
64973
|
+
}
|
|
64974
|
+
};
|
|
64975
|
+
ChunkStream.prototype._processRead = function(read) {
|
|
64976
|
+
this._reads.shift();
|
|
64977
|
+
let pos = 0;
|
|
64978
|
+
let count = 0;
|
|
64979
|
+
let data = Buffer.alloc(read.length);
|
|
64980
|
+
while (pos < read.length) {
|
|
64981
|
+
let buf = this._buffers[count++];
|
|
64982
|
+
let len = Math.min(buf.length, read.length - pos);
|
|
64983
|
+
buf.copy(data, pos, 0, len);
|
|
64984
|
+
pos += len;
|
|
64985
|
+
if (len !== buf.length) this._buffers[--count] = buf.slice(len);
|
|
64986
|
+
}
|
|
64987
|
+
if (count > 0) this._buffers.splice(0, count);
|
|
64988
|
+
this._buffered -= read.length;
|
|
64989
|
+
read.func.call(this, data);
|
|
64990
|
+
};
|
|
64991
|
+
ChunkStream.prototype._process = function() {
|
|
64992
|
+
try {
|
|
64993
|
+
while (this._buffered > 0 && this._reads && this._reads.length > 0) {
|
|
64994
|
+
let read = this._reads[0];
|
|
64995
|
+
if (read.allowLess) this._processReadAllowingLess(read);
|
|
64996
|
+
else if (this._buffered >= read.length) this._processRead(read);
|
|
64997
|
+
else break;
|
|
64998
|
+
}
|
|
64999
|
+
if (this._buffers && !this.writable) this._end();
|
|
65000
|
+
} catch (ex) {
|
|
65001
|
+
this.emit("error", ex);
|
|
65002
|
+
}
|
|
65003
|
+
};
|
|
65004
|
+
}));
|
|
65005
|
+
//#endregion
|
|
65006
|
+
//#region node_modules/.pnpm/pngjs@7.0.0/node_modules/pngjs/lib/interlace.js
|
|
65007
|
+
var require_interlace = /* @__PURE__ */ __commonJSMin(((exports) => {
|
|
65008
|
+
var imagePasses = [
|
|
65009
|
+
{
|
|
65010
|
+
x: [0],
|
|
65011
|
+
y: [0]
|
|
65012
|
+
},
|
|
65013
|
+
{
|
|
65014
|
+
x: [4],
|
|
65015
|
+
y: [0]
|
|
65016
|
+
},
|
|
65017
|
+
{
|
|
65018
|
+
x: [0, 4],
|
|
65019
|
+
y: [4]
|
|
65020
|
+
},
|
|
65021
|
+
{
|
|
65022
|
+
x: [2, 6],
|
|
65023
|
+
y: [0, 4]
|
|
65024
|
+
},
|
|
65025
|
+
{
|
|
65026
|
+
x: [
|
|
65027
|
+
0,
|
|
65028
|
+
2,
|
|
65029
|
+
4,
|
|
65030
|
+
6
|
|
65031
|
+
],
|
|
65032
|
+
y: [2, 6]
|
|
65033
|
+
},
|
|
65034
|
+
{
|
|
65035
|
+
x: [
|
|
65036
|
+
1,
|
|
65037
|
+
3,
|
|
65038
|
+
5,
|
|
65039
|
+
7
|
|
65040
|
+
],
|
|
65041
|
+
y: [
|
|
65042
|
+
0,
|
|
65043
|
+
2,
|
|
65044
|
+
4,
|
|
65045
|
+
6
|
|
65046
|
+
]
|
|
65047
|
+
},
|
|
65048
|
+
{
|
|
65049
|
+
x: [
|
|
65050
|
+
0,
|
|
65051
|
+
1,
|
|
65052
|
+
2,
|
|
65053
|
+
3,
|
|
65054
|
+
4,
|
|
65055
|
+
5,
|
|
65056
|
+
6,
|
|
65057
|
+
7
|
|
65058
|
+
],
|
|
65059
|
+
y: [
|
|
65060
|
+
1,
|
|
65061
|
+
3,
|
|
65062
|
+
5,
|
|
65063
|
+
7
|
|
65064
|
+
]
|
|
65065
|
+
}
|
|
65066
|
+
];
|
|
65067
|
+
exports.getImagePasses = function(width, height) {
|
|
65068
|
+
let images = [];
|
|
65069
|
+
let xLeftOver = width % 8;
|
|
65070
|
+
let yLeftOver = height % 8;
|
|
65071
|
+
let xRepeats = (width - xLeftOver) / 8;
|
|
65072
|
+
let yRepeats = (height - yLeftOver) / 8;
|
|
65073
|
+
for (let i = 0; i < imagePasses.length; i++) {
|
|
65074
|
+
let pass = imagePasses[i];
|
|
65075
|
+
let passWidth = xRepeats * pass.x.length;
|
|
65076
|
+
let passHeight = yRepeats * pass.y.length;
|
|
65077
|
+
for (let j = 0; j < pass.x.length; j++) if (pass.x[j] < xLeftOver) passWidth++;
|
|
65078
|
+
else break;
|
|
65079
|
+
for (let j = 0; j < pass.y.length; j++) if (pass.y[j] < yLeftOver) passHeight++;
|
|
65080
|
+
else break;
|
|
65081
|
+
if (passWidth > 0 && passHeight > 0) images.push({
|
|
65082
|
+
width: passWidth,
|
|
65083
|
+
height: passHeight,
|
|
65084
|
+
index: i
|
|
65085
|
+
});
|
|
65086
|
+
}
|
|
65087
|
+
return images;
|
|
65088
|
+
};
|
|
65089
|
+
exports.getInterlaceIterator = function(width) {
|
|
65090
|
+
return function(x, y, pass) {
|
|
65091
|
+
let outerXLeftOver = x % imagePasses[pass].x.length;
|
|
65092
|
+
let outerX = (x - outerXLeftOver) / imagePasses[pass].x.length * 8 + imagePasses[pass].x[outerXLeftOver];
|
|
65093
|
+
let outerYLeftOver = y % imagePasses[pass].y.length;
|
|
65094
|
+
let outerY = (y - outerYLeftOver) / imagePasses[pass].y.length * 8 + imagePasses[pass].y[outerYLeftOver];
|
|
65095
|
+
return outerX * 4 + outerY * width * 4;
|
|
65096
|
+
};
|
|
65097
|
+
};
|
|
65098
|
+
}));
|
|
65099
|
+
//#endregion
|
|
65100
|
+
//#region node_modules/.pnpm/pngjs@7.0.0/node_modules/pngjs/lib/paeth-predictor.js
|
|
65101
|
+
var require_paeth_predictor = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
65102
|
+
module.exports = function paethPredictor(left, above, upLeft) {
|
|
65103
|
+
let paeth = left + above - upLeft;
|
|
65104
|
+
let pLeft = Math.abs(paeth - left);
|
|
65105
|
+
let pAbove = Math.abs(paeth - above);
|
|
65106
|
+
let pUpLeft = Math.abs(paeth - upLeft);
|
|
65107
|
+
if (pLeft <= pAbove && pLeft <= pUpLeft) return left;
|
|
65108
|
+
if (pAbove <= pUpLeft) return above;
|
|
65109
|
+
return upLeft;
|
|
65110
|
+
};
|
|
65111
|
+
}));
|
|
65112
|
+
//#endregion
|
|
65113
|
+
//#region node_modules/.pnpm/pngjs@7.0.0/node_modules/pngjs/lib/filter-parse.js
|
|
65114
|
+
var require_filter_parse = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
65115
|
+
var interlaceUtils = require_interlace();
|
|
65116
|
+
var paethPredictor = require_paeth_predictor();
|
|
65117
|
+
function getByteWidth(width, bpp, depth) {
|
|
65118
|
+
let byteWidth = width * bpp;
|
|
65119
|
+
if (depth !== 8) byteWidth = Math.ceil(byteWidth / (8 / depth));
|
|
65120
|
+
return byteWidth;
|
|
65121
|
+
}
|
|
65122
|
+
var Filter = module.exports = function(bitmapInfo, dependencies) {
|
|
65123
|
+
let width = bitmapInfo.width;
|
|
65124
|
+
let height = bitmapInfo.height;
|
|
65125
|
+
let interlace = bitmapInfo.interlace;
|
|
65126
|
+
let bpp = bitmapInfo.bpp;
|
|
65127
|
+
let depth = bitmapInfo.depth;
|
|
65128
|
+
this.read = dependencies.read;
|
|
65129
|
+
this.write = dependencies.write;
|
|
65130
|
+
this.complete = dependencies.complete;
|
|
65131
|
+
this._imageIndex = 0;
|
|
65132
|
+
this._images = [];
|
|
65133
|
+
if (interlace) {
|
|
65134
|
+
let passes = interlaceUtils.getImagePasses(width, height);
|
|
65135
|
+
for (let i = 0; i < passes.length; i++) this._images.push({
|
|
65136
|
+
byteWidth: getByteWidth(passes[i].width, bpp, depth),
|
|
65137
|
+
height: passes[i].height,
|
|
65138
|
+
lineIndex: 0
|
|
65139
|
+
});
|
|
65140
|
+
} else this._images.push({
|
|
65141
|
+
byteWidth: getByteWidth(width, bpp, depth),
|
|
65142
|
+
height,
|
|
65143
|
+
lineIndex: 0
|
|
65144
|
+
});
|
|
65145
|
+
if (depth === 8) this._xComparison = bpp;
|
|
65146
|
+
else if (depth === 16) this._xComparison = bpp * 2;
|
|
65147
|
+
else this._xComparison = 1;
|
|
65148
|
+
};
|
|
65149
|
+
Filter.prototype.start = function() {
|
|
65150
|
+
this.read(this._images[this._imageIndex].byteWidth + 1, this._reverseFilterLine.bind(this));
|
|
65151
|
+
};
|
|
65152
|
+
Filter.prototype._unFilterType1 = function(rawData, unfilteredLine, byteWidth) {
|
|
65153
|
+
let xComparison = this._xComparison;
|
|
65154
|
+
let xBiggerThan = xComparison - 1;
|
|
65155
|
+
for (let x = 0; x < byteWidth; x++) unfilteredLine[x] = rawData[1 + x] + (x > xBiggerThan ? unfilteredLine[x - xComparison] : 0);
|
|
65156
|
+
};
|
|
65157
|
+
Filter.prototype._unFilterType2 = function(rawData, unfilteredLine, byteWidth) {
|
|
65158
|
+
let lastLine = this._lastLine;
|
|
65159
|
+
for (let x = 0; x < byteWidth; x++) unfilteredLine[x] = rawData[1 + x] + (lastLine ? lastLine[x] : 0);
|
|
65160
|
+
};
|
|
65161
|
+
Filter.prototype._unFilterType3 = function(rawData, unfilteredLine, byteWidth) {
|
|
65162
|
+
let xComparison = this._xComparison;
|
|
65163
|
+
let xBiggerThan = xComparison - 1;
|
|
65164
|
+
let lastLine = this._lastLine;
|
|
65165
|
+
for (let x = 0; x < byteWidth; x++) {
|
|
65166
|
+
let rawByte = rawData[1 + x];
|
|
65167
|
+
let f3Up = lastLine ? lastLine[x] : 0;
|
|
65168
|
+
let f3Left = x > xBiggerThan ? unfilteredLine[x - xComparison] : 0;
|
|
65169
|
+
unfilteredLine[x] = rawByte + Math.floor((f3Left + f3Up) / 2);
|
|
65170
|
+
}
|
|
65171
|
+
};
|
|
65172
|
+
Filter.prototype._unFilterType4 = function(rawData, unfilteredLine, byteWidth) {
|
|
65173
|
+
let xComparison = this._xComparison;
|
|
65174
|
+
let xBiggerThan = xComparison - 1;
|
|
65175
|
+
let lastLine = this._lastLine;
|
|
65176
|
+
for (let x = 0; x < byteWidth; x++) {
|
|
65177
|
+
let rawByte = rawData[1 + x];
|
|
65178
|
+
let f4Up = lastLine ? lastLine[x] : 0;
|
|
65179
|
+
unfilteredLine[x] = rawByte + paethPredictor(x > xBiggerThan ? unfilteredLine[x - xComparison] : 0, f4Up, x > xBiggerThan && lastLine ? lastLine[x - xComparison] : 0);
|
|
65180
|
+
}
|
|
65181
|
+
};
|
|
65182
|
+
Filter.prototype._reverseFilterLine = function(rawData) {
|
|
65183
|
+
let filter = rawData[0];
|
|
65184
|
+
let unfilteredLine;
|
|
65185
|
+
let currentImage = this._images[this._imageIndex];
|
|
65186
|
+
let byteWidth = currentImage.byteWidth;
|
|
65187
|
+
if (filter === 0) unfilteredLine = rawData.slice(1, byteWidth + 1);
|
|
65188
|
+
else {
|
|
65189
|
+
unfilteredLine = Buffer.alloc(byteWidth);
|
|
65190
|
+
switch (filter) {
|
|
65191
|
+
case 1:
|
|
65192
|
+
this._unFilterType1(rawData, unfilteredLine, byteWidth);
|
|
65193
|
+
break;
|
|
65194
|
+
case 2:
|
|
65195
|
+
this._unFilterType2(rawData, unfilteredLine, byteWidth);
|
|
65196
|
+
break;
|
|
65197
|
+
case 3:
|
|
65198
|
+
this._unFilterType3(rawData, unfilteredLine, byteWidth);
|
|
65199
|
+
break;
|
|
65200
|
+
case 4:
|
|
65201
|
+
this._unFilterType4(rawData, unfilteredLine, byteWidth);
|
|
65202
|
+
break;
|
|
65203
|
+
default: throw new Error("Unrecognised filter type - " + filter);
|
|
65204
|
+
}
|
|
65205
|
+
}
|
|
65206
|
+
this.write(unfilteredLine);
|
|
65207
|
+
currentImage.lineIndex++;
|
|
65208
|
+
if (currentImage.lineIndex >= currentImage.height) {
|
|
65209
|
+
this._lastLine = null;
|
|
65210
|
+
this._imageIndex++;
|
|
65211
|
+
currentImage = this._images[this._imageIndex];
|
|
65212
|
+
} else this._lastLine = unfilteredLine;
|
|
65213
|
+
if (currentImage) this.read(currentImage.byteWidth + 1, this._reverseFilterLine.bind(this));
|
|
65214
|
+
else {
|
|
65215
|
+
this._lastLine = null;
|
|
65216
|
+
this.complete();
|
|
65217
|
+
}
|
|
65218
|
+
};
|
|
65219
|
+
}));
|
|
65220
|
+
//#endregion
|
|
65221
|
+
//#region node_modules/.pnpm/pngjs@7.0.0/node_modules/pngjs/lib/filter-parse-async.js
|
|
65222
|
+
var require_filter_parse_async = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
65223
|
+
var util$4 = require("util");
|
|
65224
|
+
var ChunkStream = require_chunkstream();
|
|
65225
|
+
var Filter = require_filter_parse();
|
|
65226
|
+
var FilterAsync = module.exports = function(bitmapInfo) {
|
|
65227
|
+
ChunkStream.call(this);
|
|
65228
|
+
let buffers = [];
|
|
65229
|
+
let that = this;
|
|
65230
|
+
this._filter = new Filter(bitmapInfo, {
|
|
65231
|
+
read: this.read.bind(this),
|
|
65232
|
+
write: function(buffer) {
|
|
65233
|
+
buffers.push(buffer);
|
|
65234
|
+
},
|
|
65235
|
+
complete: function() {
|
|
65236
|
+
that.emit("complete", Buffer.concat(buffers));
|
|
65237
|
+
}
|
|
65238
|
+
});
|
|
65239
|
+
this._filter.start();
|
|
65240
|
+
};
|
|
65241
|
+
util$4.inherits(FilterAsync, ChunkStream);
|
|
65242
|
+
}));
|
|
65243
|
+
//#endregion
|
|
65244
|
+
//#region node_modules/.pnpm/pngjs@7.0.0/node_modules/pngjs/lib/constants.js
|
|
65245
|
+
var require_constants = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
65246
|
+
module.exports = {
|
|
65247
|
+
PNG_SIGNATURE: [
|
|
65248
|
+
137,
|
|
65249
|
+
80,
|
|
65250
|
+
78,
|
|
65251
|
+
71,
|
|
65252
|
+
13,
|
|
65253
|
+
10,
|
|
65254
|
+
26,
|
|
65255
|
+
10
|
|
65256
|
+
],
|
|
65257
|
+
TYPE_IHDR: 1229472850,
|
|
65258
|
+
TYPE_IEND: 1229278788,
|
|
65259
|
+
TYPE_IDAT: 1229209940,
|
|
65260
|
+
TYPE_PLTE: 1347179589,
|
|
65261
|
+
TYPE_tRNS: 1951551059,
|
|
65262
|
+
TYPE_gAMA: 1732332865,
|
|
65263
|
+
COLORTYPE_GRAYSCALE: 0,
|
|
65264
|
+
COLORTYPE_PALETTE: 1,
|
|
65265
|
+
COLORTYPE_COLOR: 2,
|
|
65266
|
+
COLORTYPE_ALPHA: 4,
|
|
65267
|
+
COLORTYPE_PALETTE_COLOR: 3,
|
|
65268
|
+
COLORTYPE_COLOR_ALPHA: 6,
|
|
65269
|
+
COLORTYPE_TO_BPP_MAP: {
|
|
65270
|
+
0: 1,
|
|
65271
|
+
2: 3,
|
|
65272
|
+
3: 1,
|
|
65273
|
+
4: 2,
|
|
65274
|
+
6: 4
|
|
65275
|
+
},
|
|
65276
|
+
GAMMA_DIVISION: 1e5
|
|
65277
|
+
};
|
|
65278
|
+
}));
|
|
65279
|
+
//#endregion
|
|
65280
|
+
//#region node_modules/.pnpm/pngjs@7.0.0/node_modules/pngjs/lib/crc.js
|
|
65281
|
+
var require_crc = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
65282
|
+
var crcTable = [];
|
|
65283
|
+
(function() {
|
|
65284
|
+
for (let i = 0; i < 256; i++) {
|
|
65285
|
+
let currentCrc = i;
|
|
65286
|
+
for (let j = 0; j < 8; j++) if (currentCrc & 1) currentCrc = 3988292384 ^ currentCrc >>> 1;
|
|
65287
|
+
else currentCrc = currentCrc >>> 1;
|
|
65288
|
+
crcTable[i] = currentCrc;
|
|
65289
|
+
}
|
|
65290
|
+
})();
|
|
65291
|
+
var CrcCalculator = module.exports = function() {
|
|
65292
|
+
this._crc = -1;
|
|
65293
|
+
};
|
|
65294
|
+
CrcCalculator.prototype.write = function(data) {
|
|
65295
|
+
for (let i = 0; i < data.length; i++) this._crc = crcTable[(this._crc ^ data[i]) & 255] ^ this._crc >>> 8;
|
|
65296
|
+
return true;
|
|
65297
|
+
};
|
|
65298
|
+
CrcCalculator.prototype.crc32 = function() {
|
|
65299
|
+
return this._crc ^ -1;
|
|
65300
|
+
};
|
|
65301
|
+
CrcCalculator.crc32 = function(buf) {
|
|
65302
|
+
let crc = -1;
|
|
65303
|
+
for (let i = 0; i < buf.length; i++) crc = crcTable[(crc ^ buf[i]) & 255] ^ crc >>> 8;
|
|
65304
|
+
return crc ^ -1;
|
|
65305
|
+
};
|
|
65306
|
+
}));
|
|
65307
|
+
//#endregion
|
|
65308
|
+
//#region node_modules/.pnpm/pngjs@7.0.0/node_modules/pngjs/lib/parser.js
|
|
65309
|
+
var require_parser = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
65310
|
+
var constants = require_constants();
|
|
65311
|
+
var CrcCalculator = require_crc();
|
|
65312
|
+
var Parser = module.exports = function(options, dependencies) {
|
|
65313
|
+
this._options = options;
|
|
65314
|
+
options.checkCRC = options.checkCRC !== false;
|
|
65315
|
+
this._hasIHDR = false;
|
|
65316
|
+
this._hasIEND = false;
|
|
65317
|
+
this._emittedHeadersFinished = false;
|
|
65318
|
+
this._palette = [];
|
|
65319
|
+
this._colorType = 0;
|
|
65320
|
+
this._chunks = {};
|
|
65321
|
+
this._chunks[constants.TYPE_IHDR] = this._handleIHDR.bind(this);
|
|
65322
|
+
this._chunks[constants.TYPE_IEND] = this._handleIEND.bind(this);
|
|
65323
|
+
this._chunks[constants.TYPE_IDAT] = this._handleIDAT.bind(this);
|
|
65324
|
+
this._chunks[constants.TYPE_PLTE] = this._handlePLTE.bind(this);
|
|
65325
|
+
this._chunks[constants.TYPE_tRNS] = this._handleTRNS.bind(this);
|
|
65326
|
+
this._chunks[constants.TYPE_gAMA] = this._handleGAMA.bind(this);
|
|
65327
|
+
this.read = dependencies.read;
|
|
65328
|
+
this.error = dependencies.error;
|
|
65329
|
+
this.metadata = dependencies.metadata;
|
|
65330
|
+
this.gamma = dependencies.gamma;
|
|
65331
|
+
this.transColor = dependencies.transColor;
|
|
65332
|
+
this.palette = dependencies.palette;
|
|
65333
|
+
this.parsed = dependencies.parsed;
|
|
65334
|
+
this.inflateData = dependencies.inflateData;
|
|
65335
|
+
this.finished = dependencies.finished;
|
|
65336
|
+
this.simpleTransparency = dependencies.simpleTransparency;
|
|
65337
|
+
this.headersFinished = dependencies.headersFinished || function() {};
|
|
65338
|
+
};
|
|
65339
|
+
Parser.prototype.start = function() {
|
|
65340
|
+
this.read(constants.PNG_SIGNATURE.length, this._parseSignature.bind(this));
|
|
65341
|
+
};
|
|
65342
|
+
Parser.prototype._parseSignature = function(data) {
|
|
65343
|
+
let signature = constants.PNG_SIGNATURE;
|
|
65344
|
+
for (let i = 0; i < signature.length; i++) if (data[i] !== signature[i]) {
|
|
65345
|
+
this.error(/* @__PURE__ */ new Error("Invalid file signature"));
|
|
65346
|
+
return;
|
|
65347
|
+
}
|
|
65348
|
+
this.read(8, this._parseChunkBegin.bind(this));
|
|
65349
|
+
};
|
|
65350
|
+
Parser.prototype._parseChunkBegin = function(data) {
|
|
65351
|
+
let length = data.readUInt32BE(0);
|
|
65352
|
+
let type = data.readUInt32BE(4);
|
|
65353
|
+
let name = "";
|
|
65354
|
+
for (let i = 4; i < 8; i++) name += String.fromCharCode(data[i]);
|
|
65355
|
+
let ancillary = Boolean(data[4] & 32);
|
|
65356
|
+
if (!this._hasIHDR && type !== constants.TYPE_IHDR) {
|
|
65357
|
+
this.error(/* @__PURE__ */ new Error("Expected IHDR on beggining"));
|
|
65358
|
+
return;
|
|
65359
|
+
}
|
|
65360
|
+
this._crc = new CrcCalculator();
|
|
65361
|
+
this._crc.write(Buffer.from(name));
|
|
65362
|
+
if (this._chunks[type]) return this._chunks[type](length);
|
|
65363
|
+
if (!ancillary) {
|
|
65364
|
+
this.error(/* @__PURE__ */ new Error("Unsupported critical chunk type " + name));
|
|
65365
|
+
return;
|
|
65366
|
+
}
|
|
65367
|
+
this.read(length + 4, this._skipChunk.bind(this));
|
|
65368
|
+
};
|
|
65369
|
+
Parser.prototype._skipChunk = function() {
|
|
65370
|
+
this.read(8, this._parseChunkBegin.bind(this));
|
|
65371
|
+
};
|
|
65372
|
+
Parser.prototype._handleChunkEnd = function() {
|
|
65373
|
+
this.read(4, this._parseChunkEnd.bind(this));
|
|
65374
|
+
};
|
|
65375
|
+
Parser.prototype._parseChunkEnd = function(data) {
|
|
65376
|
+
let fileCrc = data.readInt32BE(0);
|
|
65377
|
+
let calcCrc = this._crc.crc32();
|
|
65378
|
+
if (this._options.checkCRC && calcCrc !== fileCrc) {
|
|
65379
|
+
this.error(/* @__PURE__ */ new Error("Crc error - " + fileCrc + " - " + calcCrc));
|
|
65380
|
+
return;
|
|
65381
|
+
}
|
|
65382
|
+
if (!this._hasIEND) this.read(8, this._parseChunkBegin.bind(this));
|
|
65383
|
+
};
|
|
65384
|
+
Parser.prototype._handleIHDR = function(length) {
|
|
65385
|
+
this.read(length, this._parseIHDR.bind(this));
|
|
65386
|
+
};
|
|
65387
|
+
Parser.prototype._parseIHDR = function(data) {
|
|
65388
|
+
this._crc.write(data);
|
|
65389
|
+
let width = data.readUInt32BE(0);
|
|
65390
|
+
let height = data.readUInt32BE(4);
|
|
65391
|
+
let depth = data[8];
|
|
65392
|
+
let colorType = data[9];
|
|
65393
|
+
let compr = data[10];
|
|
65394
|
+
let filter = data[11];
|
|
65395
|
+
let interlace = data[12];
|
|
65396
|
+
if (depth !== 8 && depth !== 4 && depth !== 2 && depth !== 1 && depth !== 16) {
|
|
65397
|
+
this.error(/* @__PURE__ */ new Error("Unsupported bit depth " + depth));
|
|
65398
|
+
return;
|
|
65399
|
+
}
|
|
65400
|
+
if (!(colorType in constants.COLORTYPE_TO_BPP_MAP)) {
|
|
65401
|
+
this.error(/* @__PURE__ */ new Error("Unsupported color type"));
|
|
65402
|
+
return;
|
|
65403
|
+
}
|
|
65404
|
+
if (compr !== 0) {
|
|
65405
|
+
this.error(/* @__PURE__ */ new Error("Unsupported compression method"));
|
|
65406
|
+
return;
|
|
65407
|
+
}
|
|
65408
|
+
if (filter !== 0) {
|
|
65409
|
+
this.error(/* @__PURE__ */ new Error("Unsupported filter method"));
|
|
65410
|
+
return;
|
|
65411
|
+
}
|
|
65412
|
+
if (interlace !== 0 && interlace !== 1) {
|
|
65413
|
+
this.error(/* @__PURE__ */ new Error("Unsupported interlace method"));
|
|
65414
|
+
return;
|
|
65415
|
+
}
|
|
65416
|
+
this._colorType = colorType;
|
|
65417
|
+
let bpp = constants.COLORTYPE_TO_BPP_MAP[this._colorType];
|
|
65418
|
+
this._hasIHDR = true;
|
|
65419
|
+
this.metadata({
|
|
65420
|
+
width,
|
|
65421
|
+
height,
|
|
65422
|
+
depth,
|
|
65423
|
+
interlace: Boolean(interlace),
|
|
65424
|
+
palette: Boolean(colorType & constants.COLORTYPE_PALETTE),
|
|
65425
|
+
color: Boolean(colorType & constants.COLORTYPE_COLOR),
|
|
65426
|
+
alpha: Boolean(colorType & constants.COLORTYPE_ALPHA),
|
|
65427
|
+
bpp,
|
|
65428
|
+
colorType
|
|
65429
|
+
});
|
|
65430
|
+
this._handleChunkEnd();
|
|
65431
|
+
};
|
|
65432
|
+
Parser.prototype._handlePLTE = function(length) {
|
|
65433
|
+
this.read(length, this._parsePLTE.bind(this));
|
|
65434
|
+
};
|
|
65435
|
+
Parser.prototype._parsePLTE = function(data) {
|
|
65436
|
+
this._crc.write(data);
|
|
65437
|
+
let entries = Math.floor(data.length / 3);
|
|
65438
|
+
for (let i = 0; i < entries; i++) this._palette.push([
|
|
65439
|
+
data[i * 3],
|
|
65440
|
+
data[i * 3 + 1],
|
|
65441
|
+
data[i * 3 + 2],
|
|
65442
|
+
255
|
|
65443
|
+
]);
|
|
65444
|
+
this.palette(this._palette);
|
|
65445
|
+
this._handleChunkEnd();
|
|
65446
|
+
};
|
|
65447
|
+
Parser.prototype._handleTRNS = function(length) {
|
|
65448
|
+
this.simpleTransparency();
|
|
65449
|
+
this.read(length, this._parseTRNS.bind(this));
|
|
65450
|
+
};
|
|
65451
|
+
Parser.prototype._parseTRNS = function(data) {
|
|
65452
|
+
this._crc.write(data);
|
|
65453
|
+
if (this._colorType === constants.COLORTYPE_PALETTE_COLOR) {
|
|
65454
|
+
if (this._palette.length === 0) {
|
|
65455
|
+
this.error(/* @__PURE__ */ new Error("Transparency chunk must be after palette"));
|
|
65456
|
+
return;
|
|
65457
|
+
}
|
|
65458
|
+
if (data.length > this._palette.length) {
|
|
65459
|
+
this.error(/* @__PURE__ */ new Error("More transparent colors than palette size"));
|
|
65460
|
+
return;
|
|
65461
|
+
}
|
|
65462
|
+
for (let i = 0; i < data.length; i++) this._palette[i][3] = data[i];
|
|
65463
|
+
this.palette(this._palette);
|
|
65464
|
+
}
|
|
65465
|
+
if (this._colorType === constants.COLORTYPE_GRAYSCALE) this.transColor([data.readUInt16BE(0)]);
|
|
65466
|
+
if (this._colorType === constants.COLORTYPE_COLOR) this.transColor([
|
|
65467
|
+
data.readUInt16BE(0),
|
|
65468
|
+
data.readUInt16BE(2),
|
|
65469
|
+
data.readUInt16BE(4)
|
|
65470
|
+
]);
|
|
65471
|
+
this._handleChunkEnd();
|
|
65472
|
+
};
|
|
65473
|
+
Parser.prototype._handleGAMA = function(length) {
|
|
65474
|
+
this.read(length, this._parseGAMA.bind(this));
|
|
65475
|
+
};
|
|
65476
|
+
Parser.prototype._parseGAMA = function(data) {
|
|
65477
|
+
this._crc.write(data);
|
|
65478
|
+
this.gamma(data.readUInt32BE(0) / constants.GAMMA_DIVISION);
|
|
65479
|
+
this._handleChunkEnd();
|
|
65480
|
+
};
|
|
65481
|
+
Parser.prototype._handleIDAT = function(length) {
|
|
65482
|
+
if (!this._emittedHeadersFinished) {
|
|
65483
|
+
this._emittedHeadersFinished = true;
|
|
65484
|
+
this.headersFinished();
|
|
65485
|
+
}
|
|
65486
|
+
this.read(-length, this._parseIDAT.bind(this, length));
|
|
65487
|
+
};
|
|
65488
|
+
Parser.prototype._parseIDAT = function(length, data) {
|
|
65489
|
+
this._crc.write(data);
|
|
65490
|
+
if (this._colorType === constants.COLORTYPE_PALETTE_COLOR && this._palette.length === 0) throw new Error("Expected palette not found");
|
|
65491
|
+
this.inflateData(data);
|
|
65492
|
+
let leftOverLength = length - data.length;
|
|
65493
|
+
if (leftOverLength > 0) this._handleIDAT(leftOverLength);
|
|
65494
|
+
else this._handleChunkEnd();
|
|
65495
|
+
};
|
|
65496
|
+
Parser.prototype._handleIEND = function(length) {
|
|
65497
|
+
this.read(length, this._parseIEND.bind(this));
|
|
65498
|
+
};
|
|
65499
|
+
Parser.prototype._parseIEND = function(data) {
|
|
65500
|
+
this._crc.write(data);
|
|
65501
|
+
this._hasIEND = true;
|
|
65502
|
+
this._handleChunkEnd();
|
|
65503
|
+
if (this.finished) this.finished();
|
|
65504
|
+
};
|
|
65505
|
+
}));
|
|
65506
|
+
//#endregion
|
|
65507
|
+
//#region node_modules/.pnpm/pngjs@7.0.0/node_modules/pngjs/lib/bitmapper.js
|
|
65508
|
+
var require_bitmapper = /* @__PURE__ */ __commonJSMin(((exports) => {
|
|
65509
|
+
var interlaceUtils = require_interlace();
|
|
65510
|
+
var pixelBppMapper = [
|
|
65511
|
+
function() {},
|
|
65512
|
+
function(pxData, data, pxPos, rawPos) {
|
|
65513
|
+
if (rawPos === data.length) throw new Error("Ran out of data");
|
|
65514
|
+
let pixel = data[rawPos];
|
|
65515
|
+
pxData[pxPos] = pixel;
|
|
65516
|
+
pxData[pxPos + 1] = pixel;
|
|
65517
|
+
pxData[pxPos + 2] = pixel;
|
|
65518
|
+
pxData[pxPos + 3] = 255;
|
|
65519
|
+
},
|
|
65520
|
+
function(pxData, data, pxPos, rawPos) {
|
|
65521
|
+
if (rawPos + 1 >= data.length) throw new Error("Ran out of data");
|
|
65522
|
+
let pixel = data[rawPos];
|
|
65523
|
+
pxData[pxPos] = pixel;
|
|
65524
|
+
pxData[pxPos + 1] = pixel;
|
|
65525
|
+
pxData[pxPos + 2] = pixel;
|
|
65526
|
+
pxData[pxPos + 3] = data[rawPos + 1];
|
|
65527
|
+
},
|
|
65528
|
+
function(pxData, data, pxPos, rawPos) {
|
|
65529
|
+
if (rawPos + 2 >= data.length) throw new Error("Ran out of data");
|
|
65530
|
+
pxData[pxPos] = data[rawPos];
|
|
65531
|
+
pxData[pxPos + 1] = data[rawPos + 1];
|
|
65532
|
+
pxData[pxPos + 2] = data[rawPos + 2];
|
|
65533
|
+
pxData[pxPos + 3] = 255;
|
|
65534
|
+
},
|
|
65535
|
+
function(pxData, data, pxPos, rawPos) {
|
|
65536
|
+
if (rawPos + 3 >= data.length) throw new Error("Ran out of data");
|
|
65537
|
+
pxData[pxPos] = data[rawPos];
|
|
65538
|
+
pxData[pxPos + 1] = data[rawPos + 1];
|
|
65539
|
+
pxData[pxPos + 2] = data[rawPos + 2];
|
|
65540
|
+
pxData[pxPos + 3] = data[rawPos + 3];
|
|
65541
|
+
}
|
|
65542
|
+
];
|
|
65543
|
+
var pixelBppCustomMapper = [
|
|
65544
|
+
function() {},
|
|
65545
|
+
function(pxData, pixelData, pxPos, maxBit) {
|
|
65546
|
+
let pixel = pixelData[0];
|
|
65547
|
+
pxData[pxPos] = pixel;
|
|
65548
|
+
pxData[pxPos + 1] = pixel;
|
|
65549
|
+
pxData[pxPos + 2] = pixel;
|
|
65550
|
+
pxData[pxPos + 3] = maxBit;
|
|
65551
|
+
},
|
|
65552
|
+
function(pxData, pixelData, pxPos) {
|
|
65553
|
+
let pixel = pixelData[0];
|
|
65554
|
+
pxData[pxPos] = pixel;
|
|
65555
|
+
pxData[pxPos + 1] = pixel;
|
|
65556
|
+
pxData[pxPos + 2] = pixel;
|
|
65557
|
+
pxData[pxPos + 3] = pixelData[1];
|
|
65558
|
+
},
|
|
65559
|
+
function(pxData, pixelData, pxPos, maxBit) {
|
|
65560
|
+
pxData[pxPos] = pixelData[0];
|
|
65561
|
+
pxData[pxPos + 1] = pixelData[1];
|
|
65562
|
+
pxData[pxPos + 2] = pixelData[2];
|
|
65563
|
+
pxData[pxPos + 3] = maxBit;
|
|
65564
|
+
},
|
|
65565
|
+
function(pxData, pixelData, pxPos) {
|
|
65566
|
+
pxData[pxPos] = pixelData[0];
|
|
65567
|
+
pxData[pxPos + 1] = pixelData[1];
|
|
65568
|
+
pxData[pxPos + 2] = pixelData[2];
|
|
65569
|
+
pxData[pxPos + 3] = pixelData[3];
|
|
65570
|
+
}
|
|
65571
|
+
];
|
|
65572
|
+
function bitRetriever(data, depth) {
|
|
65573
|
+
let leftOver = [];
|
|
65574
|
+
let i = 0;
|
|
65575
|
+
function split() {
|
|
65576
|
+
if (i === data.length) throw new Error("Ran out of data");
|
|
65577
|
+
let byte = data[i];
|
|
65578
|
+
i++;
|
|
65579
|
+
let byte8, byte7, byte6, byte5, byte4, byte3, byte2, byte1;
|
|
65580
|
+
switch (depth) {
|
|
65581
|
+
default: throw new Error("unrecognised depth");
|
|
65582
|
+
case 16:
|
|
65583
|
+
byte2 = data[i];
|
|
65584
|
+
i++;
|
|
65585
|
+
leftOver.push((byte << 8) + byte2);
|
|
65586
|
+
break;
|
|
65587
|
+
case 4:
|
|
65588
|
+
byte2 = byte & 15;
|
|
65589
|
+
byte1 = byte >> 4;
|
|
65590
|
+
leftOver.push(byte1, byte2);
|
|
65591
|
+
break;
|
|
65592
|
+
case 2:
|
|
65593
|
+
byte4 = byte & 3;
|
|
65594
|
+
byte3 = byte >> 2 & 3;
|
|
65595
|
+
byte2 = byte >> 4 & 3;
|
|
65596
|
+
byte1 = byte >> 6 & 3;
|
|
65597
|
+
leftOver.push(byte1, byte2, byte3, byte4);
|
|
65598
|
+
break;
|
|
65599
|
+
case 1:
|
|
65600
|
+
byte8 = byte & 1;
|
|
65601
|
+
byte7 = byte >> 1 & 1;
|
|
65602
|
+
byte6 = byte >> 2 & 1;
|
|
65603
|
+
byte5 = byte >> 3 & 1;
|
|
65604
|
+
byte4 = byte >> 4 & 1;
|
|
65605
|
+
byte3 = byte >> 5 & 1;
|
|
65606
|
+
byte2 = byte >> 6 & 1;
|
|
65607
|
+
byte1 = byte >> 7 & 1;
|
|
65608
|
+
leftOver.push(byte1, byte2, byte3, byte4, byte5, byte6, byte7, byte8);
|
|
65609
|
+
break;
|
|
65610
|
+
}
|
|
65611
|
+
}
|
|
65612
|
+
return {
|
|
65613
|
+
get: function(count) {
|
|
65614
|
+
while (leftOver.length < count) split();
|
|
65615
|
+
let returner = leftOver.slice(0, count);
|
|
65616
|
+
leftOver = leftOver.slice(count);
|
|
65617
|
+
return returner;
|
|
65618
|
+
},
|
|
65619
|
+
resetAfterLine: function() {
|
|
65620
|
+
leftOver.length = 0;
|
|
65621
|
+
},
|
|
65622
|
+
end: function() {
|
|
65623
|
+
if (i !== data.length) throw new Error("extra data found");
|
|
65624
|
+
}
|
|
65625
|
+
};
|
|
65626
|
+
}
|
|
65627
|
+
function mapImage8Bit(image, pxData, getPxPos, bpp, data, rawPos) {
|
|
65628
|
+
let imageWidth = image.width;
|
|
65629
|
+
let imageHeight = image.height;
|
|
65630
|
+
let imagePass = image.index;
|
|
65631
|
+
for (let y = 0; y < imageHeight; y++) for (let x = 0; x < imageWidth; x++) {
|
|
65632
|
+
let pxPos = getPxPos(x, y, imagePass);
|
|
65633
|
+
pixelBppMapper[bpp](pxData, data, pxPos, rawPos);
|
|
65634
|
+
rawPos += bpp;
|
|
65635
|
+
}
|
|
65636
|
+
return rawPos;
|
|
65637
|
+
}
|
|
65638
|
+
function mapImageCustomBit(image, pxData, getPxPos, bpp, bits, maxBit) {
|
|
65639
|
+
let imageWidth = image.width;
|
|
65640
|
+
let imageHeight = image.height;
|
|
65641
|
+
let imagePass = image.index;
|
|
65642
|
+
for (let y = 0; y < imageHeight; y++) {
|
|
65643
|
+
for (let x = 0; x < imageWidth; x++) {
|
|
65644
|
+
let pixelData = bits.get(bpp);
|
|
65645
|
+
let pxPos = getPxPos(x, y, imagePass);
|
|
65646
|
+
pixelBppCustomMapper[bpp](pxData, pixelData, pxPos, maxBit);
|
|
65647
|
+
}
|
|
65648
|
+
bits.resetAfterLine();
|
|
65649
|
+
}
|
|
65650
|
+
}
|
|
65651
|
+
exports.dataToBitMap = function(data, bitmapInfo) {
|
|
65652
|
+
let width = bitmapInfo.width;
|
|
65653
|
+
let height = bitmapInfo.height;
|
|
65654
|
+
let depth = bitmapInfo.depth;
|
|
65655
|
+
let bpp = bitmapInfo.bpp;
|
|
65656
|
+
let interlace = bitmapInfo.interlace;
|
|
65657
|
+
let bits;
|
|
65658
|
+
if (depth !== 8) bits = bitRetriever(data, depth);
|
|
65659
|
+
let pxData;
|
|
65660
|
+
if (depth <= 8) pxData = Buffer.alloc(width * height * 4);
|
|
65661
|
+
else pxData = new Uint16Array(width * height * 4);
|
|
65662
|
+
let maxBit = Math.pow(2, depth) - 1;
|
|
65663
|
+
let rawPos = 0;
|
|
65664
|
+
let images;
|
|
65665
|
+
let getPxPos;
|
|
65666
|
+
if (interlace) {
|
|
65667
|
+
images = interlaceUtils.getImagePasses(width, height);
|
|
65668
|
+
getPxPos = interlaceUtils.getInterlaceIterator(width, height);
|
|
65669
|
+
} else {
|
|
65670
|
+
let nonInterlacedPxPos = 0;
|
|
65671
|
+
getPxPos = function() {
|
|
65672
|
+
let returner = nonInterlacedPxPos;
|
|
65673
|
+
nonInterlacedPxPos += 4;
|
|
65674
|
+
return returner;
|
|
65675
|
+
};
|
|
65676
|
+
images = [{
|
|
65677
|
+
width,
|
|
65678
|
+
height
|
|
65679
|
+
}];
|
|
65680
|
+
}
|
|
65681
|
+
for (let imageIndex = 0; imageIndex < images.length; imageIndex++) if (depth === 8) rawPos = mapImage8Bit(images[imageIndex], pxData, getPxPos, bpp, data, rawPos);
|
|
65682
|
+
else mapImageCustomBit(images[imageIndex], pxData, getPxPos, bpp, bits, maxBit);
|
|
65683
|
+
if (depth === 8) {
|
|
65684
|
+
if (rawPos !== data.length) throw new Error("extra data found");
|
|
65685
|
+
} else bits.end();
|
|
65686
|
+
return pxData;
|
|
65687
|
+
};
|
|
65688
|
+
}));
|
|
65689
|
+
//#endregion
|
|
65690
|
+
//#region node_modules/.pnpm/pngjs@7.0.0/node_modules/pngjs/lib/format-normaliser.js
|
|
65691
|
+
var require_format_normaliser = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
65692
|
+
function dePalette(indata, outdata, width, height, palette) {
|
|
65693
|
+
let pxPos = 0;
|
|
65694
|
+
for (let y = 0; y < height; y++) for (let x = 0; x < width; x++) {
|
|
65695
|
+
let color = palette[indata[pxPos]];
|
|
65696
|
+
if (!color) throw new Error("index " + indata[pxPos] + " not in palette");
|
|
65697
|
+
for (let i = 0; i < 4; i++) outdata[pxPos + i] = color[i];
|
|
65698
|
+
pxPos += 4;
|
|
65699
|
+
}
|
|
65700
|
+
}
|
|
65701
|
+
function replaceTransparentColor(indata, outdata, width, height, transColor) {
|
|
65702
|
+
let pxPos = 0;
|
|
65703
|
+
for (let y = 0; y < height; y++) for (let x = 0; x < width; x++) {
|
|
65704
|
+
let makeTrans = false;
|
|
65705
|
+
if (transColor.length === 1) {
|
|
65706
|
+
if (transColor[0] === indata[pxPos]) makeTrans = true;
|
|
65707
|
+
} else if (transColor[0] === indata[pxPos] && transColor[1] === indata[pxPos + 1] && transColor[2] === indata[pxPos + 2]) makeTrans = true;
|
|
65708
|
+
if (makeTrans) for (let i = 0; i < 4; i++) outdata[pxPos + i] = 0;
|
|
65709
|
+
pxPos += 4;
|
|
65710
|
+
}
|
|
65711
|
+
}
|
|
65712
|
+
function scaleDepth(indata, outdata, width, height, depth) {
|
|
65713
|
+
let maxOutSample = 255;
|
|
65714
|
+
let maxInSample = Math.pow(2, depth) - 1;
|
|
65715
|
+
let pxPos = 0;
|
|
65716
|
+
for (let y = 0; y < height; y++) for (let x = 0; x < width; x++) {
|
|
65717
|
+
for (let i = 0; i < 4; i++) outdata[pxPos + i] = Math.floor(indata[pxPos + i] * maxOutSample / maxInSample + .5);
|
|
65718
|
+
pxPos += 4;
|
|
65719
|
+
}
|
|
65720
|
+
}
|
|
65721
|
+
module.exports = function(indata, imageData, skipRescale = false) {
|
|
65722
|
+
let depth = imageData.depth;
|
|
65723
|
+
let width = imageData.width;
|
|
65724
|
+
let height = imageData.height;
|
|
65725
|
+
let colorType = imageData.colorType;
|
|
65726
|
+
let transColor = imageData.transColor;
|
|
65727
|
+
let palette = imageData.palette;
|
|
65728
|
+
let outdata = indata;
|
|
65729
|
+
if (colorType === 3) dePalette(indata, outdata, width, height, palette);
|
|
65730
|
+
else {
|
|
65731
|
+
if (transColor) replaceTransparentColor(indata, outdata, width, height, transColor);
|
|
65732
|
+
if (depth !== 8 && !skipRescale) {
|
|
65733
|
+
if (depth === 16) outdata = Buffer.alloc(width * height * 4);
|
|
65734
|
+
scaleDepth(indata, outdata, width, height, depth);
|
|
65735
|
+
}
|
|
65736
|
+
}
|
|
65737
|
+
return outdata;
|
|
65738
|
+
};
|
|
65739
|
+
}));
|
|
65740
|
+
//#endregion
|
|
65741
|
+
//#region node_modules/.pnpm/pngjs@7.0.0/node_modules/pngjs/lib/parser-async.js
|
|
65742
|
+
var require_parser_async = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
65743
|
+
var util$3 = require("util");
|
|
65744
|
+
var zlib$4 = require("zlib");
|
|
65745
|
+
var ChunkStream = require_chunkstream();
|
|
65746
|
+
var FilterAsync = require_filter_parse_async();
|
|
65747
|
+
var Parser = require_parser();
|
|
65748
|
+
var bitmapper = require_bitmapper();
|
|
65749
|
+
var formatNormaliser = require_format_normaliser();
|
|
65750
|
+
var ParserAsync = module.exports = function(options) {
|
|
65751
|
+
ChunkStream.call(this);
|
|
65752
|
+
this._parser = new Parser(options, {
|
|
65753
|
+
read: this.read.bind(this),
|
|
65754
|
+
error: this._handleError.bind(this),
|
|
65755
|
+
metadata: this._handleMetaData.bind(this),
|
|
65756
|
+
gamma: this.emit.bind(this, "gamma"),
|
|
65757
|
+
palette: this._handlePalette.bind(this),
|
|
65758
|
+
transColor: this._handleTransColor.bind(this),
|
|
65759
|
+
finished: this._finished.bind(this),
|
|
65760
|
+
inflateData: this._inflateData.bind(this),
|
|
65761
|
+
simpleTransparency: this._simpleTransparency.bind(this),
|
|
65762
|
+
headersFinished: this._headersFinished.bind(this)
|
|
65763
|
+
});
|
|
65764
|
+
this._options = options;
|
|
65765
|
+
this.writable = true;
|
|
65766
|
+
this._parser.start();
|
|
65767
|
+
};
|
|
65768
|
+
util$3.inherits(ParserAsync, ChunkStream);
|
|
65769
|
+
ParserAsync.prototype._handleError = function(err) {
|
|
65770
|
+
this.emit("error", err);
|
|
65771
|
+
this.writable = false;
|
|
65772
|
+
this.destroy();
|
|
65773
|
+
if (this._inflate && this._inflate.destroy) this._inflate.destroy();
|
|
65774
|
+
if (this._filter) {
|
|
65775
|
+
this._filter.destroy();
|
|
65776
|
+
this._filter.on("error", function() {});
|
|
65777
|
+
}
|
|
65778
|
+
this.errord = true;
|
|
65779
|
+
};
|
|
65780
|
+
ParserAsync.prototype._inflateData = function(data) {
|
|
65781
|
+
if (!this._inflate) if (this._bitmapInfo.interlace) {
|
|
65782
|
+
this._inflate = zlib$4.createInflate();
|
|
65783
|
+
this._inflate.on("error", this.emit.bind(this, "error"));
|
|
65784
|
+
this._filter.on("complete", this._complete.bind(this));
|
|
65785
|
+
this._inflate.pipe(this._filter);
|
|
65786
|
+
} else {
|
|
65787
|
+
let imageSize = ((this._bitmapInfo.width * this._bitmapInfo.bpp * this._bitmapInfo.depth + 7 >> 3) + 1) * this._bitmapInfo.height;
|
|
65788
|
+
let chunkSize = Math.max(imageSize, zlib$4.Z_MIN_CHUNK);
|
|
65789
|
+
this._inflate = zlib$4.createInflate({ chunkSize });
|
|
65790
|
+
let leftToInflate = imageSize;
|
|
65791
|
+
let emitError = this.emit.bind(this, "error");
|
|
65792
|
+
this._inflate.on("error", function(err) {
|
|
65793
|
+
if (!leftToInflate) return;
|
|
65794
|
+
emitError(err);
|
|
65795
|
+
});
|
|
65796
|
+
this._filter.on("complete", this._complete.bind(this));
|
|
65797
|
+
let filterWrite = this._filter.write.bind(this._filter);
|
|
65798
|
+
this._inflate.on("data", function(chunk) {
|
|
65799
|
+
if (!leftToInflate) return;
|
|
65800
|
+
if (chunk.length > leftToInflate) chunk = chunk.slice(0, leftToInflate);
|
|
65801
|
+
leftToInflate -= chunk.length;
|
|
65802
|
+
filterWrite(chunk);
|
|
65803
|
+
});
|
|
65804
|
+
this._inflate.on("end", this._filter.end.bind(this._filter));
|
|
65805
|
+
}
|
|
65806
|
+
this._inflate.write(data);
|
|
65807
|
+
};
|
|
65808
|
+
ParserAsync.prototype._handleMetaData = function(metaData) {
|
|
65809
|
+
this._metaData = metaData;
|
|
65810
|
+
this._bitmapInfo = Object.create(metaData);
|
|
65811
|
+
this._filter = new FilterAsync(this._bitmapInfo);
|
|
65812
|
+
};
|
|
65813
|
+
ParserAsync.prototype._handleTransColor = function(transColor) {
|
|
65814
|
+
this._bitmapInfo.transColor = transColor;
|
|
65815
|
+
};
|
|
65816
|
+
ParserAsync.prototype._handlePalette = function(palette) {
|
|
65817
|
+
this._bitmapInfo.palette = palette;
|
|
65818
|
+
};
|
|
65819
|
+
ParserAsync.prototype._simpleTransparency = function() {
|
|
65820
|
+
this._metaData.alpha = true;
|
|
65821
|
+
};
|
|
65822
|
+
ParserAsync.prototype._headersFinished = function() {
|
|
65823
|
+
this.emit("metadata", this._metaData);
|
|
65824
|
+
};
|
|
65825
|
+
ParserAsync.prototype._finished = function() {
|
|
65826
|
+
if (this.errord) return;
|
|
65827
|
+
if (!this._inflate) this.emit("error", "No Inflate block");
|
|
65828
|
+
else this._inflate.end();
|
|
65829
|
+
};
|
|
65830
|
+
ParserAsync.prototype._complete = function(filteredData) {
|
|
65831
|
+
if (this.errord) return;
|
|
65832
|
+
let normalisedBitmapData;
|
|
65833
|
+
try {
|
|
65834
|
+
let bitmapData = bitmapper.dataToBitMap(filteredData, this._bitmapInfo);
|
|
65835
|
+
normalisedBitmapData = formatNormaliser(bitmapData, this._bitmapInfo, this._options.skipRescale);
|
|
65836
|
+
bitmapData = null;
|
|
65837
|
+
} catch (ex) {
|
|
65838
|
+
this._handleError(ex);
|
|
65839
|
+
return;
|
|
65840
|
+
}
|
|
65841
|
+
this.emit("parsed", normalisedBitmapData);
|
|
65842
|
+
};
|
|
65843
|
+
}));
|
|
65844
|
+
//#endregion
|
|
65845
|
+
//#region node_modules/.pnpm/pngjs@7.0.0/node_modules/pngjs/lib/bitpacker.js
|
|
65846
|
+
var require_bitpacker = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
65847
|
+
var constants = require_constants();
|
|
65848
|
+
module.exports = function(dataIn, width, height, options) {
|
|
65849
|
+
let outHasAlpha = [constants.COLORTYPE_COLOR_ALPHA, constants.COLORTYPE_ALPHA].indexOf(options.colorType) !== -1;
|
|
65850
|
+
if (options.colorType === options.inputColorType) {
|
|
65851
|
+
let bigEndian = (function() {
|
|
65852
|
+
let buffer = /* @__PURE__ */ new ArrayBuffer(2);
|
|
65853
|
+
new DataView(buffer).setInt16(0, 256, true);
|
|
65854
|
+
return new Int16Array(buffer)[0] !== 256;
|
|
65855
|
+
})();
|
|
65856
|
+
if (options.bitDepth === 8 || options.bitDepth === 16 && bigEndian) return dataIn;
|
|
65857
|
+
}
|
|
65858
|
+
let data = options.bitDepth !== 16 ? dataIn : new Uint16Array(dataIn.buffer);
|
|
65859
|
+
let maxValue = 255;
|
|
65860
|
+
let inBpp = constants.COLORTYPE_TO_BPP_MAP[options.inputColorType];
|
|
65861
|
+
if (inBpp === 4 && !options.inputHasAlpha) inBpp = 3;
|
|
65862
|
+
let outBpp = constants.COLORTYPE_TO_BPP_MAP[options.colorType];
|
|
65863
|
+
if (options.bitDepth === 16) {
|
|
65864
|
+
maxValue = 65535;
|
|
65865
|
+
outBpp *= 2;
|
|
65866
|
+
}
|
|
65867
|
+
let outData = Buffer.alloc(width * height * outBpp);
|
|
65868
|
+
let inIndex = 0;
|
|
65869
|
+
let outIndex = 0;
|
|
65870
|
+
let bgColor = options.bgColor || {};
|
|
65871
|
+
if (bgColor.red === void 0) bgColor.red = maxValue;
|
|
65872
|
+
if (bgColor.green === void 0) bgColor.green = maxValue;
|
|
65873
|
+
if (bgColor.blue === void 0) bgColor.blue = maxValue;
|
|
65874
|
+
function getRGBA() {
|
|
65875
|
+
let red;
|
|
65876
|
+
let green;
|
|
65877
|
+
let blue;
|
|
65878
|
+
let alpha = maxValue;
|
|
65879
|
+
switch (options.inputColorType) {
|
|
65880
|
+
case constants.COLORTYPE_COLOR_ALPHA:
|
|
65881
|
+
alpha = data[inIndex + 3];
|
|
65882
|
+
red = data[inIndex];
|
|
65883
|
+
green = data[inIndex + 1];
|
|
65884
|
+
blue = data[inIndex + 2];
|
|
65885
|
+
break;
|
|
65886
|
+
case constants.COLORTYPE_COLOR:
|
|
65887
|
+
red = data[inIndex];
|
|
65888
|
+
green = data[inIndex + 1];
|
|
65889
|
+
blue = data[inIndex + 2];
|
|
65890
|
+
break;
|
|
65891
|
+
case constants.COLORTYPE_ALPHA:
|
|
65892
|
+
alpha = data[inIndex + 1];
|
|
65893
|
+
red = data[inIndex];
|
|
65894
|
+
green = red;
|
|
65895
|
+
blue = red;
|
|
65896
|
+
break;
|
|
65897
|
+
case constants.COLORTYPE_GRAYSCALE:
|
|
65898
|
+
red = data[inIndex];
|
|
65899
|
+
green = red;
|
|
65900
|
+
blue = red;
|
|
65901
|
+
break;
|
|
65902
|
+
default: throw new Error("input color type:" + options.inputColorType + " is not supported at present");
|
|
65903
|
+
}
|
|
65904
|
+
if (options.inputHasAlpha) {
|
|
65905
|
+
if (!outHasAlpha) {
|
|
65906
|
+
alpha /= maxValue;
|
|
65907
|
+
red = Math.min(Math.max(Math.round((1 - alpha) * bgColor.red + alpha * red), 0), maxValue);
|
|
65908
|
+
green = Math.min(Math.max(Math.round((1 - alpha) * bgColor.green + alpha * green), 0), maxValue);
|
|
65909
|
+
blue = Math.min(Math.max(Math.round((1 - alpha) * bgColor.blue + alpha * blue), 0), maxValue);
|
|
65910
|
+
}
|
|
65911
|
+
}
|
|
65912
|
+
return {
|
|
65913
|
+
red,
|
|
65914
|
+
green,
|
|
65915
|
+
blue,
|
|
65916
|
+
alpha
|
|
65917
|
+
};
|
|
65918
|
+
}
|
|
65919
|
+
for (let y = 0; y < height; y++) for (let x = 0; x < width; x++) {
|
|
65920
|
+
let rgba = getRGBA(data, inIndex);
|
|
65921
|
+
switch (options.colorType) {
|
|
65922
|
+
case constants.COLORTYPE_COLOR_ALPHA:
|
|
65923
|
+
case constants.COLORTYPE_COLOR:
|
|
65924
|
+
if (options.bitDepth === 8) {
|
|
65925
|
+
outData[outIndex] = rgba.red;
|
|
65926
|
+
outData[outIndex + 1] = rgba.green;
|
|
65927
|
+
outData[outIndex + 2] = rgba.blue;
|
|
65928
|
+
if (outHasAlpha) outData[outIndex + 3] = rgba.alpha;
|
|
65929
|
+
} else {
|
|
65930
|
+
outData.writeUInt16BE(rgba.red, outIndex);
|
|
65931
|
+
outData.writeUInt16BE(rgba.green, outIndex + 2);
|
|
65932
|
+
outData.writeUInt16BE(rgba.blue, outIndex + 4);
|
|
65933
|
+
if (outHasAlpha) outData.writeUInt16BE(rgba.alpha, outIndex + 6);
|
|
65934
|
+
}
|
|
65935
|
+
break;
|
|
65936
|
+
case constants.COLORTYPE_ALPHA:
|
|
65937
|
+
case constants.COLORTYPE_GRAYSCALE: {
|
|
65938
|
+
let grayscale = (rgba.red + rgba.green + rgba.blue) / 3;
|
|
65939
|
+
if (options.bitDepth === 8) {
|
|
65940
|
+
outData[outIndex] = grayscale;
|
|
65941
|
+
if (outHasAlpha) outData[outIndex + 1] = rgba.alpha;
|
|
65942
|
+
} else {
|
|
65943
|
+
outData.writeUInt16BE(grayscale, outIndex);
|
|
65944
|
+
if (outHasAlpha) outData.writeUInt16BE(rgba.alpha, outIndex + 2);
|
|
65945
|
+
}
|
|
65946
|
+
break;
|
|
65947
|
+
}
|
|
65948
|
+
default: throw new Error("unrecognised color Type " + options.colorType);
|
|
65949
|
+
}
|
|
65950
|
+
inIndex += inBpp;
|
|
65951
|
+
outIndex += outBpp;
|
|
65952
|
+
}
|
|
65953
|
+
return outData;
|
|
65954
|
+
};
|
|
65955
|
+
}));
|
|
65956
|
+
//#endregion
|
|
65957
|
+
//#region node_modules/.pnpm/pngjs@7.0.0/node_modules/pngjs/lib/filter-pack.js
|
|
65958
|
+
var require_filter_pack = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
65959
|
+
var paethPredictor = require_paeth_predictor();
|
|
65960
|
+
function filterNone(pxData, pxPos, byteWidth, rawData, rawPos) {
|
|
65961
|
+
for (let x = 0; x < byteWidth; x++) rawData[rawPos + x] = pxData[pxPos + x];
|
|
65962
|
+
}
|
|
65963
|
+
function filterSumNone(pxData, pxPos, byteWidth) {
|
|
65964
|
+
let sum = 0;
|
|
65965
|
+
let length = pxPos + byteWidth;
|
|
65966
|
+
for (let i = pxPos; i < length; i++) sum += Math.abs(pxData[i]);
|
|
65967
|
+
return sum;
|
|
65968
|
+
}
|
|
65969
|
+
function filterSub(pxData, pxPos, byteWidth, rawData, rawPos, bpp) {
|
|
65970
|
+
for (let x = 0; x < byteWidth; x++) {
|
|
65971
|
+
let left = x >= bpp ? pxData[pxPos + x - bpp] : 0;
|
|
65972
|
+
let val = pxData[pxPos + x] - left;
|
|
65973
|
+
rawData[rawPos + x] = val;
|
|
65974
|
+
}
|
|
65975
|
+
}
|
|
65976
|
+
function filterSumSub(pxData, pxPos, byteWidth, bpp) {
|
|
65977
|
+
let sum = 0;
|
|
65978
|
+
for (let x = 0; x < byteWidth; x++) {
|
|
65979
|
+
let left = x >= bpp ? pxData[pxPos + x - bpp] : 0;
|
|
65980
|
+
let val = pxData[pxPos + x] - left;
|
|
65981
|
+
sum += Math.abs(val);
|
|
65982
|
+
}
|
|
65983
|
+
return sum;
|
|
65984
|
+
}
|
|
65985
|
+
function filterUp(pxData, pxPos, byteWidth, rawData, rawPos) {
|
|
65986
|
+
for (let x = 0; x < byteWidth; x++) {
|
|
65987
|
+
let up = pxPos > 0 ? pxData[pxPos + x - byteWidth] : 0;
|
|
65988
|
+
let val = pxData[pxPos + x] - up;
|
|
65989
|
+
rawData[rawPos + x] = val;
|
|
65990
|
+
}
|
|
65991
|
+
}
|
|
65992
|
+
function filterSumUp(pxData, pxPos, byteWidth) {
|
|
65993
|
+
let sum = 0;
|
|
65994
|
+
let length = pxPos + byteWidth;
|
|
65995
|
+
for (let x = pxPos; x < length; x++) {
|
|
65996
|
+
let up = pxPos > 0 ? pxData[x - byteWidth] : 0;
|
|
65997
|
+
let val = pxData[x] - up;
|
|
65998
|
+
sum += Math.abs(val);
|
|
65999
|
+
}
|
|
66000
|
+
return sum;
|
|
66001
|
+
}
|
|
66002
|
+
function filterAvg(pxData, pxPos, byteWidth, rawData, rawPos, bpp) {
|
|
66003
|
+
for (let x = 0; x < byteWidth; x++) {
|
|
66004
|
+
let left = x >= bpp ? pxData[pxPos + x - bpp] : 0;
|
|
66005
|
+
let up = pxPos > 0 ? pxData[pxPos + x - byteWidth] : 0;
|
|
66006
|
+
let val = pxData[pxPos + x] - (left + up >> 1);
|
|
66007
|
+
rawData[rawPos + x] = val;
|
|
66008
|
+
}
|
|
66009
|
+
}
|
|
66010
|
+
function filterSumAvg(pxData, pxPos, byteWidth, bpp) {
|
|
66011
|
+
let sum = 0;
|
|
66012
|
+
for (let x = 0; x < byteWidth; x++) {
|
|
66013
|
+
let left = x >= bpp ? pxData[pxPos + x - bpp] : 0;
|
|
66014
|
+
let up = pxPos > 0 ? pxData[pxPos + x - byteWidth] : 0;
|
|
66015
|
+
let val = pxData[pxPos + x] - (left + up >> 1);
|
|
66016
|
+
sum += Math.abs(val);
|
|
66017
|
+
}
|
|
66018
|
+
return sum;
|
|
66019
|
+
}
|
|
66020
|
+
function filterPaeth(pxData, pxPos, byteWidth, rawData, rawPos, bpp) {
|
|
66021
|
+
for (let x = 0; x < byteWidth; x++) {
|
|
66022
|
+
let left = x >= bpp ? pxData[pxPos + x - bpp] : 0;
|
|
66023
|
+
let up = pxPos > 0 ? pxData[pxPos + x - byteWidth] : 0;
|
|
66024
|
+
let upleft = pxPos > 0 && x >= bpp ? pxData[pxPos + x - (byteWidth + bpp)] : 0;
|
|
66025
|
+
let val = pxData[pxPos + x] - paethPredictor(left, up, upleft);
|
|
66026
|
+
rawData[rawPos + x] = val;
|
|
66027
|
+
}
|
|
66028
|
+
}
|
|
66029
|
+
function filterSumPaeth(pxData, pxPos, byteWidth, bpp) {
|
|
66030
|
+
let sum = 0;
|
|
66031
|
+
for (let x = 0; x < byteWidth; x++) {
|
|
66032
|
+
let left = x >= bpp ? pxData[pxPos + x - bpp] : 0;
|
|
66033
|
+
let up = pxPos > 0 ? pxData[pxPos + x - byteWidth] : 0;
|
|
66034
|
+
let upleft = pxPos > 0 && x >= bpp ? pxData[pxPos + x - (byteWidth + bpp)] : 0;
|
|
66035
|
+
let val = pxData[pxPos + x] - paethPredictor(left, up, upleft);
|
|
66036
|
+
sum += Math.abs(val);
|
|
66037
|
+
}
|
|
66038
|
+
return sum;
|
|
66039
|
+
}
|
|
66040
|
+
var filters = {
|
|
66041
|
+
0: filterNone,
|
|
66042
|
+
1: filterSub,
|
|
66043
|
+
2: filterUp,
|
|
66044
|
+
3: filterAvg,
|
|
66045
|
+
4: filterPaeth
|
|
66046
|
+
};
|
|
66047
|
+
var filterSums = {
|
|
66048
|
+
0: filterSumNone,
|
|
66049
|
+
1: filterSumSub,
|
|
66050
|
+
2: filterSumUp,
|
|
66051
|
+
3: filterSumAvg,
|
|
66052
|
+
4: filterSumPaeth
|
|
66053
|
+
};
|
|
66054
|
+
module.exports = function(pxData, width, height, options, bpp) {
|
|
66055
|
+
let filterTypes;
|
|
66056
|
+
if (!("filterType" in options) || options.filterType === -1) filterTypes = [
|
|
66057
|
+
0,
|
|
66058
|
+
1,
|
|
66059
|
+
2,
|
|
66060
|
+
3,
|
|
66061
|
+
4
|
|
66062
|
+
];
|
|
66063
|
+
else if (typeof options.filterType === "number") filterTypes = [options.filterType];
|
|
66064
|
+
else throw new Error("unrecognised filter types");
|
|
66065
|
+
if (options.bitDepth === 16) bpp *= 2;
|
|
66066
|
+
let byteWidth = width * bpp;
|
|
66067
|
+
let rawPos = 0;
|
|
66068
|
+
let pxPos = 0;
|
|
66069
|
+
let rawData = Buffer.alloc((byteWidth + 1) * height);
|
|
66070
|
+
let sel = filterTypes[0];
|
|
66071
|
+
for (let y = 0; y < height; y++) {
|
|
66072
|
+
if (filterTypes.length > 1) {
|
|
66073
|
+
let min = Infinity;
|
|
66074
|
+
for (let i = 0; i < filterTypes.length; i++) {
|
|
66075
|
+
let sum = filterSums[filterTypes[i]](pxData, pxPos, byteWidth, bpp);
|
|
66076
|
+
if (sum < min) {
|
|
66077
|
+
sel = filterTypes[i];
|
|
66078
|
+
min = sum;
|
|
66079
|
+
}
|
|
66080
|
+
}
|
|
66081
|
+
}
|
|
66082
|
+
rawData[rawPos] = sel;
|
|
66083
|
+
rawPos++;
|
|
66084
|
+
filters[sel](pxData, pxPos, byteWidth, rawData, rawPos, bpp);
|
|
66085
|
+
rawPos += byteWidth;
|
|
66086
|
+
pxPos += byteWidth;
|
|
66087
|
+
}
|
|
66088
|
+
return rawData;
|
|
66089
|
+
};
|
|
66090
|
+
}));
|
|
66091
|
+
//#endregion
|
|
66092
|
+
//#region node_modules/.pnpm/pngjs@7.0.0/node_modules/pngjs/lib/packer.js
|
|
66093
|
+
var require_packer = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
66094
|
+
var constants = require_constants();
|
|
66095
|
+
var CrcStream = require_crc();
|
|
66096
|
+
var bitPacker = require_bitpacker();
|
|
66097
|
+
var filter = require_filter_pack();
|
|
66098
|
+
var zlib$3 = require("zlib");
|
|
66099
|
+
var Packer = module.exports = function(options) {
|
|
66100
|
+
this._options = options;
|
|
66101
|
+
options.deflateChunkSize = options.deflateChunkSize || 32 * 1024;
|
|
66102
|
+
options.deflateLevel = options.deflateLevel != null ? options.deflateLevel : 9;
|
|
66103
|
+
options.deflateStrategy = options.deflateStrategy != null ? options.deflateStrategy : 3;
|
|
66104
|
+
options.inputHasAlpha = options.inputHasAlpha != null ? options.inputHasAlpha : true;
|
|
66105
|
+
options.deflateFactory = options.deflateFactory || zlib$3.createDeflate;
|
|
66106
|
+
options.bitDepth = options.bitDepth || 8;
|
|
66107
|
+
options.colorType = typeof options.colorType === "number" ? options.colorType : constants.COLORTYPE_COLOR_ALPHA;
|
|
66108
|
+
options.inputColorType = typeof options.inputColorType === "number" ? options.inputColorType : constants.COLORTYPE_COLOR_ALPHA;
|
|
66109
|
+
if ([
|
|
66110
|
+
constants.COLORTYPE_GRAYSCALE,
|
|
66111
|
+
constants.COLORTYPE_COLOR,
|
|
66112
|
+
constants.COLORTYPE_COLOR_ALPHA,
|
|
66113
|
+
constants.COLORTYPE_ALPHA
|
|
66114
|
+
].indexOf(options.colorType) === -1) throw new Error("option color type:" + options.colorType + " is not supported at present");
|
|
66115
|
+
if ([
|
|
66116
|
+
constants.COLORTYPE_GRAYSCALE,
|
|
66117
|
+
constants.COLORTYPE_COLOR,
|
|
66118
|
+
constants.COLORTYPE_COLOR_ALPHA,
|
|
66119
|
+
constants.COLORTYPE_ALPHA
|
|
66120
|
+
].indexOf(options.inputColorType) === -1) throw new Error("option input color type:" + options.inputColorType + " is not supported at present");
|
|
66121
|
+
if (options.bitDepth !== 8 && options.bitDepth !== 16) throw new Error("option bit depth:" + options.bitDepth + " is not supported at present");
|
|
66122
|
+
};
|
|
66123
|
+
Packer.prototype.getDeflateOptions = function() {
|
|
66124
|
+
return {
|
|
66125
|
+
chunkSize: this._options.deflateChunkSize,
|
|
66126
|
+
level: this._options.deflateLevel,
|
|
66127
|
+
strategy: this._options.deflateStrategy
|
|
66128
|
+
};
|
|
66129
|
+
};
|
|
66130
|
+
Packer.prototype.createDeflate = function() {
|
|
66131
|
+
return this._options.deflateFactory(this.getDeflateOptions());
|
|
66132
|
+
};
|
|
66133
|
+
Packer.prototype.filterData = function(data, width, height) {
|
|
66134
|
+
let packedData = bitPacker(data, width, height, this._options);
|
|
66135
|
+
let bpp = constants.COLORTYPE_TO_BPP_MAP[this._options.colorType];
|
|
66136
|
+
return filter(packedData, width, height, this._options, bpp);
|
|
66137
|
+
};
|
|
66138
|
+
Packer.prototype._packChunk = function(type, data) {
|
|
66139
|
+
let len = data ? data.length : 0;
|
|
66140
|
+
let buf = Buffer.alloc(len + 12);
|
|
66141
|
+
buf.writeUInt32BE(len, 0);
|
|
66142
|
+
buf.writeUInt32BE(type, 4);
|
|
66143
|
+
if (data) data.copy(buf, 8);
|
|
66144
|
+
buf.writeInt32BE(CrcStream.crc32(buf.slice(4, buf.length - 4)), buf.length - 4);
|
|
66145
|
+
return buf;
|
|
66146
|
+
};
|
|
66147
|
+
Packer.prototype.packGAMA = function(gamma) {
|
|
66148
|
+
let buf = Buffer.alloc(4);
|
|
66149
|
+
buf.writeUInt32BE(Math.floor(gamma * constants.GAMMA_DIVISION), 0);
|
|
66150
|
+
return this._packChunk(constants.TYPE_gAMA, buf);
|
|
66151
|
+
};
|
|
66152
|
+
Packer.prototype.packIHDR = function(width, height) {
|
|
66153
|
+
let buf = Buffer.alloc(13);
|
|
66154
|
+
buf.writeUInt32BE(width, 0);
|
|
66155
|
+
buf.writeUInt32BE(height, 4);
|
|
66156
|
+
buf[8] = this._options.bitDepth;
|
|
66157
|
+
buf[9] = this._options.colorType;
|
|
66158
|
+
buf[10] = 0;
|
|
66159
|
+
buf[11] = 0;
|
|
66160
|
+
buf[12] = 0;
|
|
66161
|
+
return this._packChunk(constants.TYPE_IHDR, buf);
|
|
66162
|
+
};
|
|
66163
|
+
Packer.prototype.packIDAT = function(data) {
|
|
66164
|
+
return this._packChunk(constants.TYPE_IDAT, data);
|
|
66165
|
+
};
|
|
66166
|
+
Packer.prototype.packIEND = function() {
|
|
66167
|
+
return this._packChunk(constants.TYPE_IEND, null);
|
|
66168
|
+
};
|
|
66169
|
+
}));
|
|
66170
|
+
//#endregion
|
|
66171
|
+
//#region node_modules/.pnpm/pngjs@7.0.0/node_modules/pngjs/lib/packer-async.js
|
|
66172
|
+
var require_packer_async = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
66173
|
+
var util$2 = require("util");
|
|
66174
|
+
var Stream$2 = require("stream");
|
|
66175
|
+
var constants = require_constants();
|
|
66176
|
+
var Packer = require_packer();
|
|
66177
|
+
var PackerAsync = module.exports = function(opt) {
|
|
66178
|
+
Stream$2.call(this);
|
|
66179
|
+
let options = opt || {};
|
|
66180
|
+
this._packer = new Packer(options);
|
|
66181
|
+
this._deflate = this._packer.createDeflate();
|
|
66182
|
+
this.readable = true;
|
|
66183
|
+
};
|
|
66184
|
+
util$2.inherits(PackerAsync, Stream$2);
|
|
66185
|
+
PackerAsync.prototype.pack = function(data, width, height, gamma) {
|
|
66186
|
+
this.emit("data", Buffer.from(constants.PNG_SIGNATURE));
|
|
66187
|
+
this.emit("data", this._packer.packIHDR(width, height));
|
|
66188
|
+
if (gamma) this.emit("data", this._packer.packGAMA(gamma));
|
|
66189
|
+
let filteredData = this._packer.filterData(data, width, height);
|
|
66190
|
+
this._deflate.on("error", this.emit.bind(this, "error"));
|
|
66191
|
+
this._deflate.on("data", function(compressedData) {
|
|
66192
|
+
this.emit("data", this._packer.packIDAT(compressedData));
|
|
66193
|
+
}.bind(this));
|
|
66194
|
+
this._deflate.on("end", function() {
|
|
66195
|
+
this.emit("data", this._packer.packIEND());
|
|
66196
|
+
this.emit("end");
|
|
66197
|
+
}.bind(this));
|
|
66198
|
+
this._deflate.end(filteredData);
|
|
66199
|
+
};
|
|
66200
|
+
}));
|
|
66201
|
+
//#endregion
|
|
66202
|
+
//#region node_modules/.pnpm/pngjs@7.0.0/node_modules/pngjs/lib/sync-inflate.js
|
|
66203
|
+
var require_sync_inflate = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
66204
|
+
var assert = require("assert").ok;
|
|
66205
|
+
var zlib$2 = require("zlib");
|
|
66206
|
+
var util$1 = require("util");
|
|
66207
|
+
var kMaxLength = require("buffer").kMaxLength;
|
|
66208
|
+
function Inflate(opts) {
|
|
66209
|
+
if (!(this instanceof Inflate)) return new Inflate(opts);
|
|
66210
|
+
if (opts && opts.chunkSize < zlib$2.Z_MIN_CHUNK) opts.chunkSize = zlib$2.Z_MIN_CHUNK;
|
|
66211
|
+
zlib$2.Inflate.call(this, opts);
|
|
66212
|
+
this._offset = this._offset === void 0 ? this._outOffset : this._offset;
|
|
66213
|
+
this._buffer = this._buffer || this._outBuffer;
|
|
66214
|
+
if (opts && opts.maxLength != null) this._maxLength = opts.maxLength;
|
|
66215
|
+
}
|
|
66216
|
+
function createInflate(opts) {
|
|
66217
|
+
return new Inflate(opts);
|
|
66218
|
+
}
|
|
66219
|
+
function _close(engine, callback) {
|
|
66220
|
+
if (callback) process.nextTick(callback);
|
|
66221
|
+
if (!engine._handle) return;
|
|
66222
|
+
engine._handle.close();
|
|
66223
|
+
engine._handle = null;
|
|
66224
|
+
}
|
|
66225
|
+
Inflate.prototype._processChunk = function(chunk, flushFlag, asyncCb) {
|
|
66226
|
+
if (typeof asyncCb === "function") return zlib$2.Inflate._processChunk.call(this, chunk, flushFlag, asyncCb);
|
|
66227
|
+
let self = this;
|
|
66228
|
+
let availInBefore = chunk && chunk.length;
|
|
66229
|
+
let availOutBefore = this._chunkSize - this._offset;
|
|
66230
|
+
let leftToInflate = this._maxLength;
|
|
66231
|
+
let inOff = 0;
|
|
66232
|
+
let buffers = [];
|
|
66233
|
+
let nread = 0;
|
|
66234
|
+
let error;
|
|
66235
|
+
this.on("error", function(err) {
|
|
66236
|
+
error = err;
|
|
66237
|
+
});
|
|
66238
|
+
function handleChunk(availInAfter, availOutAfter) {
|
|
66239
|
+
if (self._hadError) return;
|
|
66240
|
+
let have = availOutBefore - availOutAfter;
|
|
66241
|
+
assert(have >= 0, "have should not go down");
|
|
66242
|
+
if (have > 0) {
|
|
66243
|
+
let out = self._buffer.slice(self._offset, self._offset + have);
|
|
66244
|
+
self._offset += have;
|
|
66245
|
+
if (out.length > leftToInflate) out = out.slice(0, leftToInflate);
|
|
66246
|
+
buffers.push(out);
|
|
66247
|
+
nread += out.length;
|
|
66248
|
+
leftToInflate -= out.length;
|
|
66249
|
+
if (leftToInflate === 0) return false;
|
|
66250
|
+
}
|
|
66251
|
+
if (availOutAfter === 0 || self._offset >= self._chunkSize) {
|
|
66252
|
+
availOutBefore = self._chunkSize;
|
|
66253
|
+
self._offset = 0;
|
|
66254
|
+
self._buffer = Buffer.allocUnsafe(self._chunkSize);
|
|
66255
|
+
}
|
|
66256
|
+
if (availOutAfter === 0) {
|
|
66257
|
+
inOff += availInBefore - availInAfter;
|
|
66258
|
+
availInBefore = availInAfter;
|
|
66259
|
+
return true;
|
|
66260
|
+
}
|
|
66261
|
+
return false;
|
|
66262
|
+
}
|
|
66263
|
+
assert(this._handle, "zlib binding closed");
|
|
66264
|
+
let res;
|
|
66265
|
+
do {
|
|
66266
|
+
res = this._handle.writeSync(flushFlag, chunk, inOff, availInBefore, this._buffer, this._offset, availOutBefore);
|
|
66267
|
+
res = res || this._writeState;
|
|
66268
|
+
} while (!this._hadError && handleChunk(res[0], res[1]));
|
|
66269
|
+
if (this._hadError) throw error;
|
|
66270
|
+
if (nread >= kMaxLength) {
|
|
66271
|
+
_close(this);
|
|
66272
|
+
throw new RangeError("Cannot create final Buffer. It would be larger than 0x" + kMaxLength.toString(16) + " bytes");
|
|
66273
|
+
}
|
|
66274
|
+
let buf = Buffer.concat(buffers, nread);
|
|
66275
|
+
_close(this);
|
|
66276
|
+
return buf;
|
|
66277
|
+
};
|
|
66278
|
+
util$1.inherits(Inflate, zlib$2.Inflate);
|
|
66279
|
+
function zlibBufferSync(engine, buffer) {
|
|
66280
|
+
if (typeof buffer === "string") buffer = Buffer.from(buffer);
|
|
66281
|
+
if (!(buffer instanceof Buffer)) throw new TypeError("Not a string or buffer");
|
|
66282
|
+
let flushFlag = engine._finishFlushFlag;
|
|
66283
|
+
if (flushFlag == null) flushFlag = zlib$2.Z_FINISH;
|
|
66284
|
+
return engine._processChunk(buffer, flushFlag);
|
|
66285
|
+
}
|
|
66286
|
+
function inflateSync(buffer, opts) {
|
|
66287
|
+
return zlibBufferSync(new Inflate(opts), buffer);
|
|
66288
|
+
}
|
|
66289
|
+
module.exports = exports = inflateSync;
|
|
66290
|
+
exports.Inflate = Inflate;
|
|
66291
|
+
exports.createInflate = createInflate;
|
|
66292
|
+
exports.inflateSync = inflateSync;
|
|
66293
|
+
}));
|
|
66294
|
+
//#endregion
|
|
66295
|
+
//#region node_modules/.pnpm/pngjs@7.0.0/node_modules/pngjs/lib/sync-reader.js
|
|
66296
|
+
var require_sync_reader = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
66297
|
+
var SyncReader = module.exports = function(buffer) {
|
|
66298
|
+
this._buffer = buffer;
|
|
66299
|
+
this._reads = [];
|
|
66300
|
+
};
|
|
66301
|
+
SyncReader.prototype.read = function(length, callback) {
|
|
66302
|
+
this._reads.push({
|
|
66303
|
+
length: Math.abs(length),
|
|
66304
|
+
allowLess: length < 0,
|
|
66305
|
+
func: callback
|
|
66306
|
+
});
|
|
66307
|
+
};
|
|
66308
|
+
SyncReader.prototype.process = function() {
|
|
66309
|
+
while (this._reads.length > 0 && this._buffer.length) {
|
|
66310
|
+
let read = this._reads[0];
|
|
66311
|
+
if (this._buffer.length && (this._buffer.length >= read.length || read.allowLess)) {
|
|
66312
|
+
this._reads.shift();
|
|
66313
|
+
let buf = this._buffer;
|
|
66314
|
+
this._buffer = buf.slice(read.length);
|
|
66315
|
+
read.func.call(this, buf.slice(0, read.length));
|
|
66316
|
+
} else break;
|
|
66317
|
+
}
|
|
66318
|
+
if (this._reads.length > 0) throw new Error("There are some read requests waitng on finished stream");
|
|
66319
|
+
if (this._buffer.length > 0) throw new Error("unrecognised content at end of stream");
|
|
66320
|
+
};
|
|
66321
|
+
}));
|
|
66322
|
+
//#endregion
|
|
66323
|
+
//#region node_modules/.pnpm/pngjs@7.0.0/node_modules/pngjs/lib/filter-parse-sync.js
|
|
66324
|
+
var require_filter_parse_sync = /* @__PURE__ */ __commonJSMin(((exports) => {
|
|
66325
|
+
var SyncReader = require_sync_reader();
|
|
66326
|
+
var Filter = require_filter_parse();
|
|
66327
|
+
exports.process = function(inBuffer, bitmapInfo) {
|
|
66328
|
+
let outBuffers = [];
|
|
66329
|
+
let reader = new SyncReader(inBuffer);
|
|
66330
|
+
new Filter(bitmapInfo, {
|
|
66331
|
+
read: reader.read.bind(reader),
|
|
66332
|
+
write: function(bufferPart) {
|
|
66333
|
+
outBuffers.push(bufferPart);
|
|
66334
|
+
},
|
|
66335
|
+
complete: function() {}
|
|
66336
|
+
}).start();
|
|
66337
|
+
reader.process();
|
|
66338
|
+
return Buffer.concat(outBuffers);
|
|
66339
|
+
};
|
|
66340
|
+
}));
|
|
66341
|
+
//#endregion
|
|
66342
|
+
//#region node_modules/.pnpm/pngjs@7.0.0/node_modules/pngjs/lib/parser-sync.js
|
|
66343
|
+
var require_parser_sync = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
66344
|
+
var hasSyncZlib = true;
|
|
66345
|
+
var zlib$1 = require("zlib");
|
|
66346
|
+
var inflateSync = require_sync_inflate();
|
|
66347
|
+
if (!zlib$1.deflateSync) hasSyncZlib = false;
|
|
66348
|
+
var SyncReader = require_sync_reader();
|
|
66349
|
+
var FilterSync = require_filter_parse_sync();
|
|
66350
|
+
var Parser = require_parser();
|
|
66351
|
+
var bitmapper = require_bitmapper();
|
|
66352
|
+
var formatNormaliser = require_format_normaliser();
|
|
66353
|
+
module.exports = function(buffer, options) {
|
|
66354
|
+
if (!hasSyncZlib) throw new Error("To use the sync capability of this library in old node versions, please pin pngjs to v2.3.0");
|
|
66355
|
+
let err;
|
|
66356
|
+
function handleError(_err_) {
|
|
66357
|
+
err = _err_;
|
|
66358
|
+
}
|
|
66359
|
+
let metaData;
|
|
66360
|
+
function handleMetaData(_metaData_) {
|
|
66361
|
+
metaData = _metaData_;
|
|
66362
|
+
}
|
|
66363
|
+
function handleTransColor(transColor) {
|
|
66364
|
+
metaData.transColor = transColor;
|
|
66365
|
+
}
|
|
66366
|
+
function handlePalette(palette) {
|
|
66367
|
+
metaData.palette = palette;
|
|
66368
|
+
}
|
|
66369
|
+
function handleSimpleTransparency() {
|
|
66370
|
+
metaData.alpha = true;
|
|
66371
|
+
}
|
|
66372
|
+
let gamma;
|
|
66373
|
+
function handleGamma(_gamma_) {
|
|
66374
|
+
gamma = _gamma_;
|
|
66375
|
+
}
|
|
66376
|
+
let inflateDataList = [];
|
|
66377
|
+
function handleInflateData(inflatedData) {
|
|
66378
|
+
inflateDataList.push(inflatedData);
|
|
66379
|
+
}
|
|
66380
|
+
let reader = new SyncReader(buffer);
|
|
66381
|
+
new Parser(options, {
|
|
66382
|
+
read: reader.read.bind(reader),
|
|
66383
|
+
error: handleError,
|
|
66384
|
+
metadata: handleMetaData,
|
|
66385
|
+
gamma: handleGamma,
|
|
66386
|
+
palette: handlePalette,
|
|
66387
|
+
transColor: handleTransColor,
|
|
66388
|
+
inflateData: handleInflateData,
|
|
66389
|
+
simpleTransparency: handleSimpleTransparency
|
|
66390
|
+
}).start();
|
|
66391
|
+
reader.process();
|
|
66392
|
+
if (err) throw err;
|
|
66393
|
+
let inflateData = Buffer.concat(inflateDataList);
|
|
66394
|
+
inflateDataList.length = 0;
|
|
66395
|
+
let inflatedData;
|
|
66396
|
+
if (metaData.interlace) inflatedData = zlib$1.inflateSync(inflateData);
|
|
66397
|
+
else {
|
|
66398
|
+
let imageSize = ((metaData.width * metaData.bpp * metaData.depth + 7 >> 3) + 1) * metaData.height;
|
|
66399
|
+
inflatedData = inflateSync(inflateData, {
|
|
66400
|
+
chunkSize: imageSize,
|
|
66401
|
+
maxLength: imageSize
|
|
66402
|
+
});
|
|
66403
|
+
}
|
|
66404
|
+
inflateData = null;
|
|
66405
|
+
if (!inflatedData || !inflatedData.length) throw new Error("bad png - invalid inflate data response");
|
|
66406
|
+
let unfilteredData = FilterSync.process(inflatedData, metaData);
|
|
66407
|
+
inflateData = null;
|
|
66408
|
+
let bitmapData = bitmapper.dataToBitMap(unfilteredData, metaData);
|
|
66409
|
+
unfilteredData = null;
|
|
66410
|
+
let normalisedBitmapData = formatNormaliser(bitmapData, metaData, options.skipRescale);
|
|
66411
|
+
metaData.data = normalisedBitmapData;
|
|
66412
|
+
metaData.gamma = gamma || 0;
|
|
66413
|
+
return metaData;
|
|
66414
|
+
};
|
|
66415
|
+
}));
|
|
66416
|
+
//#endregion
|
|
66417
|
+
//#region node_modules/.pnpm/pngjs@7.0.0/node_modules/pngjs/lib/packer-sync.js
|
|
66418
|
+
var require_packer_sync = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
66419
|
+
var hasSyncZlib = true;
|
|
66420
|
+
var zlib = require("zlib");
|
|
66421
|
+
if (!zlib.deflateSync) hasSyncZlib = false;
|
|
66422
|
+
var constants = require_constants();
|
|
66423
|
+
var Packer = require_packer();
|
|
66424
|
+
module.exports = function(metaData, opt) {
|
|
66425
|
+
if (!hasSyncZlib) throw new Error("To use the sync capability of this library in old node versions, please pin pngjs to v2.3.0");
|
|
66426
|
+
let packer = new Packer(opt || {});
|
|
66427
|
+
let chunks = [];
|
|
66428
|
+
chunks.push(Buffer.from(constants.PNG_SIGNATURE));
|
|
66429
|
+
chunks.push(packer.packIHDR(metaData.width, metaData.height));
|
|
66430
|
+
if (metaData.gamma) chunks.push(packer.packGAMA(metaData.gamma));
|
|
66431
|
+
let filteredData = packer.filterData(metaData.data, metaData.width, metaData.height);
|
|
66432
|
+
let compressedData = zlib.deflateSync(filteredData, packer.getDeflateOptions());
|
|
66433
|
+
filteredData = null;
|
|
66434
|
+
if (!compressedData || !compressedData.length) throw new Error("bad png - invalid compressed data response");
|
|
66435
|
+
chunks.push(packer.packIDAT(compressedData));
|
|
66436
|
+
chunks.push(packer.packIEND());
|
|
66437
|
+
return Buffer.concat(chunks);
|
|
66438
|
+
};
|
|
66439
|
+
}));
|
|
66440
|
+
//#endregion
|
|
66441
|
+
//#region node_modules/.pnpm/pngjs@7.0.0/node_modules/pngjs/lib/png-sync.js
|
|
66442
|
+
var require_png_sync = /* @__PURE__ */ __commonJSMin(((exports) => {
|
|
66443
|
+
var parse = require_parser_sync();
|
|
66444
|
+
var pack = require_packer_sync();
|
|
66445
|
+
exports.read = function(buffer, options) {
|
|
66446
|
+
return parse(buffer, options || {});
|
|
66447
|
+
};
|
|
66448
|
+
exports.write = function(png, options) {
|
|
66449
|
+
return pack(png, options);
|
|
66450
|
+
};
|
|
66451
|
+
}));
|
|
66452
|
+
//#endregion
|
|
66453
|
+
//#region node_modules/.pnpm/pngjs@7.0.0/node_modules/pngjs/lib/png.js
|
|
66454
|
+
var require_png = /* @__PURE__ */ __commonJSMin(((exports) => {
|
|
66455
|
+
var util = require("util");
|
|
66456
|
+
var Stream$1 = require("stream");
|
|
66457
|
+
var Parser = require_parser_async();
|
|
66458
|
+
var Packer = require_packer_async();
|
|
66459
|
+
var PNGSync = require_png_sync();
|
|
66460
|
+
var PNG = exports.PNG = function(options) {
|
|
66461
|
+
Stream$1.call(this);
|
|
66462
|
+
options = options || {};
|
|
66463
|
+
this.width = options.width | 0;
|
|
66464
|
+
this.height = options.height | 0;
|
|
66465
|
+
this.data = this.width > 0 && this.height > 0 ? Buffer.alloc(4 * this.width * this.height) : null;
|
|
66466
|
+
if (options.fill && this.data) this.data.fill(0);
|
|
66467
|
+
this.gamma = 0;
|
|
66468
|
+
this.readable = this.writable = true;
|
|
66469
|
+
this._parser = new Parser(options);
|
|
66470
|
+
this._parser.on("error", this.emit.bind(this, "error"));
|
|
66471
|
+
this._parser.on("close", this._handleClose.bind(this));
|
|
66472
|
+
this._parser.on("metadata", this._metadata.bind(this));
|
|
66473
|
+
this._parser.on("gamma", this._gamma.bind(this));
|
|
66474
|
+
this._parser.on("parsed", function(data) {
|
|
66475
|
+
this.data = data;
|
|
66476
|
+
this.emit("parsed", data);
|
|
66477
|
+
}.bind(this));
|
|
66478
|
+
this._packer = new Packer(options);
|
|
66479
|
+
this._packer.on("data", this.emit.bind(this, "data"));
|
|
66480
|
+
this._packer.on("end", this.emit.bind(this, "end"));
|
|
66481
|
+
this._parser.on("close", this._handleClose.bind(this));
|
|
66482
|
+
this._packer.on("error", this.emit.bind(this, "error"));
|
|
66483
|
+
};
|
|
66484
|
+
util.inherits(PNG, Stream$1);
|
|
66485
|
+
PNG.sync = PNGSync;
|
|
66486
|
+
PNG.prototype.pack = function() {
|
|
66487
|
+
if (!this.data || !this.data.length) {
|
|
66488
|
+
this.emit("error", "No data provided");
|
|
66489
|
+
return this;
|
|
66490
|
+
}
|
|
66491
|
+
process.nextTick(function() {
|
|
66492
|
+
this._packer.pack(this.data, this.width, this.height, this.gamma);
|
|
66493
|
+
}.bind(this));
|
|
66494
|
+
return this;
|
|
66495
|
+
};
|
|
66496
|
+
PNG.prototype.parse = function(data, callback) {
|
|
66497
|
+
if (callback) {
|
|
66498
|
+
let onParsed, onError;
|
|
66499
|
+
onParsed = function(parsedData) {
|
|
66500
|
+
this.removeListener("error", onError);
|
|
66501
|
+
this.data = parsedData;
|
|
66502
|
+
callback(null, this);
|
|
66503
|
+
}.bind(this);
|
|
66504
|
+
onError = function(err) {
|
|
66505
|
+
this.removeListener("parsed", onParsed);
|
|
66506
|
+
callback(err, null);
|
|
66507
|
+
}.bind(this);
|
|
66508
|
+
this.once("parsed", onParsed);
|
|
66509
|
+
this.once("error", onError);
|
|
66510
|
+
}
|
|
66511
|
+
this.end(data);
|
|
66512
|
+
return this;
|
|
66513
|
+
};
|
|
66514
|
+
PNG.prototype.write = function(data) {
|
|
66515
|
+
this._parser.write(data);
|
|
66516
|
+
return true;
|
|
66517
|
+
};
|
|
66518
|
+
PNG.prototype.end = function(data) {
|
|
66519
|
+
this._parser.end(data);
|
|
66520
|
+
};
|
|
66521
|
+
PNG.prototype._metadata = function(metadata) {
|
|
66522
|
+
this.width = metadata.width;
|
|
66523
|
+
this.height = metadata.height;
|
|
66524
|
+
this.emit("metadata", metadata);
|
|
66525
|
+
};
|
|
66526
|
+
PNG.prototype._gamma = function(gamma) {
|
|
66527
|
+
this.gamma = gamma;
|
|
66528
|
+
};
|
|
66529
|
+
PNG.prototype._handleClose = function() {
|
|
66530
|
+
if (!this._parser.writable && !this._packer.readable) this.emit("close");
|
|
66531
|
+
};
|
|
66532
|
+
PNG.bitblt = function(src, dst, srcX, srcY, width, height, deltaX, deltaY) {
|
|
66533
|
+
srcX |= 0;
|
|
66534
|
+
srcY |= 0;
|
|
66535
|
+
width |= 0;
|
|
66536
|
+
height |= 0;
|
|
66537
|
+
deltaX |= 0;
|
|
66538
|
+
deltaY |= 0;
|
|
66539
|
+
if (srcX > src.width || srcY > src.height || srcX + width > src.width || srcY + height > src.height) throw new Error("bitblt reading outside image");
|
|
66540
|
+
if (deltaX > dst.width || deltaY > dst.height || deltaX + width > dst.width || deltaY + height > dst.height) throw new Error("bitblt writing outside image");
|
|
66541
|
+
for (let y = 0; y < height; y++) src.data.copy(dst.data, (deltaY + y) * dst.width + deltaX << 2, (srcY + y) * src.width + srcX << 2, (srcY + y) * src.width + srcX + width << 2);
|
|
66542
|
+
};
|
|
66543
|
+
PNG.prototype.bitblt = function(dst, srcX, srcY, width, height, deltaX, deltaY) {
|
|
66544
|
+
PNG.bitblt(this, dst, srcX, srcY, width, height, deltaX, deltaY);
|
|
66545
|
+
return this;
|
|
66546
|
+
};
|
|
66547
|
+
PNG.adjustGamma = function(src) {
|
|
66548
|
+
if (src.gamma) {
|
|
66549
|
+
for (let y = 0; y < src.height; y++) for (let x = 0; x < src.width; x++) {
|
|
66550
|
+
let idx = src.width * y + x << 2;
|
|
66551
|
+
for (let i = 0; i < 3; i++) {
|
|
66552
|
+
let sample = src.data[idx + i] / 255;
|
|
66553
|
+
sample = Math.pow(sample, 1 / 2.2 / src.gamma);
|
|
66554
|
+
src.data[idx + i] = Math.round(sample * 255);
|
|
66555
|
+
}
|
|
66556
|
+
}
|
|
66557
|
+
src.gamma = 0;
|
|
66558
|
+
}
|
|
66559
|
+
};
|
|
66560
|
+
PNG.prototype.adjustGamma = function() {
|
|
66561
|
+
PNG.adjustGamma(this);
|
|
66562
|
+
};
|
|
66563
|
+
}));
|
|
66564
|
+
//#endregion
|
|
62845
66565
|
//#region src/lib/output/binary.ts
|
|
66566
|
+
var import_jpeg_js = /* @__PURE__ */ __toESM(require_jpeg_js(), 1);
|
|
66567
|
+
var import_png = require_png();
|
|
62846
66568
|
function isGhostty() {
|
|
62847
|
-
if (process.env.GHOSTTY_RESOURCES_DIR) return true;
|
|
66569
|
+
if (process.env.GHOSTTY_RESOURCES_DIR || process.env.GHOSTTY_BIN_DIR || process.env.GHOSTTY_SHELL_FEATURES) return true;
|
|
62848
66570
|
if ((process.env.TERM ?? "").includes("ghostty")) return true;
|
|
62849
66571
|
return (process.env.TERM_PROGRAM ?? "").toLowerCase().includes("ghostty");
|
|
62850
66572
|
}
|
|
66573
|
+
function isKitty() {
|
|
66574
|
+
if (process.env.KITTY_WINDOW_ID || process.env.KITTY_PID) return true;
|
|
66575
|
+
if ((process.env.TERM ?? "").includes("xterm-kitty")) return true;
|
|
66576
|
+
return (process.env.TERM_PROGRAM ?? "").toLowerCase() === "kitty";
|
|
66577
|
+
}
|
|
62851
66578
|
function isWezTerm() {
|
|
62852
66579
|
if (process.env.WEZTERM_EXECUTABLE || process.env.WEZTERM_PANE) return true;
|
|
62853
66580
|
return (process.env.TERM_PROGRAM ?? "").toLowerCase().includes("wezterm");
|
|
62854
66581
|
}
|
|
62855
66582
|
function detectTerminalImageProtocol() {
|
|
62856
|
-
if (
|
|
66583
|
+
if (isKitty()) return "kitty";
|
|
62857
66584
|
if (isGhostty()) return "ghostty";
|
|
62858
66585
|
if (isWezTerm()) return "wezterm";
|
|
62859
66586
|
if (process.env.TERM_PROGRAM === "iTerm.app" || process.env.ITERM_SESSION_ID) return "iterm2";
|
|
@@ -62866,6 +66593,31 @@ function isImageBody(body) {
|
|
|
62866
66593
|
if (!body || body.type !== "text" && body.type !== "binary") return false;
|
|
62867
66594
|
return (body.mediaType?.toLowerCase() ?? "").startsWith("image/");
|
|
62868
66595
|
}
|
|
66596
|
+
function isPngImage(body) {
|
|
66597
|
+
if ((body.mediaType?.toLowerCase() ?? "") === "image/png") return true;
|
|
66598
|
+
return body.content.startsWith("iVBORw0KGgo");
|
|
66599
|
+
}
|
|
66600
|
+
function isJpegImage(body) {
|
|
66601
|
+
const mediaType = body.mediaType?.toLowerCase() ?? "";
|
|
66602
|
+
if (mediaType === "image/jpeg" || mediaType === "image/jpg") return true;
|
|
66603
|
+
return body.content.startsWith("/9j/");
|
|
66604
|
+
}
|
|
66605
|
+
function usesKittyGraphicsProtocol(protocol) {
|
|
66606
|
+
return protocol === "kitty" || protocol === "ghostty";
|
|
66607
|
+
}
|
|
66608
|
+
function convertJpegBase64ToPngBase64(base64) {
|
|
66609
|
+
try {
|
|
66610
|
+
const decoded = import_jpeg_js.default.decode(Buffer.from(base64, "base64"));
|
|
66611
|
+
const png = new import_png.PNG({
|
|
66612
|
+
width: decoded.width,
|
|
66613
|
+
height: decoded.height
|
|
66614
|
+
});
|
|
66615
|
+
png.data = decoded.data;
|
|
66616
|
+
return import_png.PNG.sync.write(png).toString("base64");
|
|
66617
|
+
} catch {
|
|
66618
|
+
return null;
|
|
66619
|
+
}
|
|
66620
|
+
}
|
|
62869
66621
|
function formatByteSize(bytes) {
|
|
62870
66622
|
if (!Number.isFinite(bytes) || bytes < 0) return `${bytes} B`;
|
|
62871
66623
|
if (bytes < 1024) return `${bytes} B`;
|
|
@@ -62876,10 +66628,16 @@ function formatByteSize(bytes) {
|
|
|
62876
66628
|
function kittyImageEscape(base64) {
|
|
62877
66629
|
const CHUNK = 4096;
|
|
62878
66630
|
let out = "";
|
|
62879
|
-
|
|
62880
|
-
|
|
62881
|
-
|
|
62882
|
-
|
|
66631
|
+
let offset = 0;
|
|
66632
|
+
let first = true;
|
|
66633
|
+
while (offset < base64.length) {
|
|
66634
|
+
const chunk = base64.slice(offset, offset + CHUNK);
|
|
66635
|
+
offset += CHUNK;
|
|
66636
|
+
const more = offset < base64.length ? 1 : 0;
|
|
66637
|
+
if (first) {
|
|
66638
|
+
out += `\u001b_Ga=T,f=100,m=${more};${chunk}\u001b\\`;
|
|
66639
|
+
first = false;
|
|
66640
|
+
} else out += `\u001b_Gm=${more};${chunk}\u001b\\`;
|
|
62883
66641
|
}
|
|
62884
66642
|
return out;
|
|
62885
66643
|
}
|
|
@@ -62890,8 +66648,21 @@ function renderImageInline(body) {
|
|
|
62890
66648
|
const protocol = detectTerminalImageProtocol();
|
|
62891
66649
|
if (!protocol) return null;
|
|
62892
66650
|
if (body.encoding !== "base64") return null;
|
|
62893
|
-
if (protocol
|
|
62894
|
-
|
|
66651
|
+
if (usesKittyGraphicsProtocol(protocol)) {
|
|
66652
|
+
let base64 = body.content;
|
|
66653
|
+
let convertedFrom;
|
|
66654
|
+
if (!isPngImage(body) && isJpegImage(body)) {
|
|
66655
|
+
const pngBase64 = convertJpegBase64ToPngBase64(body.content);
|
|
66656
|
+
if (!pngBase64) return null;
|
|
66657
|
+
base64 = pngBase64;
|
|
66658
|
+
convertedFrom = "jpeg";
|
|
66659
|
+
}
|
|
66660
|
+
return {
|
|
66661
|
+
content: kittyImageEscape(base64),
|
|
66662
|
+
convertedFrom
|
|
66663
|
+
};
|
|
66664
|
+
}
|
|
66665
|
+
if (protocol === "iterm2" || protocol === "wezterm") return { content: iterm2ImageEscape(body.content, body.byteLength) };
|
|
62895
66666
|
return null;
|
|
62896
66667
|
}
|
|
62897
66668
|
//#endregion
|
|
@@ -63121,7 +66892,12 @@ function formatBody(body) {
|
|
|
63121
66892
|
const mediaType = body.mediaType ?? "application/octet-stream";
|
|
63122
66893
|
if (isImageBody(body)) {
|
|
63123
66894
|
const rendered = renderImageInline(body);
|
|
63124
|
-
if (rendered)
|
|
66895
|
+
if (rendered) {
|
|
66896
|
+
const parts = [];
|
|
66897
|
+
if (rendered.convertedFrom === "jpeg") parts.push(import_picocolors.default.yellow("! Converted JPEG to PNG for terminal compatibility"));
|
|
66898
|
+
parts.push(rendered.content);
|
|
66899
|
+
return parts.join("\n");
|
|
66900
|
+
}
|
|
63125
66901
|
}
|
|
63126
66902
|
return import_picocolors.default.dim(`Binary response body omitted (${mediaType}, ${formatByteSize(body.byteLength)})`);
|
|
63127
66903
|
}
|
|
@@ -63171,10 +66947,14 @@ function formatScriptOutput(lines, requestFile) {
|
|
|
63171
66947
|
}
|
|
63172
66948
|
return parts.join("\n");
|
|
63173
66949
|
}
|
|
63174
|
-
function
|
|
66950
|
+
function formatStatusLine(status, httpVersion, failed = false) {
|
|
66951
|
+
const label = httpVersion ? `${httpVersion} ${status}` : `HTTP ${status}`;
|
|
66952
|
+
return failed ? import_picocolors.default.red(label) : statusColor(status)(label);
|
|
66953
|
+
}
|
|
66954
|
+
function formatRequestHeader(method, url, status, durationMs, failed = false, httpVersion) {
|
|
63175
66955
|
const lines = [`${import_picocolors.default.bold(method)} ${url}`];
|
|
63176
66956
|
if (status !== void 0) {
|
|
63177
|
-
const statusText =
|
|
66957
|
+
const statusText = formatStatusLine(status, httpVersion, failed);
|
|
63178
66958
|
const duration = durationMs !== void 0 ? import_picocolors.default.dim(` · ${formatMs(durationMs)}`) : "";
|
|
63179
66959
|
lines.push(`${statusText}${duration}`);
|
|
63180
66960
|
}
|
|
@@ -63210,7 +66990,7 @@ function formatItem(item, requestFile) {
|
|
|
63210
66990
|
return parts.join("\n");
|
|
63211
66991
|
}
|
|
63212
66992
|
if (isErrorResponse(item)) {
|
|
63213
|
-
const parts = [header + formatRequestHeader(item.request?.method ?? "GET", item.url ?? item.blockName ?? "unknown", item.status, void 0, true)];
|
|
66993
|
+
const parts = [header + formatRequestHeader(item.request?.method ?? "GET", item.url ?? item.blockName ?? "unknown", item.status, void 0, true, item.httpVersion)];
|
|
63214
66994
|
if (item.error) parts.push(import_picocolors.default.red(`Error: ${item.error}`));
|
|
63215
66995
|
const bodySection = formatBody(item.body);
|
|
63216
66996
|
if (bodySection) {
|
|
@@ -63221,7 +67001,7 @@ function formatItem(item, requestFile) {
|
|
|
63221
67001
|
return parts.join("\n");
|
|
63222
67002
|
}
|
|
63223
67003
|
if (isSuccessResponse(item)) {
|
|
63224
|
-
const parts = [header + formatRequestHeader(item.request?.method ?? "GET", item.url, item.status, item.timings?.total)];
|
|
67004
|
+
const parts = [header + formatRequestHeader(item.request?.method ?? "GET", item.url, item.status, item.timings?.total, false, item.httpVersion)];
|
|
63225
67005
|
if (Object.keys(item.headers).length > 0) {
|
|
63226
67006
|
parts.push("");
|
|
63227
67007
|
parts.push(formatSection("Headers", formatHeaders(item.headers)));
|