ag-psd 15.0.4 → 15.0.5
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/package.json +1 -1
- package/src/abr.ts +540 -0
- package/src/additionalInfo.ts +2688 -0
- package/src/csh.ts +44 -0
- package/src/descriptor.ts +1804 -0
- package/src/effectsHelpers.ts +305 -0
- package/src/engineData.ts +359 -0
- package/src/helpers.ts +387 -0
- package/src/imageResources.ts +1439 -0
- package/src/index.ts +44 -0
- package/src/initializeCanvas.ts +25 -0
- package/src/jpeg.ts +1166 -0
- package/src/psd.ts +1184 -0
- package/src/psdReader.ts +1091 -0
- package/src/psdWriter.ts +754 -0
- package/src/text.ts +751 -0
- package/src/utf8.ts +160 -0
package/src/psd.ts
ADDED
|
@@ -0,0 +1,1184 @@
|
|
|
1
|
+
export type BlendMode = 'pass through' | 'normal' | 'dissolve' | 'darken' | 'multiply' |
|
|
2
|
+
'color burn' | 'linear burn' | 'darker color' | 'lighten' | 'screen' | 'color dodge' |
|
|
3
|
+
'linear dodge' | 'lighter color' | 'overlay' | 'soft light' | 'hard light' |
|
|
4
|
+
'vivid light' | 'linear light' | 'pin light' | 'hard mix' | 'difference' | 'exclusion' |
|
|
5
|
+
'subtract' | 'divide' | 'hue' | 'saturation' | 'color' | 'luminosity';
|
|
6
|
+
|
|
7
|
+
export const enum ColorMode {
|
|
8
|
+
Bitmap = 0,
|
|
9
|
+
Grayscale = 1,
|
|
10
|
+
Indexed = 2,
|
|
11
|
+
RGB = 3,
|
|
12
|
+
CMYK = 4,
|
|
13
|
+
Multichannel = 7,
|
|
14
|
+
Duotone = 8,
|
|
15
|
+
Lab = 9,
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export const enum SectionDividerType {
|
|
19
|
+
Other = 0,
|
|
20
|
+
OpenFolder = 1,
|
|
21
|
+
ClosedFolder = 2,
|
|
22
|
+
BoundingSectionDivider = 3,
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export type RGBA = { r: number; g: number; b: number; a: number; }; // values from 0 to 255
|
|
26
|
+
export type RGB = { r: number; g: number; b: number; }; // values from 0 to 255
|
|
27
|
+
export type HSB = { h: number; s: number; b: number; }; // values from 0 to 1
|
|
28
|
+
export type CMYK = { c: number; m: number; y: number; k: number; }; // values from 0 to 255
|
|
29
|
+
export type LAB = { l: number; a: number; b: number; }; // values `l` from 0 to 1; `a` and `b` from -1 to 1
|
|
30
|
+
export type Grayscale = { k: number }; // values from 0 to 255
|
|
31
|
+
export type Color = RGBA | RGB | HSB | CMYK | LAB | Grayscale;
|
|
32
|
+
|
|
33
|
+
export interface EffectContour {
|
|
34
|
+
name: string;
|
|
35
|
+
curve: { x: number; y: number; }[];
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
export interface EffectPattern {
|
|
39
|
+
name: string;
|
|
40
|
+
id: string;
|
|
41
|
+
// TODO: add fields
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
export interface LayerEffectShadow {
|
|
45
|
+
present?: boolean;
|
|
46
|
+
showInDialog?: boolean;
|
|
47
|
+
enabled?: boolean;
|
|
48
|
+
size?: UnitsValue;
|
|
49
|
+
angle?: number;
|
|
50
|
+
distance?: UnitsValue;
|
|
51
|
+
color?: Color;
|
|
52
|
+
blendMode?: BlendMode;
|
|
53
|
+
opacity?: number;
|
|
54
|
+
useGlobalLight?: boolean;
|
|
55
|
+
antialiased?: boolean;
|
|
56
|
+
contour?: EffectContour;
|
|
57
|
+
choke?: UnitsValue; // spread
|
|
58
|
+
layerConceals?: boolean; // only drop shadow
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
export interface LayerEffectsOuterGlow {
|
|
62
|
+
present?: boolean;
|
|
63
|
+
showInDialog?: boolean;
|
|
64
|
+
enabled?: boolean;
|
|
65
|
+
size?: UnitsValue;
|
|
66
|
+
color?: Color;
|
|
67
|
+
blendMode?: BlendMode;
|
|
68
|
+
opacity?: number;
|
|
69
|
+
source?: GlowSource;
|
|
70
|
+
antialiased?: boolean;
|
|
71
|
+
noise?: number;
|
|
72
|
+
range?: number;
|
|
73
|
+
choke?: UnitsValue;
|
|
74
|
+
jitter?: number;
|
|
75
|
+
contour?: EffectContour;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
export interface LayerEffectInnerGlow {
|
|
79
|
+
present?: boolean;
|
|
80
|
+
showInDialog?: boolean;
|
|
81
|
+
enabled?: boolean;
|
|
82
|
+
size?: UnitsValue;
|
|
83
|
+
color?: Color;
|
|
84
|
+
blendMode?: BlendMode;
|
|
85
|
+
opacity?: number;
|
|
86
|
+
source?: GlowSource;
|
|
87
|
+
technique?: GlowTechnique;
|
|
88
|
+
antialiased?: boolean;
|
|
89
|
+
noise?: number;
|
|
90
|
+
range?: number;
|
|
91
|
+
choke?: UnitsValue; // spread
|
|
92
|
+
jitter?: number;
|
|
93
|
+
contour?: EffectContour;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
export interface LayerEffectBevel {
|
|
97
|
+
present?: boolean;
|
|
98
|
+
showInDialog?: boolean;
|
|
99
|
+
enabled?: boolean;
|
|
100
|
+
size?: UnitsValue;
|
|
101
|
+
angle?: number;
|
|
102
|
+
strength?: number; // depth
|
|
103
|
+
highlightBlendMode?: BlendMode;
|
|
104
|
+
shadowBlendMode?: BlendMode;
|
|
105
|
+
highlightColor?: Color;
|
|
106
|
+
shadowColor?: Color;
|
|
107
|
+
style?: BevelStyle;
|
|
108
|
+
highlightOpacity?: number;
|
|
109
|
+
shadowOpacity?: number;
|
|
110
|
+
soften?: UnitsValue;
|
|
111
|
+
useGlobalLight?: boolean;
|
|
112
|
+
altitude?: number;
|
|
113
|
+
technique?: BevelTechnique;
|
|
114
|
+
direction?: BevelDirection;
|
|
115
|
+
useTexture?: boolean;
|
|
116
|
+
useShape?: boolean;
|
|
117
|
+
antialiasGloss?: boolean;
|
|
118
|
+
contour?: EffectContour;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
export interface LayerEffectSolidFill {
|
|
122
|
+
present?: boolean;
|
|
123
|
+
showInDialog?: boolean;
|
|
124
|
+
enabled?: boolean;
|
|
125
|
+
blendMode?: BlendMode;
|
|
126
|
+
color?: Color;
|
|
127
|
+
opacity?: number;
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
export interface LayerEffectStroke {
|
|
131
|
+
present?: boolean;
|
|
132
|
+
showInDialog?: boolean;
|
|
133
|
+
enabled?: boolean;
|
|
134
|
+
overprint?: boolean;
|
|
135
|
+
size?: UnitsValue;
|
|
136
|
+
position?: 'inside' | 'center' | 'outside';
|
|
137
|
+
fillType?: 'color' | 'gradient' | 'pattern';
|
|
138
|
+
blendMode?: BlendMode;
|
|
139
|
+
opacity?: number;
|
|
140
|
+
color?: Color;
|
|
141
|
+
gradient?: (EffectSolidGradient | EffectNoiseGradient) & ExtraGradientInfo;
|
|
142
|
+
pattern?: EffectPattern & {}; // TODO: additional pattern info
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
export interface LayerEffectSatin {
|
|
146
|
+
present?: boolean;
|
|
147
|
+
showInDialog?: boolean;
|
|
148
|
+
enabled?: boolean;
|
|
149
|
+
size?: UnitsValue;
|
|
150
|
+
blendMode?: BlendMode;
|
|
151
|
+
color?: Color;
|
|
152
|
+
antialiased?: boolean;
|
|
153
|
+
opacity?: number;
|
|
154
|
+
distance?: UnitsValue;
|
|
155
|
+
invert?: boolean;
|
|
156
|
+
angle?: number;
|
|
157
|
+
contour?: EffectContour;
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
// not supported yet because of `Patt` section not implemented
|
|
161
|
+
export interface LayerEffectPatternOverlay {
|
|
162
|
+
present?: boolean;
|
|
163
|
+
showInDialog?: boolean;
|
|
164
|
+
enabled?: boolean;
|
|
165
|
+
blendMode?: BlendMode;
|
|
166
|
+
opacity?: number;
|
|
167
|
+
scale?: number;
|
|
168
|
+
pattern?: EffectPattern;
|
|
169
|
+
phase?: { x: number; y: number; };
|
|
170
|
+
align?: boolean;
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
export interface EffectSolidGradient {
|
|
174
|
+
name: string;
|
|
175
|
+
type: 'solid';
|
|
176
|
+
smoothness?: number;
|
|
177
|
+
colorStops: ColorStop[];
|
|
178
|
+
opacityStops: OpacityStop[];
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
export interface EffectNoiseGradient {
|
|
182
|
+
name: string;
|
|
183
|
+
type: 'noise';
|
|
184
|
+
roughness?: number;
|
|
185
|
+
colorModel?: 'rgb' | 'hsb' | 'lab';
|
|
186
|
+
randomSeed?: number;
|
|
187
|
+
restrictColors?: boolean;
|
|
188
|
+
addTransparency?: boolean;
|
|
189
|
+
min: number[];
|
|
190
|
+
max: number[];
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
export interface LayerEffectGradientOverlay {
|
|
194
|
+
present?: boolean;
|
|
195
|
+
showInDialog?: boolean;
|
|
196
|
+
enabled?: boolean;
|
|
197
|
+
blendMode?: string;
|
|
198
|
+
opacity?: number;
|
|
199
|
+
align?: boolean;
|
|
200
|
+
scale?: number;
|
|
201
|
+
dither?: boolean;
|
|
202
|
+
reverse?: boolean;
|
|
203
|
+
type?: GradientStyle;
|
|
204
|
+
offset?: { x: number; y: number; };
|
|
205
|
+
gradient?: EffectSolidGradient | EffectNoiseGradient;
|
|
206
|
+
interpolationMethod?: InterpolationMethod;
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
export interface LayerEffectsInfo {
|
|
210
|
+
disabled?: boolean;
|
|
211
|
+
scale?: number;
|
|
212
|
+
dropShadow?: LayerEffectShadow[];
|
|
213
|
+
innerShadow?: LayerEffectShadow[];
|
|
214
|
+
outerGlow?: LayerEffectsOuterGlow;
|
|
215
|
+
innerGlow?: LayerEffectInnerGlow;
|
|
216
|
+
bevel?: LayerEffectBevel;
|
|
217
|
+
solidFill?: LayerEffectSolidFill[];
|
|
218
|
+
satin?: LayerEffectSatin;
|
|
219
|
+
stroke?: LayerEffectStroke[];
|
|
220
|
+
gradientOverlay?: LayerEffectGradientOverlay[];
|
|
221
|
+
patternOverlay?: LayerEffectPatternOverlay; // not supported yet because of `Patt` section not implemented
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
export interface LayerMaskData {
|
|
225
|
+
top?: number;
|
|
226
|
+
left?: number;
|
|
227
|
+
bottom?: number;
|
|
228
|
+
right?: number;
|
|
229
|
+
defaultColor?: number;
|
|
230
|
+
disabled?: boolean;
|
|
231
|
+
positionRelativeToLayer?: boolean;
|
|
232
|
+
fromVectorData?: boolean; // set to true if the mask is generated from vector data, false if it's a bitmap provided by user
|
|
233
|
+
userMaskDensity?: number;
|
|
234
|
+
userMaskFeather?: number; // px
|
|
235
|
+
vectorMaskDensity?: number;
|
|
236
|
+
vectorMaskFeather?: number;
|
|
237
|
+
canvas?: HTMLCanvasElement;
|
|
238
|
+
imageData?: ImageData;
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
export type TextGridding = 'none' | 'round'; // TODO: other values (no idea where to set it up in Photoshop)
|
|
242
|
+
export type Orientation = 'horizontal' | 'vertical';
|
|
243
|
+
export type AntiAlias = 'none' | 'sharp' | 'crisp' | 'strong' | 'smooth' | 'platform' | 'platformLCD';
|
|
244
|
+
export type WarpStyle =
|
|
245
|
+
'none' | 'arc' | 'arcLower' | 'arcUpper' | 'arch' | 'bulge' | 'shellLower' | 'shellUpper' | 'flag' |
|
|
246
|
+
'wave' | 'fish' | 'rise' | 'fisheye' | 'inflate' | 'squeeze' | 'twist' | 'custom' | 'cylinder';
|
|
247
|
+
export type BevelStyle = 'outer bevel' | 'inner bevel' | 'emboss' | 'pillow emboss' | 'stroke emboss';
|
|
248
|
+
export type BevelTechnique = 'smooth' | 'chisel hard' | 'chisel soft';
|
|
249
|
+
export type BevelDirection = 'up' | 'down';
|
|
250
|
+
export type GlowTechnique = 'softer' | 'precise';
|
|
251
|
+
export type GlowSource = 'edge' | 'center';
|
|
252
|
+
export type GradientStyle = 'linear' | 'radial' | 'angle' | 'reflected' | 'diamond';
|
|
253
|
+
export type Justification = 'left' | 'right' | 'center';
|
|
254
|
+
export type LineCapType = 'butt' | 'round' | 'square';
|
|
255
|
+
export type LineJoinType = 'miter' | 'round' | 'bevel';
|
|
256
|
+
export type LineAlignment = 'inside' | 'center' | 'outside';
|
|
257
|
+
export type InterpolationMethod = 'classic' | 'perceptual' | 'linear';
|
|
258
|
+
|
|
259
|
+
export interface Warp {
|
|
260
|
+
style?: WarpStyle;
|
|
261
|
+
value?: number;
|
|
262
|
+
values?: number[];
|
|
263
|
+
perspective?: number;
|
|
264
|
+
perspectiveOther?: number;
|
|
265
|
+
rotate?: Orientation;
|
|
266
|
+
// for custom warps
|
|
267
|
+
bounds?: { top: UnitsValue; left: UnitsValue; bottom: UnitsValue; right: UnitsValue; };
|
|
268
|
+
uOrder?: number;
|
|
269
|
+
vOrder?: number;
|
|
270
|
+
deformNumRows?: number;
|
|
271
|
+
deformNumCols?: number;
|
|
272
|
+
customEnvelopeWarp?: {
|
|
273
|
+
quiltSliceX?: number[];
|
|
274
|
+
quiltSliceY?: number[];
|
|
275
|
+
// 16 points from top left to bottom right, rows first, all points are relative to the first point
|
|
276
|
+
meshPoints: { x: number; y: number; }[];
|
|
277
|
+
};
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
export interface Animations {
|
|
281
|
+
frames: {
|
|
282
|
+
id: number;
|
|
283
|
+
delay: number;
|
|
284
|
+
dispose?: 'auto' | 'none' | 'dispose';
|
|
285
|
+
}[];
|
|
286
|
+
animations: {
|
|
287
|
+
id: number;
|
|
288
|
+
frames: number[];
|
|
289
|
+
repeats?: number;
|
|
290
|
+
activeFrame?: number;
|
|
291
|
+
}[];
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
export interface Font {
|
|
295
|
+
name: string;
|
|
296
|
+
script?: number;
|
|
297
|
+
type?: number;
|
|
298
|
+
synthetic?: number;
|
|
299
|
+
}
|
|
300
|
+
|
|
301
|
+
export interface ParagraphStyle {
|
|
302
|
+
justification?: Justification;
|
|
303
|
+
firstLineIndent?: number;
|
|
304
|
+
startIndent?: number;
|
|
305
|
+
endIndent?: number;
|
|
306
|
+
spaceBefore?: number;
|
|
307
|
+
spaceAfter?: number;
|
|
308
|
+
autoHyphenate?: boolean;
|
|
309
|
+
hyphenatedWordSize?: number;
|
|
310
|
+
preHyphen?: number;
|
|
311
|
+
postHyphen?: number;
|
|
312
|
+
consecutiveHyphens?: number;
|
|
313
|
+
zone?: number;
|
|
314
|
+
wordSpacing?: number[];
|
|
315
|
+
letterSpacing?: number[];
|
|
316
|
+
glyphSpacing?: number[];
|
|
317
|
+
autoLeading?: number;
|
|
318
|
+
leadingType?: number;
|
|
319
|
+
hanging?: boolean;
|
|
320
|
+
burasagari?: boolean;
|
|
321
|
+
kinsokuOrder?: number;
|
|
322
|
+
everyLineComposer?: boolean;
|
|
323
|
+
}
|
|
324
|
+
|
|
325
|
+
export interface ParagraphStyleRun {
|
|
326
|
+
length: number;
|
|
327
|
+
style: ParagraphStyle;
|
|
328
|
+
}
|
|
329
|
+
|
|
330
|
+
export interface TextStyle {
|
|
331
|
+
font?: Font;
|
|
332
|
+
fontSize?: number;
|
|
333
|
+
fauxBold?: boolean;
|
|
334
|
+
fauxItalic?: boolean;
|
|
335
|
+
autoLeading?: boolean;
|
|
336
|
+
leading?: number;
|
|
337
|
+
horizontalScale?: number;
|
|
338
|
+
verticalScale?: number;
|
|
339
|
+
tracking?: number;
|
|
340
|
+
autoKerning?: boolean;
|
|
341
|
+
kerning?: number;
|
|
342
|
+
baselineShift?: number;
|
|
343
|
+
fontCaps?: number; // 0 - none, 1 - small caps, 2 - all caps
|
|
344
|
+
fontBaseline?: number; // 0 - normal, 1 - superscript, 2 - subscript
|
|
345
|
+
underline?: boolean;
|
|
346
|
+
strikethrough?: boolean;
|
|
347
|
+
ligatures?: boolean;
|
|
348
|
+
dLigatures?: boolean;
|
|
349
|
+
baselineDirection?: number;
|
|
350
|
+
tsume?: number;
|
|
351
|
+
styleRunAlignment?: number;
|
|
352
|
+
language?: number;
|
|
353
|
+
noBreak?: boolean;
|
|
354
|
+
fillColor?: Color;
|
|
355
|
+
strokeColor?: Color;
|
|
356
|
+
fillFlag?: boolean;
|
|
357
|
+
strokeFlag?: boolean;
|
|
358
|
+
fillFirst?: boolean;
|
|
359
|
+
yUnderline?: number;
|
|
360
|
+
outlineWidth?: number;
|
|
361
|
+
characterDirection?: number;
|
|
362
|
+
hindiNumbers?: boolean;
|
|
363
|
+
kashida?: number;
|
|
364
|
+
diacriticPos?: number;
|
|
365
|
+
}
|
|
366
|
+
|
|
367
|
+
export interface TextStyleRun {
|
|
368
|
+
length: number;
|
|
369
|
+
style: TextStyle;
|
|
370
|
+
}
|
|
371
|
+
|
|
372
|
+
export interface TextGridInfo {
|
|
373
|
+
isOn?: boolean;
|
|
374
|
+
show?: boolean;
|
|
375
|
+
size?: number;
|
|
376
|
+
leading?: number;
|
|
377
|
+
color?: Color;
|
|
378
|
+
leadingFillColor?: Color;
|
|
379
|
+
alignLineHeightToGridFlags?: boolean;
|
|
380
|
+
}
|
|
381
|
+
|
|
382
|
+
export interface LayerTextData {
|
|
383
|
+
text: string;
|
|
384
|
+
transform?: number[]; // 2d transform matrix [xx, xy, yx, yy, tx, ty]
|
|
385
|
+
antiAlias?: AntiAlias;
|
|
386
|
+
gridding?: TextGridding;
|
|
387
|
+
orientation?: Orientation;
|
|
388
|
+
index?: number;
|
|
389
|
+
warp?: Warp;
|
|
390
|
+
top?: number;
|
|
391
|
+
left?: number;
|
|
392
|
+
bottom?: number;
|
|
393
|
+
right?: number;
|
|
394
|
+
|
|
395
|
+
gridInfo?: TextGridInfo;
|
|
396
|
+
useFractionalGlyphWidths?: boolean;
|
|
397
|
+
style?: TextStyle; // base style
|
|
398
|
+
styleRuns?: TextStyleRun[]; // spans of different style
|
|
399
|
+
paragraphStyle?: ParagraphStyle; // base paragraph style
|
|
400
|
+
paragraphStyleRuns?: ParagraphStyleRun[]; // style for each line
|
|
401
|
+
|
|
402
|
+
superscriptSize?: number;
|
|
403
|
+
superscriptPosition?: number;
|
|
404
|
+
subscriptSize?: number;
|
|
405
|
+
subscriptPosition?: number;
|
|
406
|
+
smallCapSize?: number;
|
|
407
|
+
|
|
408
|
+
shapeType?: 'point' | 'box';
|
|
409
|
+
pointBase?: number[];
|
|
410
|
+
boxBounds?: number[];
|
|
411
|
+
}
|
|
412
|
+
|
|
413
|
+
export interface PatternInfo {
|
|
414
|
+
name: string;
|
|
415
|
+
id: string;
|
|
416
|
+
x: number;
|
|
417
|
+
y: number;
|
|
418
|
+
bounds: { x: number; y: number; w: number, h: number; };
|
|
419
|
+
data: Uint8Array;
|
|
420
|
+
}
|
|
421
|
+
|
|
422
|
+
export interface BezierKnot {
|
|
423
|
+
linked: boolean;
|
|
424
|
+
points: number[]; // x0, y0, x1, y1, x2, y2
|
|
425
|
+
}
|
|
426
|
+
|
|
427
|
+
export type BooleanOperation = 'exclude' | 'combine' | 'subtract' | 'intersect';
|
|
428
|
+
|
|
429
|
+
export interface BezierPath {
|
|
430
|
+
open: boolean;
|
|
431
|
+
operation: BooleanOperation;
|
|
432
|
+
knots: BezierKnot[];
|
|
433
|
+
}
|
|
434
|
+
|
|
435
|
+
export interface ExtraGradientInfo {
|
|
436
|
+
style?: GradientStyle;
|
|
437
|
+
scale?: number;
|
|
438
|
+
angle?: number;
|
|
439
|
+
dither?: boolean;
|
|
440
|
+
reverse?: boolean;
|
|
441
|
+
align?: boolean;
|
|
442
|
+
offset?: { x: number; y: number; };
|
|
443
|
+
}
|
|
444
|
+
|
|
445
|
+
export interface ExtraPatternInfo {
|
|
446
|
+
linked?: boolean;
|
|
447
|
+
phase?: { x: number; y: number; };
|
|
448
|
+
}
|
|
449
|
+
|
|
450
|
+
export type VectorContent = { type: 'color'; color: Color; } |
|
|
451
|
+
(EffectSolidGradient & ExtraGradientInfo) |
|
|
452
|
+
(EffectNoiseGradient & ExtraGradientInfo) |
|
|
453
|
+
(EffectPattern & { type: 'pattern'; } & ExtraPatternInfo);
|
|
454
|
+
|
|
455
|
+
export type RenderingIntent = 'perceptual' | 'saturation' | 'relative colorimetric' | 'absolute colorimetric';
|
|
456
|
+
|
|
457
|
+
export type Units = 'Pixels' | 'Points' | 'Picas' | 'Millimeters' | 'Centimeters' | 'Inches' | 'None' | 'Density';
|
|
458
|
+
|
|
459
|
+
export interface UnitsValue {
|
|
460
|
+
units: Units;
|
|
461
|
+
value: number;
|
|
462
|
+
}
|
|
463
|
+
|
|
464
|
+
export interface BrightnessAdjustment {
|
|
465
|
+
type: 'brightness/contrast';
|
|
466
|
+
brightness?: number;
|
|
467
|
+
contrast?: number;
|
|
468
|
+
meanValue?: number;
|
|
469
|
+
useLegacy?: boolean;
|
|
470
|
+
labColorOnly?: boolean;
|
|
471
|
+
auto?: boolean;
|
|
472
|
+
}
|
|
473
|
+
|
|
474
|
+
export interface LevelsAdjustmentChannel {
|
|
475
|
+
shadowInput: number;
|
|
476
|
+
highlightInput: number;
|
|
477
|
+
shadowOutput: number;
|
|
478
|
+
highlightOutput: number;
|
|
479
|
+
midtoneInput: number;
|
|
480
|
+
}
|
|
481
|
+
|
|
482
|
+
export interface PresetInfo {
|
|
483
|
+
presetKind?: number;
|
|
484
|
+
presetFileName?: string;
|
|
485
|
+
}
|
|
486
|
+
|
|
487
|
+
export interface LevelsAdjustment extends PresetInfo {
|
|
488
|
+
type: 'levels';
|
|
489
|
+
rgb?: LevelsAdjustmentChannel;
|
|
490
|
+
red?: LevelsAdjustmentChannel;
|
|
491
|
+
green?: LevelsAdjustmentChannel;
|
|
492
|
+
blue?: LevelsAdjustmentChannel;
|
|
493
|
+
}
|
|
494
|
+
|
|
495
|
+
export type CurvesAdjustmentChannel = { input: number; output: number; }[];
|
|
496
|
+
|
|
497
|
+
export interface CurvesAdjustment extends PresetInfo {
|
|
498
|
+
type: 'curves';
|
|
499
|
+
rgb?: CurvesAdjustmentChannel;
|
|
500
|
+
red?: CurvesAdjustmentChannel;
|
|
501
|
+
green?: CurvesAdjustmentChannel;
|
|
502
|
+
blue?: CurvesAdjustmentChannel;
|
|
503
|
+
}
|
|
504
|
+
|
|
505
|
+
export interface ExposureAdjustment extends PresetInfo {
|
|
506
|
+
type: 'exposure';
|
|
507
|
+
exposure?: number;
|
|
508
|
+
offset?: number;
|
|
509
|
+
gamma?: number;
|
|
510
|
+
}
|
|
511
|
+
|
|
512
|
+
export interface VibranceAdjustment {
|
|
513
|
+
type: 'vibrance';
|
|
514
|
+
vibrance?: number;
|
|
515
|
+
saturation?: number;
|
|
516
|
+
}
|
|
517
|
+
|
|
518
|
+
export interface HueSaturationAdjustmentChannel {
|
|
519
|
+
a: number;
|
|
520
|
+
b: number;
|
|
521
|
+
c: number;
|
|
522
|
+
d: number;
|
|
523
|
+
hue: number;
|
|
524
|
+
saturation: number;
|
|
525
|
+
lightness: number;
|
|
526
|
+
}
|
|
527
|
+
|
|
528
|
+
export interface HueSaturationAdjustment extends PresetInfo {
|
|
529
|
+
type: 'hue/saturation';
|
|
530
|
+
master?: HueSaturationAdjustmentChannel;
|
|
531
|
+
reds?: HueSaturationAdjustmentChannel;
|
|
532
|
+
yellows?: HueSaturationAdjustmentChannel;
|
|
533
|
+
greens?: HueSaturationAdjustmentChannel;
|
|
534
|
+
cyans?: HueSaturationAdjustmentChannel;
|
|
535
|
+
blues?: HueSaturationAdjustmentChannel;
|
|
536
|
+
magentas?: HueSaturationAdjustmentChannel;
|
|
537
|
+
}
|
|
538
|
+
|
|
539
|
+
export interface ColorBalanceValues {
|
|
540
|
+
cyanRed: number;
|
|
541
|
+
magentaGreen: number;
|
|
542
|
+
yellowBlue: number;
|
|
543
|
+
}
|
|
544
|
+
|
|
545
|
+
export interface ColorBalanceAdjustment {
|
|
546
|
+
type: 'color balance';
|
|
547
|
+
shadows?: ColorBalanceValues;
|
|
548
|
+
midtones?: ColorBalanceValues;
|
|
549
|
+
highlights?: ColorBalanceValues;
|
|
550
|
+
preserveLuminosity?: boolean;
|
|
551
|
+
}
|
|
552
|
+
|
|
553
|
+
export interface BlackAndWhiteAdjustment extends PresetInfo {
|
|
554
|
+
type: 'black & white';
|
|
555
|
+
reds?: number;
|
|
556
|
+
yellows?: number;
|
|
557
|
+
greens?: number;
|
|
558
|
+
cyans?: number;
|
|
559
|
+
blues?: number;
|
|
560
|
+
magentas?: number;
|
|
561
|
+
useTint?: boolean;
|
|
562
|
+
tintColor?: Color;
|
|
563
|
+
}
|
|
564
|
+
|
|
565
|
+
export interface PhotoFilterAdjustment {
|
|
566
|
+
type: 'photo filter';
|
|
567
|
+
color?: Color;
|
|
568
|
+
density?: number;
|
|
569
|
+
preserveLuminosity?: boolean;
|
|
570
|
+
}
|
|
571
|
+
|
|
572
|
+
export interface ChannelMixerChannel {
|
|
573
|
+
red: number;
|
|
574
|
+
green: number;
|
|
575
|
+
blue: number;
|
|
576
|
+
constant: number;
|
|
577
|
+
}
|
|
578
|
+
|
|
579
|
+
export interface ChannelMixerAdjustment extends PresetInfo {
|
|
580
|
+
type: 'channel mixer';
|
|
581
|
+
monochrome?: boolean;
|
|
582
|
+
red?: ChannelMixerChannel;
|
|
583
|
+
green?: ChannelMixerChannel;
|
|
584
|
+
blue?: ChannelMixerChannel;
|
|
585
|
+
gray?: ChannelMixerChannel;
|
|
586
|
+
}
|
|
587
|
+
|
|
588
|
+
export interface ColorLookupAdjustment {
|
|
589
|
+
type: 'color lookup';
|
|
590
|
+
lookupType?: '3dlut' | 'abstractProfile' | 'deviceLinkProfile';
|
|
591
|
+
name?: string;
|
|
592
|
+
dither?: boolean;
|
|
593
|
+
profile?: Uint8Array;
|
|
594
|
+
lutFormat?: 'look' | 'cube' | '3dl';
|
|
595
|
+
dataOrder?: 'rgb' | 'bgr';
|
|
596
|
+
tableOrder?: 'rgb' | 'bgr';
|
|
597
|
+
lut3DFileData?: Uint8Array;
|
|
598
|
+
lut3DFileName?: string;
|
|
599
|
+
}
|
|
600
|
+
|
|
601
|
+
export interface InvertAdjustment {
|
|
602
|
+
type: 'invert';
|
|
603
|
+
}
|
|
604
|
+
|
|
605
|
+
export interface PosterizeAdjustment {
|
|
606
|
+
type: 'posterize';
|
|
607
|
+
levels?: number;
|
|
608
|
+
}
|
|
609
|
+
|
|
610
|
+
export interface ThresholdAdjustment {
|
|
611
|
+
type: 'threshold';
|
|
612
|
+
level?: number;
|
|
613
|
+
}
|
|
614
|
+
|
|
615
|
+
export interface ColorStop {
|
|
616
|
+
color: Color;
|
|
617
|
+
location: number;
|
|
618
|
+
midpoint: number;
|
|
619
|
+
}
|
|
620
|
+
|
|
621
|
+
export interface OpacityStop {
|
|
622
|
+
opacity: number;
|
|
623
|
+
location: number;
|
|
624
|
+
midpoint: number;
|
|
625
|
+
}
|
|
626
|
+
|
|
627
|
+
export interface GradientMapAdjustment {
|
|
628
|
+
type: 'gradient map';
|
|
629
|
+
name?: string;
|
|
630
|
+
gradientType: 'solid' | 'noise';
|
|
631
|
+
dither?: boolean;
|
|
632
|
+
reverse?: boolean;
|
|
633
|
+
// solid
|
|
634
|
+
smoothness?: number;
|
|
635
|
+
colorStops?: ColorStop[];
|
|
636
|
+
opacityStops?: OpacityStop[];
|
|
637
|
+
// noise
|
|
638
|
+
roughness?: number;
|
|
639
|
+
colorModel?: 'rgb' | 'hsb' | 'lab';
|
|
640
|
+
randomSeed?: number;
|
|
641
|
+
restrictColors?: boolean;
|
|
642
|
+
addTransparency?: boolean;
|
|
643
|
+
min?: number[];
|
|
644
|
+
max?: number[];
|
|
645
|
+
}
|
|
646
|
+
|
|
647
|
+
export interface SelectiveColorAdjustment {
|
|
648
|
+
type: 'selective color';
|
|
649
|
+
mode?: 'relative' | 'absolute';
|
|
650
|
+
reds?: CMYK;
|
|
651
|
+
yellows?: CMYK;
|
|
652
|
+
greens?: CMYK;
|
|
653
|
+
cyans?: CMYK;
|
|
654
|
+
blues?: CMYK;
|
|
655
|
+
magentas?: CMYK;
|
|
656
|
+
whites?: CMYK;
|
|
657
|
+
neutrals?: CMYK;
|
|
658
|
+
blacks?: CMYK;
|
|
659
|
+
}
|
|
660
|
+
|
|
661
|
+
export interface LinkedFile {
|
|
662
|
+
id: string;
|
|
663
|
+
name: string;
|
|
664
|
+
type?: string;
|
|
665
|
+
creator?: string;
|
|
666
|
+
data?: Uint8Array;
|
|
667
|
+
time?: Date; // for external files
|
|
668
|
+
descriptor?: {
|
|
669
|
+
compInfo: { compID: number; originalCompID: number; };
|
|
670
|
+
};
|
|
671
|
+
childDocumentID?: string;
|
|
672
|
+
assetModTime?: number;
|
|
673
|
+
assetLockedState?: number;
|
|
674
|
+
}
|
|
675
|
+
|
|
676
|
+
export type PlacedLayerType = 'unknown' | 'vector' | 'raster' | 'image stack';
|
|
677
|
+
|
|
678
|
+
export interface PlacedLayer {
|
|
679
|
+
id: string; // id of linked image file (psd.linkedFiles)
|
|
680
|
+
placed?: string; // unique id
|
|
681
|
+
type: PlacedLayerType;
|
|
682
|
+
pageNumber?: number;
|
|
683
|
+
totalPages?: number;
|
|
684
|
+
frameStep?: { numerator: number; denominator: number; };
|
|
685
|
+
duration?: { numerator: number; denominator: number; };
|
|
686
|
+
frameCount?: number;
|
|
687
|
+
transform: number[]; // x, y of 4 corners of the transform
|
|
688
|
+
nonAffineTransform?: number[]; // x, y of 4 corners of the transform
|
|
689
|
+
width?: number;
|
|
690
|
+
height?: number;
|
|
691
|
+
resolution?: UnitsValue;
|
|
692
|
+
// antialias ?
|
|
693
|
+
warp?: Warp;
|
|
694
|
+
crop?: number;
|
|
695
|
+
comp?: number;
|
|
696
|
+
compInfo?: { compID: number; originalCompID: number; };
|
|
697
|
+
}
|
|
698
|
+
|
|
699
|
+
export type AdjustmentLayer = BrightnessAdjustment | LevelsAdjustment | CurvesAdjustment |
|
|
700
|
+
ExposureAdjustment | VibranceAdjustment | HueSaturationAdjustment | ColorBalanceAdjustment |
|
|
701
|
+
BlackAndWhiteAdjustment | PhotoFilterAdjustment | ChannelMixerAdjustment | ColorLookupAdjustment |
|
|
702
|
+
InvertAdjustment | PosterizeAdjustment | ThresholdAdjustment | GradientMapAdjustment |
|
|
703
|
+
SelectiveColorAdjustment;
|
|
704
|
+
|
|
705
|
+
export type LayerColor = 'none' | 'red' | 'orange' | 'yellow' | 'green' | 'blue' | 'violet' | 'gray';
|
|
706
|
+
|
|
707
|
+
export interface KeyDescriptorItem {
|
|
708
|
+
keyShapeInvalidated?: boolean;
|
|
709
|
+
keyOriginType?: number;
|
|
710
|
+
keyOriginResolution?: number;
|
|
711
|
+
keyOriginRRectRadii?: {
|
|
712
|
+
topRight: UnitsValue;
|
|
713
|
+
topLeft: UnitsValue;
|
|
714
|
+
bottomLeft: UnitsValue;
|
|
715
|
+
bottomRight: UnitsValue;
|
|
716
|
+
};
|
|
717
|
+
keyOriginShapeBoundingBox?: {
|
|
718
|
+
top: UnitsValue;
|
|
719
|
+
left: UnitsValue;
|
|
720
|
+
bottom: UnitsValue;
|
|
721
|
+
right: UnitsValue;
|
|
722
|
+
};
|
|
723
|
+
keyOriginBoxCorners?: { x: number; y: number; }[];
|
|
724
|
+
transform?: number[]; // 2d transform matrix [xx, xy, yx, yy, tx, ty]
|
|
725
|
+
}
|
|
726
|
+
|
|
727
|
+
export interface LayerVectorMask {
|
|
728
|
+
invert?: boolean;
|
|
729
|
+
notLink?: boolean;
|
|
730
|
+
disable?: boolean;
|
|
731
|
+
fillStartsWithAllPixels?: boolean;
|
|
732
|
+
clipboard?: {
|
|
733
|
+
top: number;
|
|
734
|
+
left: number;
|
|
735
|
+
bottom: number;
|
|
736
|
+
right: number;
|
|
737
|
+
resolution: number;
|
|
738
|
+
};
|
|
739
|
+
paths: BezierPath[];
|
|
740
|
+
}
|
|
741
|
+
|
|
742
|
+
export interface AnimationFrame {
|
|
743
|
+
frames: number[]; // IDs of frames that this modifiers applies to
|
|
744
|
+
enable?: boolean;
|
|
745
|
+
offset?: { x: number; y: number; };
|
|
746
|
+
referencePoint?: { x: number; y: number; };
|
|
747
|
+
opacity?: number;
|
|
748
|
+
effects?: LayerEffectsInfo;
|
|
749
|
+
}
|
|
750
|
+
|
|
751
|
+
export interface Fraction {
|
|
752
|
+
numerator: number;
|
|
753
|
+
denominator: number;
|
|
754
|
+
}
|
|
755
|
+
|
|
756
|
+
export type TimelineKeyInterpolation = 'linear' | 'hold';
|
|
757
|
+
|
|
758
|
+
export type TimelineKey = {
|
|
759
|
+
interpolation: TimelineKeyInterpolation;
|
|
760
|
+
time: Fraction;
|
|
761
|
+
selected?: boolean;
|
|
762
|
+
} & ({
|
|
763
|
+
type: 'opacity';
|
|
764
|
+
value: number;
|
|
765
|
+
} | {
|
|
766
|
+
type: 'position';
|
|
767
|
+
x: number;
|
|
768
|
+
y: number;
|
|
769
|
+
} | {
|
|
770
|
+
type: 'transform';
|
|
771
|
+
scale: { x: number; y: number; };
|
|
772
|
+
skew: { x: number; y: number; };
|
|
773
|
+
rotation: number;
|
|
774
|
+
translation: { x: number; y: number; };
|
|
775
|
+
} | {
|
|
776
|
+
type: 'style';
|
|
777
|
+
style?: LayerEffectsInfo;
|
|
778
|
+
} | {
|
|
779
|
+
type: 'globalLighting';
|
|
780
|
+
globalAngle: number;
|
|
781
|
+
globalAltitude: number;
|
|
782
|
+
});
|
|
783
|
+
|
|
784
|
+
export type TimelineTrackType = 'opacity' | 'style' | 'sheetTransform' | 'sheetPosition' | 'globalLighting';
|
|
785
|
+
|
|
786
|
+
export interface TimelineTrack {
|
|
787
|
+
type: TimelineTrackType;
|
|
788
|
+
enabled?: boolean;
|
|
789
|
+
effectParams?: {
|
|
790
|
+
keys: TimelineKey[];
|
|
791
|
+
fillCanvas: boolean;
|
|
792
|
+
zoomOrigin: number;
|
|
793
|
+
};
|
|
794
|
+
keys: TimelineKey[];
|
|
795
|
+
}
|
|
796
|
+
|
|
797
|
+
export interface Timeline {
|
|
798
|
+
start: Fraction;
|
|
799
|
+
duration: Fraction;
|
|
800
|
+
inTime: Fraction;
|
|
801
|
+
outTime: Fraction;
|
|
802
|
+
autoScope: boolean;
|
|
803
|
+
audioLevel: number;
|
|
804
|
+
tracks?: TimelineTrack[];
|
|
805
|
+
}
|
|
806
|
+
|
|
807
|
+
export interface LayerAdditionalInfo {
|
|
808
|
+
name?: string; // layer name
|
|
809
|
+
nameSource?: string; // layer name source
|
|
810
|
+
id?: number; // layer id
|
|
811
|
+
version?: number; // layer version
|
|
812
|
+
mask?: LayerMaskData;
|
|
813
|
+
blendClippendElements?: boolean; // has to be set to `true` when using `color burn` blend mode (otherwise `transparencyShapesLayer` is set incorrectly)
|
|
814
|
+
blendInteriorElements?: boolean;
|
|
815
|
+
knockout?: boolean;
|
|
816
|
+
layerMaskAsGlobalMask?: boolean;
|
|
817
|
+
protected?: {
|
|
818
|
+
transparency?: boolean;
|
|
819
|
+
composite?: boolean;
|
|
820
|
+
position?: boolean;
|
|
821
|
+
artboards?: boolean;
|
|
822
|
+
};
|
|
823
|
+
layerColor?: LayerColor;
|
|
824
|
+
referencePoint?: {
|
|
825
|
+
x: number;
|
|
826
|
+
y: number;
|
|
827
|
+
};
|
|
828
|
+
sectionDivider?: {
|
|
829
|
+
type: SectionDividerType;
|
|
830
|
+
key?: string;
|
|
831
|
+
subType?: number; // 0 = normal, 1 = scene group, affects the animation timeline.
|
|
832
|
+
};
|
|
833
|
+
filterMask?: {
|
|
834
|
+
colorSpace: Color;
|
|
835
|
+
opacity: number;
|
|
836
|
+
};
|
|
837
|
+
effects?: LayerEffectsInfo;
|
|
838
|
+
text?: LayerTextData;
|
|
839
|
+
patterns?: PatternInfo[]; // not supported yet
|
|
840
|
+
vectorFill?: VectorContent;
|
|
841
|
+
vectorStroke?: {
|
|
842
|
+
strokeEnabled?: boolean;
|
|
843
|
+
fillEnabled?: boolean;
|
|
844
|
+
lineWidth?: UnitsValue;
|
|
845
|
+
lineDashOffset?: UnitsValue;
|
|
846
|
+
miterLimit?: number;
|
|
847
|
+
lineCapType?: LineCapType;
|
|
848
|
+
lineJoinType?: LineJoinType;
|
|
849
|
+
lineAlignment?: LineAlignment;
|
|
850
|
+
scaleLock?: boolean;
|
|
851
|
+
strokeAdjust?: boolean;
|
|
852
|
+
lineDashSet?: UnitsValue[];
|
|
853
|
+
blendMode?: BlendMode;
|
|
854
|
+
opacity?: number;
|
|
855
|
+
content?: VectorContent;
|
|
856
|
+
resolution?: number;
|
|
857
|
+
};
|
|
858
|
+
vectorMask?: LayerVectorMask;
|
|
859
|
+
usingAlignedRendering?: boolean;
|
|
860
|
+
timestamp?: number; // seconds
|
|
861
|
+
pathList?: {
|
|
862
|
+
// TODO: ...
|
|
863
|
+
}[];
|
|
864
|
+
adjustment?: AdjustmentLayer;
|
|
865
|
+
placedLayer?: PlacedLayer;
|
|
866
|
+
vectorOrigination?: {
|
|
867
|
+
keyDescriptorList: KeyDescriptorItem[];
|
|
868
|
+
};
|
|
869
|
+
compositorUsed?: {
|
|
870
|
+
description: string;
|
|
871
|
+
reason: string;
|
|
872
|
+
engine: string;
|
|
873
|
+
enableCompCore: string;
|
|
874
|
+
enableCompCoreGPU: string;
|
|
875
|
+
compCoreSupport: string;
|
|
876
|
+
compCoreGPUSupport: string;
|
|
877
|
+
};
|
|
878
|
+
artboard?: {
|
|
879
|
+
rect: { top: number; left: number; bottom: number; right: number; };
|
|
880
|
+
guideIndices?: any[];
|
|
881
|
+
presetName?: string;
|
|
882
|
+
color?: Color;
|
|
883
|
+
backgroundType?: number;
|
|
884
|
+
};
|
|
885
|
+
fillOpacity?: number;
|
|
886
|
+
transparencyShapesLayer?: boolean;
|
|
887
|
+
channelBlendingRestrictions?: number[];
|
|
888
|
+
animationFrames?: AnimationFrame[];
|
|
889
|
+
animationFrameFlags?: {
|
|
890
|
+
propagateFrameOne?: boolean;
|
|
891
|
+
unifyLayerPosition?: boolean;
|
|
892
|
+
unifyLayerStyle?: boolean;
|
|
893
|
+
unifyLayerVisibility?: boolean;
|
|
894
|
+
};
|
|
895
|
+
timeline?: Timeline;
|
|
896
|
+
|
|
897
|
+
// Base64 encoded raw EngineData, currently just kept in original state to support
|
|
898
|
+
// loading and modifying PSD file without breaking text layers.
|
|
899
|
+
engineData?: string;
|
|
900
|
+
}
|
|
901
|
+
|
|
902
|
+
export interface ImageResources {
|
|
903
|
+
layerState?: number;
|
|
904
|
+
layersGroup?: number[];
|
|
905
|
+
layerSelectionIds?: number[];
|
|
906
|
+
layerGroupsEnabledId?: number[];
|
|
907
|
+
versionInfo?: {
|
|
908
|
+
hasRealMergedData: boolean;
|
|
909
|
+
writerName: string;
|
|
910
|
+
readerName: string;
|
|
911
|
+
fileVersion: number;
|
|
912
|
+
};
|
|
913
|
+
alphaIdentifiers?: number[];
|
|
914
|
+
alphaChannelNames?: string[];
|
|
915
|
+
globalAngle?: number;
|
|
916
|
+
globalAltitude?: number;
|
|
917
|
+
pixelAspectRatio?: {
|
|
918
|
+
aspect: number;
|
|
919
|
+
};
|
|
920
|
+
urlsList?: {
|
|
921
|
+
id: number;
|
|
922
|
+
ref: 'slice';
|
|
923
|
+
url: string;
|
|
924
|
+
}[];
|
|
925
|
+
gridAndGuidesInformation?: {
|
|
926
|
+
grid?: {
|
|
927
|
+
horizontal: number;
|
|
928
|
+
vertical: number;
|
|
929
|
+
},
|
|
930
|
+
guides?: {
|
|
931
|
+
location: number;
|
|
932
|
+
direction: 'horizontal' | 'vertical';
|
|
933
|
+
}[];
|
|
934
|
+
};
|
|
935
|
+
resolutionInfo?: {
|
|
936
|
+
horizontalResolution: number;
|
|
937
|
+
horizontalResolutionUnit: 'PPI' | 'PPCM';
|
|
938
|
+
widthUnit: 'Inches' | 'Centimeters' | 'Points' | 'Picas' | 'Columns';
|
|
939
|
+
verticalResolution: number;
|
|
940
|
+
verticalResolutionUnit: 'PPI' | 'PPCM';
|
|
941
|
+
heightUnit: 'Inches' | 'Centimeters' | 'Points' | 'Picas' | 'Columns';
|
|
942
|
+
};
|
|
943
|
+
thumbnail?: HTMLCanvasElement;
|
|
944
|
+
thumbnailRaw?: { width: number; height: number; data: Uint8Array; };
|
|
945
|
+
captionDigest?: string;
|
|
946
|
+
xmpMetadata?: string;
|
|
947
|
+
printScale?: {
|
|
948
|
+
style?: 'centered' | 'size to fit' | 'user defined';
|
|
949
|
+
x?: number;
|
|
950
|
+
y?: number;
|
|
951
|
+
scale?: number;
|
|
952
|
+
};
|
|
953
|
+
printInformation?: {
|
|
954
|
+
printerManagesColors?: boolean;
|
|
955
|
+
printerName?: string;
|
|
956
|
+
printerProfile?: string;
|
|
957
|
+
printSixteenBit?: boolean;
|
|
958
|
+
renderingIntent?: RenderingIntent;
|
|
959
|
+
hardProof?: boolean;
|
|
960
|
+
blackPointCompensation?: boolean;
|
|
961
|
+
proofSetup?: {
|
|
962
|
+
builtin: string;
|
|
963
|
+
} | {
|
|
964
|
+
profile: string;
|
|
965
|
+
renderingIntent?: RenderingIntent;
|
|
966
|
+
blackPointCompensation?: boolean;
|
|
967
|
+
paperWhite?: boolean;
|
|
968
|
+
};
|
|
969
|
+
};
|
|
970
|
+
backgroundColor?: Color;
|
|
971
|
+
idsSeedNumber?: number;
|
|
972
|
+
printFlags?: {
|
|
973
|
+
labels?: boolean;
|
|
974
|
+
cropMarks?: boolean;
|
|
975
|
+
colorBars?: boolean;
|
|
976
|
+
registrationMarks?: boolean;
|
|
977
|
+
negative?: boolean;
|
|
978
|
+
flip?: boolean;
|
|
979
|
+
interpolate?: boolean;
|
|
980
|
+
caption?: boolean;
|
|
981
|
+
printFlags?: boolean;
|
|
982
|
+
};
|
|
983
|
+
iccUntaggedProfile?: boolean;
|
|
984
|
+
pathSelectionState?: string[];
|
|
985
|
+
imageReadyVariables?: string;
|
|
986
|
+
imageReadyDataSets?: string;
|
|
987
|
+
animations?: Animations;
|
|
988
|
+
onionSkins?: {
|
|
989
|
+
enabled: boolean;
|
|
990
|
+
framesBefore: number;
|
|
991
|
+
framesAfter: number;
|
|
992
|
+
frameSpacing: number;
|
|
993
|
+
minOpacity: number;
|
|
994
|
+
maxOpacity: number;
|
|
995
|
+
blendMode: BlendMode;
|
|
996
|
+
};
|
|
997
|
+
timelineInformation?: {
|
|
998
|
+
enabled: boolean;
|
|
999
|
+
frameStep: Fraction;
|
|
1000
|
+
frameRate: number;
|
|
1001
|
+
time: Fraction;
|
|
1002
|
+
duration: Fraction;
|
|
1003
|
+
workInTime: Fraction;
|
|
1004
|
+
workOutTime: Fraction;
|
|
1005
|
+
repeats: number;
|
|
1006
|
+
hasMotion: boolean;
|
|
1007
|
+
globalTracks: TimelineTrack[];
|
|
1008
|
+
audioClipGroups?: {
|
|
1009
|
+
id: string;
|
|
1010
|
+
muted: boolean;
|
|
1011
|
+
audioClips: {
|
|
1012
|
+
id: string;
|
|
1013
|
+
start: Fraction;
|
|
1014
|
+
duration: Fraction;
|
|
1015
|
+
inTime: Fraction;
|
|
1016
|
+
outTime: Fraction;
|
|
1017
|
+
muted: boolean;
|
|
1018
|
+
audioLevel: number;
|
|
1019
|
+
frameReader: {
|
|
1020
|
+
type: number;
|
|
1021
|
+
mediaDescriptor: string;
|
|
1022
|
+
link: {
|
|
1023
|
+
name: string;
|
|
1024
|
+
fullPath: string;
|
|
1025
|
+
relativePath: string;
|
|
1026
|
+
};
|
|
1027
|
+
};
|
|
1028
|
+
}[];
|
|
1029
|
+
}[];
|
|
1030
|
+
};
|
|
1031
|
+
sheetDisclosure?: {
|
|
1032
|
+
sheetTimelineOptions?: {
|
|
1033
|
+
sheetID: number;
|
|
1034
|
+
sheetDisclosed: boolean;
|
|
1035
|
+
lightsDisclosed: boolean;
|
|
1036
|
+
meshesDisclosed: boolean;
|
|
1037
|
+
materialsDisclosed: boolean;
|
|
1038
|
+
}[];
|
|
1039
|
+
};
|
|
1040
|
+
countInformation?: {
|
|
1041
|
+
color: RGB;
|
|
1042
|
+
name: string;
|
|
1043
|
+
size: number;
|
|
1044
|
+
fontSize: number;
|
|
1045
|
+
visible: boolean;
|
|
1046
|
+
points: { x: number; y: number }[];
|
|
1047
|
+
}[];
|
|
1048
|
+
slices?: {
|
|
1049
|
+
bounds: { left: number; top: number; right: number; bottom: number };
|
|
1050
|
+
groupName: string;
|
|
1051
|
+
slices: {
|
|
1052
|
+
id: number;
|
|
1053
|
+
groupId: number;
|
|
1054
|
+
origin: 'userGenerated' | 'autoGenerated' | 'layer';
|
|
1055
|
+
associatedLayerId: number;
|
|
1056
|
+
name: string;
|
|
1057
|
+
type: 'image' | 'noImage';
|
|
1058
|
+
bounds: { left: number; top: number; right: number; bottom: number };
|
|
1059
|
+
url: string;
|
|
1060
|
+
target: string;
|
|
1061
|
+
message: string;
|
|
1062
|
+
altTag: string;
|
|
1063
|
+
cellTextIsHTML: boolean;
|
|
1064
|
+
cellText: string;
|
|
1065
|
+
horizontalAlignment: 'default';
|
|
1066
|
+
verticalAlignment: 'default';
|
|
1067
|
+
backgroundColorType: 'none' | 'matte' | 'color';
|
|
1068
|
+
backgroundColor: RGBA;
|
|
1069
|
+
topOutset?: number;
|
|
1070
|
+
leftOutset?: number;
|
|
1071
|
+
bottomOutset?: number;
|
|
1072
|
+
rightOutset?: number;
|
|
1073
|
+
}[];
|
|
1074
|
+
}[];
|
|
1075
|
+
}
|
|
1076
|
+
|
|
1077
|
+
export interface GlobalLayerMaskInfo {
|
|
1078
|
+
overlayColorSpace: number;
|
|
1079
|
+
colorSpace1: number;
|
|
1080
|
+
colorSpace2: number;
|
|
1081
|
+
colorSpace3: number;
|
|
1082
|
+
colorSpace4: number;
|
|
1083
|
+
opacity: number;
|
|
1084
|
+
kind: number;
|
|
1085
|
+
}
|
|
1086
|
+
|
|
1087
|
+
export interface Annotation {
|
|
1088
|
+
type: 'text' | 'sound';
|
|
1089
|
+
open: boolean;
|
|
1090
|
+
iconLocation: { left: number; top: number; right: number; bottom: number };
|
|
1091
|
+
popupLocation: { left: number; top: number; right: number; bottom: number };
|
|
1092
|
+
color: Color;
|
|
1093
|
+
author: string;
|
|
1094
|
+
name: string;
|
|
1095
|
+
date: string;
|
|
1096
|
+
data: string | Uint8Array;
|
|
1097
|
+
}
|
|
1098
|
+
|
|
1099
|
+
export interface Layer extends LayerAdditionalInfo {
|
|
1100
|
+
top?: number;
|
|
1101
|
+
left?: number;
|
|
1102
|
+
bottom?: number;
|
|
1103
|
+
right?: number;
|
|
1104
|
+
blendMode?: BlendMode;
|
|
1105
|
+
opacity?: number;
|
|
1106
|
+
transparencyProtected?: boolean;
|
|
1107
|
+
hidden?: boolean;
|
|
1108
|
+
clipping?: boolean;
|
|
1109
|
+
canvas?: HTMLCanvasElement;
|
|
1110
|
+
imageData?: ImageData;
|
|
1111
|
+
children?: Layer[];
|
|
1112
|
+
/** Applies only for layer groups. */
|
|
1113
|
+
opened?: boolean;
|
|
1114
|
+
}
|
|
1115
|
+
|
|
1116
|
+
export interface Psd extends LayerAdditionalInfo {
|
|
1117
|
+
width: number;
|
|
1118
|
+
height: number;
|
|
1119
|
+
channels?: number;
|
|
1120
|
+
bitsPerChannel?: number;
|
|
1121
|
+
colorMode?: ColorMode;
|
|
1122
|
+
children?: Layer[];
|
|
1123
|
+
canvas?: HTMLCanvasElement;
|
|
1124
|
+
imageData?: ImageData;
|
|
1125
|
+
imageResources?: ImageResources;
|
|
1126
|
+
linkedFiles?: LinkedFile[]; // used in smart objects
|
|
1127
|
+
artboards?: {
|
|
1128
|
+
count: number; // number of artboards in the document
|
|
1129
|
+
autoExpandOffset?: { horizontal: number; vertical: number; };
|
|
1130
|
+
origin?: { horizontal: number; vertical: number; };
|
|
1131
|
+
autoExpandEnabled?: boolean;
|
|
1132
|
+
autoNestEnabled?: boolean;
|
|
1133
|
+
autoPositionEnabled?: boolean;
|
|
1134
|
+
shrinkwrapOnSaveEnabled?: boolean;
|
|
1135
|
+
docDefaultNewArtboardBackgroundColor?: Color;
|
|
1136
|
+
docDefaultNewArtboardBackgroundType?: number;
|
|
1137
|
+
};
|
|
1138
|
+
globalLayerMaskInfo?: GlobalLayerMaskInfo;
|
|
1139
|
+
annotations?: Annotation[];
|
|
1140
|
+
}
|
|
1141
|
+
|
|
1142
|
+
export interface ReadOptions {
|
|
1143
|
+
/** Does not load layer image data. */
|
|
1144
|
+
skipLayerImageData?: boolean;
|
|
1145
|
+
/** Does not load composite image data. */
|
|
1146
|
+
skipCompositeImageData?: boolean;
|
|
1147
|
+
/** Does not load thumbnail. */
|
|
1148
|
+
skipThumbnail?: boolean;
|
|
1149
|
+
/** Does not load linked files (used in smart-objects). */
|
|
1150
|
+
skipLinkedFilesData?: boolean;
|
|
1151
|
+
/** Throws exception if features are missing. */
|
|
1152
|
+
throwForMissingFeatures?: boolean;
|
|
1153
|
+
/** Logs if features are missing. */
|
|
1154
|
+
logMissingFeatures?: boolean;
|
|
1155
|
+
/** Keep image data as byte array instead of canvas.
|
|
1156
|
+
* (image data will appear in `imageData` fields instead of `canvas` fields)
|
|
1157
|
+
* This avoids issues with canvas premultiplied alpha corrupting image data. */
|
|
1158
|
+
useImageData?: boolean;
|
|
1159
|
+
/** Loads thumbnail raw data instead of decoding it's content into canvas.
|
|
1160
|
+
* `thumnailRaw` field is used instead. */
|
|
1161
|
+
useRawThumbnail?: boolean;
|
|
1162
|
+
/** Usend only for development. */
|
|
1163
|
+
logDevFeatures?: boolean;
|
|
1164
|
+
}
|
|
1165
|
+
|
|
1166
|
+
export interface WriteOptions {
|
|
1167
|
+
/** Automatically generates thumbnail from composite image. */
|
|
1168
|
+
generateThumbnail?: boolean;
|
|
1169
|
+
/** Trims transparent pixels from layer image data. */
|
|
1170
|
+
trimImageData?: boolean;
|
|
1171
|
+
/** Invalidates text layer data, forcing Photoshop to redraw them on load.
|
|
1172
|
+
* Use this option if you're updating loaded text layer properties. */
|
|
1173
|
+
invalidateTextLayers?: boolean;
|
|
1174
|
+
/** Logs if features are missing. */
|
|
1175
|
+
logMissingFeatures?: boolean;
|
|
1176
|
+
/** Forces bottom layer to be treated as layer and not background even when it's missing any transparency
|
|
1177
|
+
* (by default Photoshop treats bottom layer as background it it doesn't have any transparent pixels). */
|
|
1178
|
+
noBackground?: boolean;
|
|
1179
|
+
/** Saves document as PSB (Large Document Format) file. */
|
|
1180
|
+
psb?: boolean;
|
|
1181
|
+
/** Uses zip compression when writing PSD file, will result in smaller file size but may be incompatible
|
|
1182
|
+
* with some software. It may also be significantly slower. */
|
|
1183
|
+
compress?: boolean;
|
|
1184
|
+
}
|