ag-psd 32.0.0 → 33.0.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.
Files changed (103) hide show
  1. package/.v8-cache/v24.7.0-x64-ef5a0af0/03e19709 +0 -0
  2. package/.v8-cache/v24.7.0-x64-ef5a0af0/05135617 +0 -0
  3. package/.v8-cache/v24.7.0-x64-ef5a0af0/1130885f +0 -0
  4. package/.v8-cache/v24.7.0-x64-ef5a0af0/226e2801 +0 -0
  5. package/.v8-cache/v24.7.0-x64-ef5a0af0/2a19133e +0 -0
  6. package/.v8-cache/v24.7.0-x64-ef5a0af0/4511bacf +0 -0
  7. package/.v8-cache/v24.7.0-x64-ef5a0af0/68416cb2 +0 -0
  8. package/.v8-cache/v24.7.0-x64-ef5a0af0/71df9cb3 +0 -0
  9. package/.v8-cache/v24.7.0-x64-ef5a0af0/7ea06cea +0 -0
  10. package/.v8-cache/v24.7.0-x64-ef5a0af0/932f0770 +0 -0
  11. package/.v8-cache/v24.7.0-x64-ef5a0af0/acc36e66 +0 -0
  12. package/.v8-cache/v24.7.0-x64-ef5a0af0/b3c2fab7 +0 -0
  13. package/.v8-cache/v24.7.0-x64-ef5a0af0/c314aece +0 -0
  14. package/.v8-cache/v24.7.0-x64-ef5a0af0/cfc49f4f +0 -0
  15. package/.v8-cache/v24.7.0-x64-ef5a0af0/cff9434a +0 -0
  16. package/.v8-cache/v24.7.0-x64-ef5a0af0/dc86f000 +0 -0
  17. package/.v8-cache/v24.7.0-x64-ef5a0af0/e03e2acd +0 -0
  18. package/.v8-cache/v24.7.0-x64-ef5a0af0/e6745c2b +0 -0
  19. package/.v8-cache/v24.7.0-x64-ef5a0af0/e6b99945 +0 -0
  20. package/.v8-cache/v24.7.0-x64-ef5a0af0/eeeebdfe +0 -0
  21. package/.v8-cache/v24.7.0-x64-ef5a0af0/f6fd8125 +0 -0
  22. package/CHANGELOG.md +78 -0
  23. package/LICENSE +5 -0
  24. package/README.md +3 -6
  25. package/README_PSD.md +242 -81
  26. package/dist/abr.d.ts +11 -4
  27. package/dist/abr.js +357 -230
  28. package/dist/abr.js.map +1 -1
  29. package/dist/additionalInfo.d.ts +54 -2
  30. package/dist/additionalInfo.js +487 -306
  31. package/dist/additionalInfo.js.map +1 -1
  32. package/dist/ase.d.ts +6 -1
  33. package/dist/ase.js +61 -61
  34. package/dist/ase.js.map +1 -1
  35. package/dist/bundle.js +1937 -1115
  36. package/dist/descriptor.d.ts +14 -8
  37. package/dist/descriptor.js +202 -186
  38. package/dist/descriptor.js.map +1 -1
  39. package/dist/helpers.d.ts +1 -1
  40. package/dist/helpers.js +4 -2
  41. package/dist/helpers.js.map +1 -1
  42. package/dist/imageResources.d.ts +15 -3
  43. package/dist/imageResources.js +503 -142
  44. package/dist/imageResources.js.map +1 -1
  45. package/dist/jpeg.js +8 -8
  46. package/dist/jpeg.js.map +1 -1
  47. package/dist/psd.d.ts +148 -17
  48. package/dist/psd.js.map +1 -1
  49. package/dist/psdReader.d.ts +10 -0
  50. package/dist/psdReader.js +278 -166
  51. package/dist/psdReader.js.map +1 -1
  52. package/dist/psdWriter.d.ts +1 -0
  53. package/dist/psdWriter.js +77 -62
  54. package/dist/psdWriter.js.map +1 -1
  55. package/dist/text.js +17 -6
  56. package/dist/text.js.map +1 -1
  57. package/dist/utf8.js +0 -3
  58. package/dist/utf8.js.map +1 -1
  59. package/dist-es/abr.d.ts +11 -4
  60. package/dist-es/abr.js +357 -230
  61. package/dist-es/abr.js.map +1 -1
  62. package/dist-es/additionalInfo.d.ts +54 -2
  63. package/dist-es/additionalInfo.js +487 -306
  64. package/dist-es/additionalInfo.js.map +1 -1
  65. package/dist-es/ase.d.ts +6 -1
  66. package/dist-es/ase.js +61 -61
  67. package/dist-es/ase.js.map +1 -1
  68. package/dist-es/descriptor.d.ts +14 -8
  69. package/dist-es/descriptor.js +202 -186
  70. package/dist-es/descriptor.js.map +1 -1
  71. package/dist-es/helpers.d.ts +1 -1
  72. package/dist-es/helpers.js +4 -2
  73. package/dist-es/helpers.js.map +1 -1
  74. package/dist-es/imageResources.d.ts +15 -3
  75. package/dist-es/imageResources.js +503 -142
  76. package/dist-es/imageResources.js.map +1 -1
  77. package/dist-es/jpeg.js +8 -8
  78. package/dist-es/jpeg.js.map +1 -1
  79. package/dist-es/psd.d.ts +148 -17
  80. package/dist-es/psd.js.map +1 -1
  81. package/dist-es/psdReader.d.ts +10 -0
  82. package/dist-es/psdReader.js +278 -166
  83. package/dist-es/psdReader.js.map +1 -1
  84. package/dist-es/psdWriter.d.ts +1 -0
  85. package/dist-es/psdWriter.js +77 -62
  86. package/dist-es/psdWriter.js.map +1 -1
  87. package/dist-es/text.js +17 -6
  88. package/dist-es/text.js.map +1 -1
  89. package/dist-es/utf8.js +0 -3
  90. package/dist-es/utf8.js.map +1 -1
  91. package/package.json +2 -2
  92. package/src/abr.ts +375 -235
  93. package/src/additionalInfo.ts +663 -420
  94. package/src/ase.ts +66 -61
  95. package/src/descriptor.ts +199 -195
  96. package/src/helpers.ts +4 -1
  97. package/src/imageResources.ts +632 -168
  98. package/src/jpeg.ts +8 -8
  99. package/src/psd.ts +156 -30
  100. package/src/psdReader.ts +273 -172
  101. package/src/psdWriter.ts +95 -58
  102. package/src/text.ts +17 -6
  103. package/src/utf8.ts +0 -4
package/src/jpeg.ts CHANGED
@@ -761,7 +761,7 @@ function parse(data: Uint8Array) {
761
761
  };
762
762
  }
763
763
  }
764
- // TODO APP1 - Exif
764
+ // APP1 - Exif
765
765
  if (fileMarker === 0xFFE1) {
766
766
  if (appData[0] === 0x45 &&
767
767
  appData[1] === 0x78 &&
@@ -952,11 +952,11 @@ function parse(data: Uint8Array) {
952
952
  // set each frame's components quantization table
953
953
  for (let i = 0; i < frames.length; i++) {
954
954
  const cp = frames[i].components;
955
- for (let j in cp) { // TODO: don't use `in`
956
- const table = quantizationTables[cp[j].quantizationIdx!];
957
- if (!table) throw new Error(`Missing quantization table ${cp[j].quantizationIdx}`);
958
- cp[j].quantizationTable = table;
959
- delete cp[j].quantizationIdx; // TODO: why ???
955
+ for (const key of Object.keys(cp)) {
956
+ const component = cp[+key];
957
+ const table = quantizationTables[component.quantizationIdx!];
958
+ if (!table) throw new Error(`Missing quantization table ${component.quantizationIdx}`);
959
+ component.quantizationTable = table;
960
960
  }
961
961
  }
962
962
 
@@ -1021,8 +1021,8 @@ function getData(decoded: Decoded) {
1021
1021
  break;
1022
1022
  }
1023
1023
  case 3: {
1024
- // The default transform for three components is true, the adobe transform marker overrides it
1025
- colorTransform = decoded.adobe ? !!decoded.adobe.transformCode : true;
1024
+ // The default transform for three components is true, JFIF marker implies YCbCr, otherwise the adobe transform marker overrides it
1025
+ colorTransform = decoded.jfif ? true : decoded.adobe ? !!decoded.adobe.transformCode : true;
1026
1026
 
1027
1027
  const component1 = decoded.components[0];
1028
1028
  const component2 = decoded.components[1];
package/src/psd.ts CHANGED
@@ -40,8 +40,7 @@ export interface EffectContour {
40
40
 
41
41
  export interface EffectPattern {
42
42
  name: string;
43
- id: string;
44
- // TODO: add fields
43
+ id: string; // pattern data is stored in `patterns` field of the document
45
44
  }
46
45
 
47
46
  export interface LayerEffectShadow {
@@ -70,12 +69,15 @@ export interface LayerEffectsOuterGlow {
70
69
  blendMode?: BlendMode;
71
70
  opacity?: number;
72
71
  source?: GlowSource;
72
+ technique?: GlowTechnique;
73
73
  antialiased?: boolean;
74
74
  noise?: number;
75
75
  range?: number;
76
76
  choke?: UnitsValue;
77
77
  jitter?: number;
78
78
  contour?: EffectContour;
79
+ gradient?: EffectSolidGradient | EffectNoiseGradient;
80
+ interpolationMethod?: InterpolationMethod;
79
81
  }
80
82
 
81
83
  export interface LayerEffectInnerGlow {
@@ -94,6 +96,8 @@ export interface LayerEffectInnerGlow {
94
96
  choke?: UnitsValue; // spread
95
97
  jitter?: number;
96
98
  contour?: EffectContour;
99
+ gradient?: EffectSolidGradient | EffectNoiseGradient;
100
+ interpolationMethod?: InterpolationMethod;
97
101
  }
98
102
 
99
103
  export interface LayerEffectBevel {
@@ -118,7 +122,10 @@ export interface LayerEffectBevel {
118
122
  useTexture?: boolean;
119
123
  useShape?: boolean;
120
124
  antialiasGloss?: boolean;
121
- contour?: EffectContour;
125
+ contour?: EffectContour; // gloss contour
126
+ shapeContour?: EffectContour; // contour of the bevel shape, used when `useShape` is enabled
127
+ range?: number;
128
+ antialiased?: boolean;
122
129
  }
123
130
 
124
131
  export interface LayerEffectSolidFill {
@@ -142,7 +149,7 @@ export interface LayerEffectStroke {
142
149
  opacity?: number;
143
150
  color?: Color;
144
151
  gradient?: (EffectSolidGradient | EffectNoiseGradient) & ExtraGradientInfo;
145
- pattern?: EffectPattern & {}; // TODO: additional pattern info
152
+ pattern?: EffectPattern & ExtraPatternInfo;
146
153
  }
147
154
 
148
155
  export interface LayerEffectSatin {
@@ -160,7 +167,6 @@ export interface LayerEffectSatin {
160
167
  contour?: EffectContour;
161
168
  }
162
169
 
163
- // not supported yet because of `Patt` section not implemented
164
170
  export interface LayerEffectPatternOverlay {
165
171
  present?: boolean;
166
172
  showInDialog?: boolean;
@@ -168,6 +174,7 @@ export interface LayerEffectPatternOverlay {
168
174
  blendMode?: BlendMode;
169
175
  opacity?: number;
170
176
  scale?: number;
177
+ angle?: number;
171
178
  pattern?: EffectPattern;
172
179
  phase?: { x: number; y: number; };
173
180
  align?: boolean;
@@ -222,7 +229,7 @@ export interface LayerEffectsInfo {
222
229
  satin?: LayerEffectSatin;
223
230
  stroke?: LayerEffectStroke[];
224
231
  gradientOverlay?: LayerEffectGradientOverlay[];
225
- patternOverlay?: LayerEffectPatternOverlay; // not supported yet because of `Patt` section not implemented
232
+ patternOverlay?: LayerEffectPatternOverlay; // pattern is referenced only by name/id
226
233
  }
227
234
 
228
235
  export type PixelArray = Uint8ClampedArray | Uint8Array | Uint16Array | Float32Array;
@@ -250,7 +257,7 @@ export interface LayerMaskData {
250
257
  imageData?: PixelData;
251
258
  }
252
259
 
253
- export type TextGridding = 'none' | 'round'; // TODO: other values (no idea where to set it up in Photoshop)
260
+ export type TextGridding = 'none' | 'round';
254
261
  export type Orientation = 'horizontal' | 'vertical';
255
262
  export type AntiAlias = 'none' | 'sharp' | 'crisp' | 'strong' | 'smooth' | 'platform' | 'platformLCD';
256
263
  export type WarpStyle =
@@ -497,6 +504,8 @@ export interface ExtraGradientInfo {
497
504
  export interface ExtraPatternInfo {
498
505
  linked?: boolean;
499
506
  phase?: { x: number; y: number; };
507
+ scale?: number;
508
+ angle?: number;
500
509
  }
501
510
 
502
511
  export type VectorContent = { type: 'color'; color: Color; } |
@@ -506,7 +515,7 @@ export type VectorContent = { type: 'color'; color: Color; } |
506
515
 
507
516
  export type RenderingIntent = 'perceptual' | 'saturation' | 'relative colorimetric' | 'absolute colorimetric';
508
517
 
509
- export type Units = 'Pixels' | 'Points' | 'Picas' | 'Millimeters' | 'Centimeters' | 'Inches' | 'None' | 'Density';
518
+ export type Units = 'Pixels' | 'Points' | 'Picas' | 'Millimeters' | 'Centimeters' | 'Inches' | 'None' | 'Density' | 'Distance'; // Distance is in points (1/72 inch)
510
519
 
511
520
  export interface UnitsValue {
512
521
  units: Units;
@@ -538,22 +547,18 @@ export interface PresetInfo {
538
547
 
539
548
  export interface LevelsAdjustment extends PresetInfo {
540
549
  type: 'levels';
541
- // TODO: change to generic array of channels (because of other document type CMYK, Lab, etc)
542
- rgb?: LevelsAdjustmentChannel;
543
- red?: LevelsAdjustmentChannel;
544
- green?: LevelsAdjustmentChannel;
545
- blue?: LevelsAdjustmentChannel;
550
+ // levels for each channel, index 0 is composite channel, followed by document color channels (red, green, blue for RGB,
551
+ // cyan, magenta, yellow, black for CMYK, gray for Grayscale), missing channels use default values (no change)
552
+ channels?: LevelsAdjustmentChannel[];
546
553
  }
547
554
 
548
555
  export type CurvesAdjustmentChannel = { input: number; output: number; }[];
549
556
 
550
557
  export interface CurvesAdjustment extends PresetInfo {
551
558
  type: 'curves';
552
- // TODO: change to generic array of channels (because of other document type CMYK, Lab, etc)
553
- rgb?: CurvesAdjustmentChannel;
554
- red?: CurvesAdjustmentChannel;
555
- green?: CurvesAdjustmentChannel;
556
- blue?: CurvesAdjustmentChannel;
559
+ // curve for each channel, index 0 is composite channel, followed by document color channels (red, green, blue for RGB,
560
+ // cyan, magenta, yellow, black for CMYK, gray for Grayscale), missing or empty curve means no change to the channel
561
+ channels?: CurvesAdjustmentChannel[];
557
562
  }
558
563
 
559
564
  export interface ExposureAdjustment extends PresetInfo {
@@ -581,7 +586,17 @@ export interface HueSaturationAdjustmentChannel {
581
586
 
582
587
  export interface HueSaturationAdjustment extends PresetInfo {
583
588
  type: 'hue/saturation';
584
- master?: HueSaturationAdjustmentChannel;
589
+ colorize?: boolean;
590
+ colorization?: {
591
+ hue: number; // 0..360
592
+ saturation: number; // 0..100
593
+ lightness: number; // -100..100
594
+ };
595
+ master?: {
596
+ hue: number;
597
+ saturation: number;
598
+ lightness: number;
599
+ };
585
600
  reds?: HueSaturationAdjustmentChannel;
586
601
  yellows?: HueSaturationAdjustmentChannel;
587
602
  greens?: HueSaturationAdjustmentChannel;
@@ -670,6 +685,7 @@ export interface ColorStop {
670
685
  color: Color;
671
686
  location: number;
672
687
  midpoint: number;
688
+ type?: 'foreground' | 'background'; // stop uses foreground/background color (`color` is the color at the time of saving)
673
689
  }
674
690
 
675
691
  export interface OpacityStop {
@@ -737,6 +753,15 @@ export type LinkedFile = {
737
753
  };
738
754
  }
739
755
 
756
+ export interface LevelsFilterAdjustment {
757
+ channels: ('composite' | 'red' | 'green' | 'blue')[];
758
+ shadowInput?: number; // 0..255
759
+ highlightInput?: number; // 0..255
760
+ shadowOutput?: number; // 0..255
761
+ highlightOutput?: number; // 0..255
762
+ midtoneInput?: number; // gamma, 1 by default
763
+ }
764
+
740
765
  type FilterVariant = {
741
766
  type: 'average' | 'blur' | 'blur more';
742
767
  } | {
@@ -1164,7 +1189,7 @@ type FilterVariant = {
1164
1189
  } | {
1165
1190
  type: 'curves';
1166
1191
  filter: {
1167
- presetKind: 'custom' | 'default';
1192
+ presetKind?: 'custom' | 'default';
1168
1193
  adjustments?: ({
1169
1194
  channels: ('composite' | 'red' | 'green' | 'blue')[];
1170
1195
  curve: { x: number; y: number; curved?: boolean; }[];
@@ -1173,6 +1198,12 @@ type FilterVariant = {
1173
1198
  values: number[];
1174
1199
  })[];
1175
1200
  };
1201
+ } | {
1202
+ type: 'levels';
1203
+ filter: {
1204
+ presetKind?: 'custom' | 'default';
1205
+ adjustments?: LevelsFilterAdjustment[];
1206
+ };
1176
1207
  } | {
1177
1208
  type: 'invert';
1178
1209
  } | {
@@ -1234,6 +1265,7 @@ export interface PlacedLayer {
1234
1265
  id: string; // id of linked image file (psd.linkedFiles), must be in a GUID format (example: 20953ddb-9391-11ec-b4f1-c15674f50bc4)
1235
1266
  placed?: string; // unique id
1236
1267
  type: PlacedLayerType;
1268
+ external?: boolean; // linked smart object (linked file is stored outside of the document)
1237
1269
  pageNumber?: number;
1238
1270
  totalPages?: number;
1239
1271
  frameStep?: { numerator: number; denominator: number; };
@@ -1262,7 +1294,7 @@ export type LayerColor = 'none' | 'red' | 'orange' | 'yellow' | 'green' | 'blue'
1262
1294
 
1263
1295
  export interface KeyDescriptorItem {
1264
1296
  keyShapeInvalidated?: boolean;
1265
- keyOriginType?: number;
1297
+ keyOriginType?: number; // shape type: 1 - rectangle, 2 - rounded rectangle, 4 - line, 5 - ellipse, 8 - polygon
1266
1298
  keyOriginResolution?: number;
1267
1299
  keyOriginRRectRadii?: {
1268
1300
  topRight: UnitsValue;
@@ -1280,10 +1312,7 @@ export interface KeyDescriptorItem {
1280
1312
  transform?: number[]; // 2d transform matrix [xx, xy, yx, yy, tx, ty]
1281
1313
  }
1282
1314
 
1283
- export interface LayerVectorMask {
1284
- invert?: boolean;
1285
- notLink?: boolean;
1286
- disable?: boolean;
1315
+ export interface VectorPathData {
1287
1316
  fillStartsWithAllPixels?: boolean;
1288
1317
  clipboard?: {
1289
1318
  top: number;
@@ -1295,6 +1324,20 @@ export interface LayerVectorMask {
1295
1324
  paths: BezierPath[];
1296
1325
  }
1297
1326
 
1327
+ export interface LayerVectorMask extends VectorPathData {
1328
+ invert?: boolean;
1329
+ notLink?: boolean;
1330
+ disable?: boolean;
1331
+ }
1332
+
1333
+ export interface SavedPath extends VectorPathData {
1334
+ name: string;
1335
+ symmetryMode?: string; // raw enum value, e.g. 'pathSymmetryModeBasicPath'
1336
+ vectorOrigination?: {
1337
+ keyDescriptorList: KeyDescriptorItem[];
1338
+ };
1339
+ }
1340
+
1298
1341
  export interface AnimationFrame {
1299
1342
  frames: number[]; // IDs of frames that this modifiers applies to
1300
1343
  enable?: boolean;
@@ -1376,6 +1419,7 @@ export interface LayerAdditionalInfo {
1376
1419
  composite?: boolean;
1377
1420
  position?: boolean;
1378
1421
  artboards?: boolean;
1422
+ all?: boolean;
1379
1423
  };
1380
1424
  layerColor?: LayerColor;
1381
1425
  referencePoint?: {
@@ -1393,7 +1437,7 @@ export interface LayerAdditionalInfo {
1393
1437
  };
1394
1438
  effects?: LayerEffectsInfo;
1395
1439
  text?: LayerTextData;
1396
- patterns?: PatternInfo[]; // not supported yet
1440
+ patterns?: PatternInfo[];
1397
1441
  vectorFill?: VectorContent;
1398
1442
  vectorStroke?: {
1399
1443
  strokeEnabled?: boolean;
@@ -1415,9 +1459,15 @@ export interface LayerAdditionalInfo {
1415
1459
  vectorMask?: LayerVectorMask;
1416
1460
  usingAlignedRendering?: boolean;
1417
1461
  timestamp?: number; // seconds
1418
- pathList?: {
1419
- // TODO: ...
1420
- }[];
1462
+ generatorSettings?: { // Generator (Export As) settings
1463
+ exportAs?: {
1464
+ exportOption?: string; // JSON string
1465
+ scaleSettings?: string; // JSON string
1466
+ };
1467
+ assets?: string; // JSON string, Generator image assets settings (only on document)
1468
+ layerTime?: number; // seconds
1469
+ crema?: string; // JSON string, Export As document settings (only on document)
1470
+ };
1421
1471
  adjustment?: AdjustmentLayer;
1422
1472
  placedLayer?: PlacedLayer;
1423
1473
  vectorOrigination?: {
@@ -1525,6 +1575,20 @@ export enum LayerCompCapturedInfo {
1525
1575
  Appearance = 4,
1526
1576
  }
1527
1577
 
1578
+ export interface HalftoneScreen {
1579
+ frequency: number;
1580
+ frequencyUnits: 'lines/inch' | 'lines/cm';
1581
+ angle: number; // degrees
1582
+ shape: 'round' | 'ellipse' | 'line' | 'square' | 'cross' | 'diamond';
1583
+ accurateScreens: boolean;
1584
+ printerDefaultScreens: boolean;
1585
+ }
1586
+
1587
+ export interface PrintTransferFunction {
1588
+ curve: number[]; // 13 points, values 0..1000 (0% - 100%), -1 for missing points (first and last point are always set)
1589
+ override: boolean;
1590
+ }
1591
+
1528
1592
  export interface ImageResources {
1529
1593
  layerState?: number;
1530
1594
  layerSelectionIds?: number[];
@@ -1554,6 +1618,8 @@ export interface ImageResources {
1554
1618
  guides?: {
1555
1619
  location: number;
1556
1620
  direction: 'horizontal' | 'vertical';
1621
+ color?: RGB; // Photoshop default is cyan (74, 255, 255)
1622
+ id?: string; // unique id (GUID)
1557
1623
  }[];
1558
1624
  };
1559
1625
  resolutionInfo?: {
@@ -1578,6 +1644,7 @@ export interface ImageResources {
1578
1644
  printerManagesColors?: boolean;
1579
1645
  printerName?: string;
1580
1646
  printerProfile?: string;
1647
+ printerProfileColorSpace?: 'rgb' | 'grayscale'; // color space of printer profile, missing value means 'rgb'
1581
1648
  printSixteenBit?: boolean;
1582
1649
  renderingIntent?: RenderingIntent;
1583
1650
  hardProof?: boolean;
@@ -1605,7 +1672,63 @@ export interface ImageResources {
1605
1672
  printFlags?: boolean;
1606
1673
  };
1607
1674
  iccUntaggedProfile?: boolean;
1675
+ colorSamplers?: {
1676
+ x: number; // pixels
1677
+ y: number; // pixels
1678
+ colorSpace: number; // -1 - actual color, 0 - RGB, 1 - HSB, 2 - CMYK, 7 - Lab, 8 - grayscale, ...
1679
+ }[];
1680
+ effectsVisible?: boolean; // global flag to show or hide all layer effects
1681
+ iccProfile?: Uint8Array; // raw ICC profile data
1682
+ exifData?: Uint8Array; // raw EXIF data (TIFF format)
1683
+ iptcData?: Uint8Array; // raw IPTC-NAA record
1684
+ windowsDevMode?: Uint8Array; // raw Windows DEVMODE structure (printer settings)
1685
+ outputSettings?: any; // Save for Web output settings (raw descriptor)
1686
+ colorHalftoneScreens?: HalftoneScreen[]; // cyan, magenta, yellow and black
1687
+ grayscaleHalftoneScreens?: HalftoneScreen[];
1688
+ colorTransferFunctions?: PrintTransferFunction[]; // one for each of 4 printing plates
1689
+ grayscaleTransferFunctions?: PrintTransferFunction[];
1690
+ printStyle?: {
1691
+ caption?: boolean;
1692
+ calibrationBars?: boolean;
1693
+ registrationMarks?: boolean;
1694
+ cornerCropMarks?: boolean;
1695
+ centerCropMarks?: boolean;
1696
+ labels?: boolean;
1697
+ negative?: boolean;
1698
+ emulsionDown?: boolean;
1699
+ interpolate?: boolean;
1700
+ backgroundColor?: Color;
1701
+ border?: UnitsValue;
1702
+ bleed?: UnitsValue;
1703
+ resolution?: UnitsValue;
1704
+ vectorData?: boolean;
1705
+ pagePosition?: string; // 'centered' or raw enum value
1706
+ left?: UnitsValue;
1707
+ top?: UnitsValue;
1708
+ scale?: number; // 0..1
1709
+ cropWhenPrinting?: boolean;
1710
+ cropRect?: { top: number; left: number; bottom: number; right: number; };
1711
+ };
1712
+ printFlagsInfo?: {
1713
+ centerCropMarks: boolean;
1714
+ bleedWidth: number;
1715
+ bleedWidthScale: number;
1716
+ };
1717
+ indexedColorCount?: number; // number of used colors in indexed color palette
1718
+ transparencyIndex?: number; // index of transparent color in indexed color palette
1719
+ alphaChannelDisplayInfo?: {
1720
+ color?: Color;
1721
+ rawColor?: { colorSpace: number; values: number[]; }; // color in color space not supported by this library (instead of `color`)
1722
+ opacity: number; // 0..1
1723
+ kind: 'selected' | 'protected' | 'spot'; // color indicates selected areas, protected (masked) areas or spot color
1724
+ }[];
1608
1725
  pathSelectionState?: string[];
1726
+ savedPaths?: SavedPath[]; // paths from the paths panel
1727
+ workPath?: VectorPathData;
1728
+ clippingPath?: {
1729
+ name: string; // name of the saved path used as clipping path
1730
+ flatness: number; // device pixels, 0 for printer default
1731
+ };
1609
1732
  imageReadyVariables?: string;
1610
1733
  imageReadyDataSets?: string;
1611
1734
  animations?: Animations;
@@ -1794,7 +1917,7 @@ export interface Psd extends LayerAdditionalInfo {
1794
1917
  imageData?: PixelData;
1795
1918
  rawCompositeData?: Uint8Array;
1796
1919
  /** Information needed to decode `rawCompositeData` (see `getCompositeImageData`) */
1797
- rawCompositeDataInfo?: { large: boolean; globalAlpha: boolean; };
1920
+ rawCompositeDataInfo?: { large: boolean; globalAlpha: boolean; layersInGlobalInfo?: boolean; };
1798
1921
  imageResources?: ImageResources;
1799
1922
  linkedFiles?: LinkedFile[]; // used in smart objects
1800
1923
  artboards?: {
@@ -1865,4 +1988,7 @@ export interface WriteOptions {
1865
1988
  /** Uses zip compression when writing PSD file, will result in smaller file size but may be incompatible
1866
1989
  * with some software. It may also be significantly slower. */
1867
1990
  compress?: boolean;
1991
+
1992
+ /** Used only for development. */
1993
+ log?: (...args: any[]) => void;
1868
1994
  }