ag-psd 16.0.0 → 17.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.
package/dist/psd.d.ts CHANGED
@@ -659,86 +659,444 @@ export interface LinkedFile {
659
659
  assetModTime?: number;
660
660
  assetLockedState?: number;
661
661
  }
662
- export interface PlacedLayerPuppetFilter {
663
- rigidType: boolean;
664
- bounds: {
665
- x: number;
666
- y: number;
667
- }[];
668
- puppetShapeList: {
669
- rigidType: boolean;
670
- originalVertexArray: {
671
- x: number;
672
- y: number;
673
- }[];
674
- deformedVertexArray: {
662
+ type FilterVariant = {
663
+ type: 'average' | 'blur' | 'blur more';
664
+ } | {
665
+ type: 'box blur';
666
+ filter: {
667
+ radius: UnitsValue;
668
+ };
669
+ } | {
670
+ type: 'gaussian blur';
671
+ filter: {
672
+ radius: UnitsValue;
673
+ };
674
+ } | {
675
+ type: 'motion blur';
676
+ filter: {
677
+ angle: number;
678
+ distance: UnitsValue;
679
+ };
680
+ } | {
681
+ type: 'radial blur';
682
+ filter: {
683
+ amount: number;
684
+ method: 'spin' | 'zoom';
685
+ quality: 'draft' | 'good' | 'best';
686
+ };
687
+ } | {
688
+ type: 'shape blur';
689
+ filter: {
690
+ radius: UnitsValue;
691
+ customShape: {
692
+ name: string;
693
+ id: string;
694
+ };
695
+ };
696
+ } | {
697
+ type: 'smart blur';
698
+ filter: {
699
+ radius: number;
700
+ threshold: number;
701
+ quality: 'low' | 'medium' | 'high';
702
+ mode: 'normal' | 'edge only' | 'overlay edge';
703
+ };
704
+ } | {
705
+ type: 'surface blur';
706
+ filter: {
707
+ radius: UnitsValue;
708
+ threshold: number;
709
+ };
710
+ } | {
711
+ type: 'displace';
712
+ filter: {
713
+ horizontalScale: number;
714
+ verticalScale: number;
715
+ displacementMap: 'stretch to fit' | 'tile';
716
+ undefinedAreas: 'wrap around' | 'repeat edge pixels';
717
+ displacementFile: {
718
+ signature: string;
719
+ path: string;
720
+ };
721
+ };
722
+ } | {
723
+ type: 'pinch';
724
+ filter: {
725
+ amount: number;
726
+ };
727
+ } | {
728
+ type: 'polar coordinates';
729
+ filter: {
730
+ conversion: 'rectangular to polar' | 'polar to rectangular';
731
+ };
732
+ } | {
733
+ type: 'ripple';
734
+ filter: {
735
+ amount: number;
736
+ size: 'small' | 'medium' | 'large';
737
+ };
738
+ } | {
739
+ type: 'shear';
740
+ filter: {
741
+ shearPoints: {
675
742
  x: number;
676
743
  y: number;
677
744
  }[];
678
- indexArray: number[];
679
- pinOffsets: {
745
+ shearStart: number;
746
+ shearEnd: number;
747
+ undefinedAreas: 'wrap around' | 'repeat edge pixels';
748
+ };
749
+ } | {
750
+ type: 'spherize';
751
+ filter: {
752
+ amount: number;
753
+ mode: 'normal' | 'horizontal only' | 'vertical only';
754
+ };
755
+ } | {
756
+ type: 'twirl';
757
+ filter: {
758
+ angle: number;
759
+ };
760
+ } | {
761
+ type: 'wave';
762
+ filter: {
763
+ numberOfGenerators: number;
764
+ type: 'sine' | 'triangle' | 'square';
765
+ wavelength: {
766
+ min: number;
767
+ max: number;
768
+ };
769
+ amplitude: {
770
+ min: number;
771
+ max: number;
772
+ };
773
+ scale: {
680
774
  x: number;
681
775
  y: number;
776
+ };
777
+ randomSeed: number;
778
+ undefinedAreas: 'wrap around' | 'repeat edge pixels';
779
+ };
780
+ } | {
781
+ type: 'zigzag';
782
+ filter: {
783
+ amount: number;
784
+ ridges: number;
785
+ style: 'around center' | 'out from center' | 'pond ripples';
786
+ };
787
+ } | {
788
+ type: 'add noise';
789
+ filter: {
790
+ amount: number;
791
+ distribution: 'uniform' | 'gaussian';
792
+ monochromatic: boolean;
793
+ randomSeed: number;
794
+ };
795
+ } | {
796
+ type: 'despeckle';
797
+ } | {
798
+ type: 'dust and scratches';
799
+ filter: {
800
+ radius: number;
801
+ threshold: number;
802
+ };
803
+ } | {
804
+ type: 'median';
805
+ filter: {
806
+ radius: UnitsValue;
807
+ };
808
+ } | {
809
+ type: 'reduce noise';
810
+ filter: {
811
+ preset: string;
812
+ removeJpegArtifact: boolean;
813
+ reduceColorNoise: number;
814
+ sharpenDetails: number;
815
+ channelDenoise: {
816
+ channels: ('red' | 'green' | 'blue' | 'composite')[];
817
+ amount: number;
818
+ preserveDetails?: number;
682
819
  }[];
683
- posFinalPins: {
820
+ };
821
+ } | {
822
+ type: 'color halftone';
823
+ filter: {
824
+ radius: number;
825
+ angle1: number;
826
+ angle2: number;
827
+ angle3: number;
828
+ angle4: number;
829
+ };
830
+ } | {
831
+ type: 'crystallize';
832
+ filter: {
833
+ cellSize: number;
834
+ randomSeed: number;
835
+ };
836
+ } | {
837
+ type: 'facet' | 'fragment';
838
+ } | {
839
+ type: 'mezzotint';
840
+ filter: {
841
+ type: 'fine dots' | 'medium dots' | 'grainy dots' | 'coarse dots' | 'short lines' | 'medium lines' | 'long lines' | 'short strokes' | 'medium strokes' | 'long strokes';
842
+ randomSeed: number;
843
+ };
844
+ } | {
845
+ type: 'mosaic';
846
+ filter: {
847
+ cellSize: UnitsValue;
848
+ };
849
+ } | {
850
+ type: 'pointillize';
851
+ filter: {
852
+ cellSize: number;
853
+ randomSeed: number;
854
+ };
855
+ } | {
856
+ type: 'clouds';
857
+ filter: {
858
+ randomSeed: number;
859
+ };
860
+ } | {
861
+ type: 'difference clouds';
862
+ filter: {
863
+ randomSeed: number;
864
+ };
865
+ } | {
866
+ type: 'fibers';
867
+ filter: {
868
+ variance: number;
869
+ strength: number;
870
+ randomSeed: number;
871
+ };
872
+ } | {
873
+ type: 'lens flare';
874
+ filter: {
875
+ brightness: number;
876
+ position: {
684
877
  x: number;
685
878
  y: number;
686
- }[];
687
- pinVertexIndices: number[];
688
- selectedPin: number[];
689
- pinPosition: {
879
+ };
880
+ lensType: '50-300mm zoom' | '32mm prime' | '105mm prime' | 'movie prime';
881
+ };
882
+ } | {
883
+ type: 'sharpen' | 'sharpen edges' | 'sharpen more';
884
+ } | {
885
+ type: 'smart sharpen';
886
+ filter: {
887
+ amount: number;
888
+ radius: UnitsValue;
889
+ threshold: number;
890
+ angle: number;
891
+ moreAccurate: boolean;
892
+ blur: 'gaussian blur' | 'lens blur' | 'motion blur';
893
+ preset: string;
894
+ shadow: {
895
+ fadeAmount: number;
896
+ tonalWidth: number;
897
+ radius: number;
898
+ };
899
+ highlight: {
900
+ fadeAmount: number;
901
+ tonalWidth: number;
902
+ radius: number;
903
+ };
904
+ };
905
+ } | {
906
+ type: 'unsharp mask';
907
+ filter: {
908
+ amount: number;
909
+ radius: UnitsValue;
910
+ threshold: number;
911
+ };
912
+ } | {
913
+ type: 'diffuse';
914
+ filter: {
915
+ mode: 'normal' | 'darken only' | 'lighten only' | 'anisotropic';
916
+ randomSeed: number;
917
+ };
918
+ } | {
919
+ type: 'emboss';
920
+ filter: {
921
+ angle: number;
922
+ height: number;
923
+ amount: number;
924
+ };
925
+ } | {
926
+ type: 'extrude';
927
+ filter: {
928
+ type: 'blocks' | 'pyramids';
929
+ size: number;
930
+ depth: number;
931
+ depthMode: 'random' | 'level-based';
932
+ randomSeed: number;
933
+ solidFrontFaces: boolean;
934
+ maskIncompleteBlocks: boolean;
935
+ };
936
+ } | {
937
+ type: 'find edges' | 'solarize';
938
+ } | {
939
+ type: 'tiles';
940
+ filter: {
941
+ numberOfTiles: number;
942
+ maximumOffset: number;
943
+ fillEmptyAreaWith: 'background color' | 'foreground color' | 'inverse image' | 'unaltered image';
944
+ randomSeed: number;
945
+ };
946
+ } | {
947
+ type: 'trace contour';
948
+ filter: {
949
+ level: number;
950
+ edge: 'lower' | 'upper';
951
+ };
952
+ } | {
953
+ type: 'wind';
954
+ filter: {
955
+ method: 'wind' | 'blast' | 'stagger';
956
+ direction: 'left' | 'right';
957
+ };
958
+ } | {
959
+ type: 'de-interlace';
960
+ filter: {
961
+ eliminate: 'odd lines' | 'even lines';
962
+ newFieldsBy: 'duplication' | 'interpolation';
963
+ };
964
+ } | {
965
+ type: 'ntsc colors';
966
+ } | {
967
+ type: 'custom';
968
+ filter: {
969
+ scale: number;
970
+ offset: number;
971
+ matrix: number[];
972
+ };
973
+ } | {
974
+ type: 'high pass' | 'maximum' | 'minimum';
975
+ filter: {
976
+ radius: UnitsValue;
977
+ };
978
+ } | {
979
+ type: 'offset';
980
+ filter: {
981
+ horizontal: number;
982
+ vertical: number;
983
+ undefinedAreas: 'set to transparent' | 'repeat edge pixels' | 'wrap around';
984
+ };
985
+ } | {
986
+ type: 'puppet';
987
+ filter: {
988
+ rigidType: boolean;
989
+ bounds: {
690
990
  x: number;
691
991
  y: number;
692
992
  }[];
693
- pinRotation: number[];
694
- pinOverlay: boolean[];
695
- pinDepth: number[];
696
- meshQuality: number;
697
- meshExpansion: number;
698
- meshRigidity: number;
699
- imageResolution: number;
700
- meshBoundaryPath: {
701
- pathComponents: {
702
- shapeOperation: string;
703
- paths: {
704
- closed: boolean;
705
- points: {
706
- anchor: {
707
- x: UnitsValue;
708
- y: UnitsValue;
709
- };
710
- forward: {
711
- x: UnitsValue;
712
- y: UnitsValue;
713
- };
714
- backward: {
715
- x: UnitsValue;
716
- y: UnitsValue;
717
- };
718
- smooth: boolean;
993
+ puppetShapeList: {
994
+ rigidType: boolean;
995
+ originalVertexArray: {
996
+ x: number;
997
+ y: number;
998
+ }[];
999
+ deformedVertexArray: {
1000
+ x: number;
1001
+ y: number;
1002
+ }[];
1003
+ indexArray: number[];
1004
+ pinOffsets: {
1005
+ x: number;
1006
+ y: number;
1007
+ }[];
1008
+ posFinalPins: {
1009
+ x: number;
1010
+ y: number;
1011
+ }[];
1012
+ pinVertexIndices: number[];
1013
+ selectedPin: number[];
1014
+ pinPosition: {
1015
+ x: number;
1016
+ y: number;
1017
+ }[];
1018
+ pinRotation: number[];
1019
+ pinOverlay: boolean[];
1020
+ pinDepth: number[];
1021
+ meshQuality: number;
1022
+ meshExpansion: number;
1023
+ meshRigidity: number;
1024
+ imageResolution: number;
1025
+ meshBoundaryPath: {
1026
+ pathComponents: {
1027
+ shapeOperation: string;
1028
+ paths: {
1029
+ closed: boolean;
1030
+ points: {
1031
+ anchor: {
1032
+ x: UnitsValue;
1033
+ y: UnitsValue;
1034
+ };
1035
+ forward: {
1036
+ x: UnitsValue;
1037
+ y: UnitsValue;
1038
+ };
1039
+ backward: {
1040
+ x: UnitsValue;
1041
+ y: UnitsValue;
1042
+ };
1043
+ smooth: boolean;
1044
+ }[];
719
1045
  }[];
720
1046
  }[];
721
- }[];
722
- };
723
- }[];
724
- }
1047
+ };
1048
+ }[];
1049
+ };
1050
+ } | {
1051
+ type: 'oil paint plugin';
1052
+ filter: {
1053
+ name: string;
1054
+ gpu: boolean;
1055
+ lighting: boolean;
1056
+ parameters: {
1057
+ name: string;
1058
+ value: number;
1059
+ }[];
1060
+ };
1061
+ } | {
1062
+ type: 'hsb/hsl';
1063
+ filter: {
1064
+ inputMode: 'rgb' | 'hsb' | 'hsl';
1065
+ rowOrder: 'rgb' | 'hsb' | 'hsl';
1066
+ };
1067
+ } | {
1068
+ type: 'oil paint';
1069
+ filter: {
1070
+ lightingOn: boolean;
1071
+ stylization: number;
1072
+ cleanliness: number;
1073
+ brushScale: number;
1074
+ microBrush: number;
1075
+ lightDirection: number;
1076
+ specularity: number;
1077
+ };
1078
+ } | {
1079
+ type: 'liquify';
1080
+ filter: {
1081
+ liquifyMesh: Uint8Array;
1082
+ };
1083
+ };
1084
+ export type Filter = FilterVariant & {
1085
+ name: string;
1086
+ opacity: number;
1087
+ blendMode: BlendMode;
1088
+ enabled: boolean;
1089
+ hasOptions: boolean;
1090
+ foregroundColor: Color;
1091
+ backgroundColor: Color;
1092
+ };
725
1093
  export interface PlacedLayerFilter {
726
1094
  enabled: boolean;
727
1095
  validAtPosition: boolean;
728
1096
  maskEnabled: boolean;
729
1097
  maskLinked: boolean;
730
1098
  maskExtendWithWhite: boolean;
731
- list: {
732
- id: number;
733
- name: string;
734
- opacity: number;
735
- blendMode: BlendMode;
736
- enabled: boolean;
737
- hasOptions: boolean;
738
- foregroundColor: Color;
739
- backgroundColor: Color;
740
- filter: PlacedLayerPuppetFilter | {};
741
- }[];
1099
+ list: Filter[];
742
1100
  }
743
1101
  export type PlacedLayerType = 'unknown' | 'vector' | 'raster' | 'image stack';
744
1102
  export interface PlacedLayer {
@@ -973,7 +1331,22 @@ export interface LayerAdditionalInfo {
973
1331
  unifyLayerVisibility?: boolean;
974
1332
  };
975
1333
  timeline?: Timeline;
976
- filterEffects?: any;
1334
+ filterEffectsMasks?: {
1335
+ id: string;
1336
+ top: number;
1337
+ left: number;
1338
+ bottom: number;
1339
+ right: number;
1340
+ depth: number;
1341
+ channels: ({
1342
+ compressionMode: number;
1343
+ data: Uint8Array;
1344
+ } | undefined)[];
1345
+ extra?: {
1346
+ compressionMode: number;
1347
+ data: Uint8Array;
1348
+ };
1349
+ }[];
977
1350
  engineData?: string;
978
1351
  }
979
1352
  export interface ImageResources {
@@ -1205,6 +1578,7 @@ export interface Layer extends LayerAdditionalInfo {
1205
1578
  blendMode?: BlendMode;
1206
1579
  opacity?: number;
1207
1580
  transparencyProtected?: boolean;
1581
+ effectsOpen?: boolean;
1208
1582
  hidden?: boolean;
1209
1583
  clipping?: boolean;
1210
1584
  canvas?: HTMLCanvasElement;
@@ -1286,3 +1660,4 @@ export interface WriteOptions {
1286
1660
  * with some software. It may also be significantly slower. */
1287
1661
  compress?: boolean;
1288
1662
  }
1663
+ export {};
@@ -13,6 +13,7 @@ export declare function readUint8(reader: PsdReader): number;
13
13
  export declare function peekUint8(reader: PsdReader): number;
14
14
  export declare function readInt16(reader: PsdReader): number;
15
15
  export declare function readUint16(reader: PsdReader): number;
16
+ export declare function readUint16LE(reader: PsdReader): number;
16
17
  export declare function readInt32(reader: PsdReader): number;
17
18
  export declare function readInt32LE(reader: PsdReader): number;
18
19
  export declare function readUint32(reader: PsdReader): number;
@@ -25,6 +26,7 @@ export declare function readSignature(reader: PsdReader): string;
25
26
  export declare function readPascalString(reader: PsdReader, padTo: number): string;
26
27
  export declare function readUnicodeString(reader: PsdReader): string;
27
28
  export declare function readUnicodeStringWithLength(reader: PsdReader, length: number): string;
29
+ export declare function readUnicodeStringWithLengthLE(reader: PsdReader, length: number): string;
28
30
  export declare function readAsciiString(reader: PsdReader, length: number): string;
29
31
  export declare function skipBytes(reader: PsdReader, count: number): void;
30
32
  export declare function checkSignature(reader: PsdReader, a: string, b?: string): void;
package/dist/psdReader.js CHANGED
@@ -11,7 +11,7 @@ var __assign = (this && this.__assign) || function () {
11
11
  return __assign.apply(this, arguments);
12
12
  };
13
13
  Object.defineProperty(exports, "__esModule", { value: true });
14
- exports.readPattern = exports.readColor = exports.readSection = exports.readDataRLE = exports.readDataZipWithoutPrediction = exports.readPsd = exports.checkSignature = exports.skipBytes = exports.readAsciiString = exports.readUnicodeStringWithLength = exports.readUnicodeString = exports.readPascalString = exports.readSignature = exports.readBytes = exports.readFixedPointPath32 = exports.readFixedPoint32 = exports.readFloat64 = exports.readFloat32 = exports.readUint32 = exports.readInt32LE = exports.readInt32 = exports.readUint16 = exports.readInt16 = exports.peekUint8 = exports.readUint8 = exports.warnOrThrow = exports.createReader = exports.supportedColorModes = void 0;
14
+ exports.readPattern = exports.readColor = exports.readSection = exports.readDataRLE = exports.readDataZipWithoutPrediction = exports.readPsd = exports.checkSignature = exports.skipBytes = exports.readAsciiString = exports.readUnicodeStringWithLengthLE = exports.readUnicodeStringWithLength = exports.readUnicodeString = exports.readPascalString = exports.readSignature = exports.readBytes = exports.readFixedPointPath32 = exports.readFixedPoint32 = exports.readFloat64 = exports.readFloat32 = exports.readUint32 = exports.readInt32LE = exports.readInt32 = exports.readUint16LE = exports.readUint16 = exports.readInt16 = exports.peekUint8 = exports.readUint8 = exports.warnOrThrow = exports.createReader = exports.supportedColorModes = void 0;
15
15
  var pako_1 = require("pako");
16
16
  var helpers_1 = require("./helpers");
17
17
  var additionalInfo_1 = require("./additionalInfo");
@@ -56,6 +56,11 @@ function readUint16(reader) {
56
56
  return reader.view.getUint16(reader.offset - 2, false);
57
57
  }
58
58
  exports.readUint16 = readUint16;
59
+ function readUint16LE(reader) {
60
+ reader.offset += 2;
61
+ return reader.view.getUint16(reader.offset - 2, true);
62
+ }
63
+ exports.readUint16LE = readUint16LE;
59
64
  function readInt32(reader) {
60
65
  reader.offset += 4;
61
66
  return reader.view.getInt32(reader.offset - 4, false);
@@ -139,6 +144,17 @@ function readUnicodeStringWithLength(reader, length) {
139
144
  return text;
140
145
  }
141
146
  exports.readUnicodeStringWithLength = readUnicodeStringWithLength;
147
+ function readUnicodeStringWithLengthLE(reader, length) {
148
+ var text = '';
149
+ while (length--) {
150
+ var value = readUint16LE(reader);
151
+ if (value || length > 0) { // remove trailing \0
152
+ text += String.fromCharCode(value);
153
+ }
154
+ }
155
+ return text;
156
+ }
157
+ exports.readUnicodeStringWithLengthLE = readUnicodeStringWithLengthLE;
142
158
  function readAsciiString(reader, length) {
143
159
  var text = '';
144
160
  while (length--) {
@@ -346,14 +362,14 @@ function readLayerRecord(reader, psd, options) {
346
362
  var channelCount = readUint16(reader);
347
363
  var channels = [];
348
364
  for (var i = 0; i < channelCount; i++) {
349
- var channelID = readInt16(reader);
350
- var channelLength = readUint32(reader);
365
+ var id = readInt16(reader);
366
+ var length_1 = readUint32(reader);
351
367
  if (options.large) {
352
- if (channelLength !== 0)
368
+ if (length_1 !== 0)
353
369
  throw new Error('Sizes larger than 4GB are not supported');
354
- channelLength = readUint32(reader);
370
+ length_1 = readUint32(reader);
355
371
  }
356
- channels.push({ id: channelID, length: channelLength });
372
+ channels.push({ id: id, length: length_1 });
357
373
  }
358
374
  checkSignature(reader, '8BIM');
359
375
  var blendMode = readSignature(reader);
@@ -365,11 +381,12 @@ function readLayerRecord(reader, psd, options) {
365
381
  var flags = readUint8(reader);
366
382
  layer.transparencyProtected = (flags & 0x01) !== 0;
367
383
  layer.hidden = (flags & 0x02) !== 0;
384
+ if (flags & 0x20)
385
+ layer.effectsOpen = true;
368
386
  // 0x04 - obsolete
369
387
  // 0x08 - 1 for Photoshop 5.0 and later, tells if bit 4 has useful information
370
388
  // 0x10 - pixel data irrelevant to appearance of document
371
- // 0x20 - ???
372
- // if (flags & 0x20) (layer as any)._2 = true; // TEMP !!!!
389
+ // 0x20 - effects/filters panel is expanded
373
390
  skipBytes(reader, 1);
374
391
  readSection(reader, 1, function (left) {
375
392
  var mask = readLayerMaskData(reader, options);
@@ -773,9 +790,9 @@ function readDataRLE(reader, pixelData, _width, height, step, offsets, large) {
773
790
  }
774
791
  else {
775
792
  for (var y = 0, p = offset | 0; y < height; y++, li++) {
776
- var length_1 = lengths[li];
777
- var buffer = readBytes(reader, length_1);
778
- for (var i = 0; i < length_1; i++) {
793
+ var length_2 = lengths[li];
794
+ var buffer = readBytes(reader, length_2);
795
+ for (var i = 0; i < length_2; i++) {
779
796
  var header = buffer[i];
780
797
  if (header > 128) {
781
798
  var value = buffer[++i];
@@ -919,7 +936,7 @@ function readPattern(reader) {
919
936
  var has = readUint32(reader);
920
937
  if (!has)
921
938
  continue;
922
- var length_2 = readUint32(reader);
939
+ var length_3 = readUint32(reader);
923
940
  var pixelDepth = readUint32(reader);
924
941
  var ctop = readUint32(reader);
925
942
  var cleft = readUint32(reader);
@@ -927,7 +944,7 @@ function readPattern(reader) {
927
944
  var cright = readUint32(reader);
928
945
  var pixelDepth2 = readUint16(reader);
929
946
  var compressionMode = readUint8(reader); // 0 - raw, 1 - zip
930
- var dataLength = length_2 - (4 + 16 + 2 + 1);
947
+ var dataLength = length_3 - (4 + 16 + 2 + 1);
931
948
  var cdata = readBytes(reader, dataLength);
932
949
  if (pixelDepth !== 8 || pixelDepth2 !== 8) {
933
950
  throw new Error('16bit pixel depth not supported for patterns');