ag-psd 16.0.0 → 17.0.1

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
@@ -387,6 +387,12 @@ export interface TextGridInfo {
387
387
  leadingFillColor?: Color;
388
388
  alignLineHeightToGridFlags?: boolean;
389
389
  }
390
+ export interface UnitsBounds {
391
+ top: UnitsValue;
392
+ left: UnitsValue;
393
+ right: UnitsValue;
394
+ bottom: UnitsValue;
395
+ }
390
396
  export interface LayerTextData {
391
397
  text: string;
392
398
  transform?: number[];
@@ -413,6 +419,8 @@ export interface LayerTextData {
413
419
  shapeType?: 'point' | 'box';
414
420
  pointBase?: number[];
415
421
  boxBounds?: number[];
422
+ bounds?: UnitsBounds;
423
+ boundingBox?: UnitsBounds;
416
424
  }
417
425
  export interface PatternInfo {
418
426
  name: string;
@@ -659,86 +667,444 @@ export interface LinkedFile {
659
667
  assetModTime?: number;
660
668
  assetLockedState?: number;
661
669
  }
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: {
670
+ type FilterVariant = {
671
+ type: 'average' | 'blur' | 'blur more';
672
+ } | {
673
+ type: 'box blur';
674
+ filter: {
675
+ radius: UnitsValue;
676
+ };
677
+ } | {
678
+ type: 'gaussian blur';
679
+ filter: {
680
+ radius: UnitsValue;
681
+ };
682
+ } | {
683
+ type: 'motion blur';
684
+ filter: {
685
+ angle: number;
686
+ distance: UnitsValue;
687
+ };
688
+ } | {
689
+ type: 'radial blur';
690
+ filter: {
691
+ amount: number;
692
+ method: 'spin' | 'zoom';
693
+ quality: 'draft' | 'good' | 'best';
694
+ };
695
+ } | {
696
+ type: 'shape blur';
697
+ filter: {
698
+ radius: UnitsValue;
699
+ customShape: {
700
+ name: string;
701
+ id: string;
702
+ };
703
+ };
704
+ } | {
705
+ type: 'smart blur';
706
+ filter: {
707
+ radius: number;
708
+ threshold: number;
709
+ quality: 'low' | 'medium' | 'high';
710
+ mode: 'normal' | 'edge only' | 'overlay edge';
711
+ };
712
+ } | {
713
+ type: 'surface blur';
714
+ filter: {
715
+ radius: UnitsValue;
716
+ threshold: number;
717
+ };
718
+ } | {
719
+ type: 'displace';
720
+ filter: {
721
+ horizontalScale: number;
722
+ verticalScale: number;
723
+ displacementMap: 'stretch to fit' | 'tile';
724
+ undefinedAreas: 'wrap around' | 'repeat edge pixels';
725
+ displacementFile: {
726
+ signature: string;
727
+ path: string;
728
+ };
729
+ };
730
+ } | {
731
+ type: 'pinch';
732
+ filter: {
733
+ amount: number;
734
+ };
735
+ } | {
736
+ type: 'polar coordinates';
737
+ filter: {
738
+ conversion: 'rectangular to polar' | 'polar to rectangular';
739
+ };
740
+ } | {
741
+ type: 'ripple';
742
+ filter: {
743
+ amount: number;
744
+ size: 'small' | 'medium' | 'large';
745
+ };
746
+ } | {
747
+ type: 'shear';
748
+ filter: {
749
+ shearPoints: {
675
750
  x: number;
676
751
  y: number;
677
752
  }[];
678
- indexArray: number[];
679
- pinOffsets: {
753
+ shearStart: number;
754
+ shearEnd: number;
755
+ undefinedAreas: 'wrap around' | 'repeat edge pixels';
756
+ };
757
+ } | {
758
+ type: 'spherize';
759
+ filter: {
760
+ amount: number;
761
+ mode: 'normal' | 'horizontal only' | 'vertical only';
762
+ };
763
+ } | {
764
+ type: 'twirl';
765
+ filter: {
766
+ angle: number;
767
+ };
768
+ } | {
769
+ type: 'wave';
770
+ filter: {
771
+ numberOfGenerators: number;
772
+ type: 'sine' | 'triangle' | 'square';
773
+ wavelength: {
774
+ min: number;
775
+ max: number;
776
+ };
777
+ amplitude: {
778
+ min: number;
779
+ max: number;
780
+ };
781
+ scale: {
680
782
  x: number;
681
783
  y: number;
784
+ };
785
+ randomSeed: number;
786
+ undefinedAreas: 'wrap around' | 'repeat edge pixels';
787
+ };
788
+ } | {
789
+ type: 'zigzag';
790
+ filter: {
791
+ amount: number;
792
+ ridges: number;
793
+ style: 'around center' | 'out from center' | 'pond ripples';
794
+ };
795
+ } | {
796
+ type: 'add noise';
797
+ filter: {
798
+ amount: number;
799
+ distribution: 'uniform' | 'gaussian';
800
+ monochromatic: boolean;
801
+ randomSeed: number;
802
+ };
803
+ } | {
804
+ type: 'despeckle';
805
+ } | {
806
+ type: 'dust and scratches';
807
+ filter: {
808
+ radius: number;
809
+ threshold: number;
810
+ };
811
+ } | {
812
+ type: 'median';
813
+ filter: {
814
+ radius: UnitsValue;
815
+ };
816
+ } | {
817
+ type: 'reduce noise';
818
+ filter: {
819
+ preset: string;
820
+ removeJpegArtifact: boolean;
821
+ reduceColorNoise: number;
822
+ sharpenDetails: number;
823
+ channelDenoise: {
824
+ channels: ('red' | 'green' | 'blue' | 'composite')[];
825
+ amount: number;
826
+ preserveDetails?: number;
682
827
  }[];
683
- posFinalPins: {
828
+ };
829
+ } | {
830
+ type: 'color halftone';
831
+ filter: {
832
+ radius: number;
833
+ angle1: number;
834
+ angle2: number;
835
+ angle3: number;
836
+ angle4: number;
837
+ };
838
+ } | {
839
+ type: 'crystallize';
840
+ filter: {
841
+ cellSize: number;
842
+ randomSeed: number;
843
+ };
844
+ } | {
845
+ type: 'facet' | 'fragment';
846
+ } | {
847
+ type: 'mezzotint';
848
+ filter: {
849
+ type: 'fine dots' | 'medium dots' | 'grainy dots' | 'coarse dots' | 'short lines' | 'medium lines' | 'long lines' | 'short strokes' | 'medium strokes' | 'long strokes';
850
+ randomSeed: number;
851
+ };
852
+ } | {
853
+ type: 'mosaic';
854
+ filter: {
855
+ cellSize: UnitsValue;
856
+ };
857
+ } | {
858
+ type: 'pointillize';
859
+ filter: {
860
+ cellSize: number;
861
+ randomSeed: number;
862
+ };
863
+ } | {
864
+ type: 'clouds';
865
+ filter: {
866
+ randomSeed: number;
867
+ };
868
+ } | {
869
+ type: 'difference clouds';
870
+ filter: {
871
+ randomSeed: number;
872
+ };
873
+ } | {
874
+ type: 'fibers';
875
+ filter: {
876
+ variance: number;
877
+ strength: number;
878
+ randomSeed: number;
879
+ };
880
+ } | {
881
+ type: 'lens flare';
882
+ filter: {
883
+ brightness: number;
884
+ position: {
684
885
  x: number;
685
886
  y: number;
686
- }[];
687
- pinVertexIndices: number[];
688
- selectedPin: number[];
689
- pinPosition: {
887
+ };
888
+ lensType: '50-300mm zoom' | '32mm prime' | '105mm prime' | 'movie prime';
889
+ };
890
+ } | {
891
+ type: 'sharpen' | 'sharpen edges' | 'sharpen more';
892
+ } | {
893
+ type: 'smart sharpen';
894
+ filter: {
895
+ amount: number;
896
+ radius: UnitsValue;
897
+ threshold: number;
898
+ angle: number;
899
+ moreAccurate: boolean;
900
+ blur: 'gaussian blur' | 'lens blur' | 'motion blur';
901
+ preset: string;
902
+ shadow: {
903
+ fadeAmount: number;
904
+ tonalWidth: number;
905
+ radius: number;
906
+ };
907
+ highlight: {
908
+ fadeAmount: number;
909
+ tonalWidth: number;
910
+ radius: number;
911
+ };
912
+ };
913
+ } | {
914
+ type: 'unsharp mask';
915
+ filter: {
916
+ amount: number;
917
+ radius: UnitsValue;
918
+ threshold: number;
919
+ };
920
+ } | {
921
+ type: 'diffuse';
922
+ filter: {
923
+ mode: 'normal' | 'darken only' | 'lighten only' | 'anisotropic';
924
+ randomSeed: number;
925
+ };
926
+ } | {
927
+ type: 'emboss';
928
+ filter: {
929
+ angle: number;
930
+ height: number;
931
+ amount: number;
932
+ };
933
+ } | {
934
+ type: 'extrude';
935
+ filter: {
936
+ type: 'blocks' | 'pyramids';
937
+ size: number;
938
+ depth: number;
939
+ depthMode: 'random' | 'level-based';
940
+ randomSeed: number;
941
+ solidFrontFaces: boolean;
942
+ maskIncompleteBlocks: boolean;
943
+ };
944
+ } | {
945
+ type: 'find edges' | 'solarize';
946
+ } | {
947
+ type: 'tiles';
948
+ filter: {
949
+ numberOfTiles: number;
950
+ maximumOffset: number;
951
+ fillEmptyAreaWith: 'background color' | 'foreground color' | 'inverse image' | 'unaltered image';
952
+ randomSeed: number;
953
+ };
954
+ } | {
955
+ type: 'trace contour';
956
+ filter: {
957
+ level: number;
958
+ edge: 'lower' | 'upper';
959
+ };
960
+ } | {
961
+ type: 'wind';
962
+ filter: {
963
+ method: 'wind' | 'blast' | 'stagger';
964
+ direction: 'left' | 'right';
965
+ };
966
+ } | {
967
+ type: 'de-interlace';
968
+ filter: {
969
+ eliminate: 'odd lines' | 'even lines';
970
+ newFieldsBy: 'duplication' | 'interpolation';
971
+ };
972
+ } | {
973
+ type: 'ntsc colors';
974
+ } | {
975
+ type: 'custom';
976
+ filter: {
977
+ scale: number;
978
+ offset: number;
979
+ matrix: number[];
980
+ };
981
+ } | {
982
+ type: 'high pass' | 'maximum' | 'minimum';
983
+ filter: {
984
+ radius: UnitsValue;
985
+ };
986
+ } | {
987
+ type: 'offset';
988
+ filter: {
989
+ horizontal: number;
990
+ vertical: number;
991
+ undefinedAreas: 'set to transparent' | 'repeat edge pixels' | 'wrap around';
992
+ };
993
+ } | {
994
+ type: 'puppet';
995
+ filter: {
996
+ rigidType: boolean;
997
+ bounds: {
690
998
  x: number;
691
999
  y: number;
692
1000
  }[];
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;
1001
+ puppetShapeList: {
1002
+ rigidType: boolean;
1003
+ originalVertexArray: {
1004
+ x: number;
1005
+ y: number;
1006
+ }[];
1007
+ deformedVertexArray: {
1008
+ x: number;
1009
+ y: number;
1010
+ }[];
1011
+ indexArray: number[];
1012
+ pinOffsets: {
1013
+ x: number;
1014
+ y: number;
1015
+ }[];
1016
+ posFinalPins: {
1017
+ x: number;
1018
+ y: number;
1019
+ }[];
1020
+ pinVertexIndices: number[];
1021
+ selectedPin: number[];
1022
+ pinPosition: {
1023
+ x: number;
1024
+ y: number;
1025
+ }[];
1026
+ pinRotation: number[];
1027
+ pinOverlay: boolean[];
1028
+ pinDepth: number[];
1029
+ meshQuality: number;
1030
+ meshExpansion: number;
1031
+ meshRigidity: number;
1032
+ imageResolution: number;
1033
+ meshBoundaryPath: {
1034
+ pathComponents: {
1035
+ shapeOperation: string;
1036
+ paths: {
1037
+ closed: boolean;
1038
+ points: {
1039
+ anchor: {
1040
+ x: UnitsValue;
1041
+ y: UnitsValue;
1042
+ };
1043
+ forward: {
1044
+ x: UnitsValue;
1045
+ y: UnitsValue;
1046
+ };
1047
+ backward: {
1048
+ x: UnitsValue;
1049
+ y: UnitsValue;
1050
+ };
1051
+ smooth: boolean;
1052
+ }[];
719
1053
  }[];
720
1054
  }[];
721
- }[];
722
- };
723
- }[];
724
- }
1055
+ };
1056
+ }[];
1057
+ };
1058
+ } | {
1059
+ type: 'oil paint plugin';
1060
+ filter: {
1061
+ name: string;
1062
+ gpu: boolean;
1063
+ lighting: boolean;
1064
+ parameters: {
1065
+ name: string;
1066
+ value: number;
1067
+ }[];
1068
+ };
1069
+ } | {
1070
+ type: 'hsb/hsl';
1071
+ filter: {
1072
+ inputMode: 'rgb' | 'hsb' | 'hsl';
1073
+ rowOrder: 'rgb' | 'hsb' | 'hsl';
1074
+ };
1075
+ } | {
1076
+ type: 'oil paint';
1077
+ filter: {
1078
+ lightingOn: boolean;
1079
+ stylization: number;
1080
+ cleanliness: number;
1081
+ brushScale: number;
1082
+ microBrush: number;
1083
+ lightDirection: number;
1084
+ specularity: number;
1085
+ };
1086
+ } | {
1087
+ type: 'liquify';
1088
+ filter: {
1089
+ liquifyMesh: Uint8Array;
1090
+ };
1091
+ };
1092
+ export type Filter = FilterVariant & {
1093
+ name: string;
1094
+ opacity: number;
1095
+ blendMode: BlendMode;
1096
+ enabled: boolean;
1097
+ hasOptions: boolean;
1098
+ foregroundColor: Color;
1099
+ backgroundColor: Color;
1100
+ };
725
1101
  export interface PlacedLayerFilter {
726
1102
  enabled: boolean;
727
1103
  validAtPosition: boolean;
728
1104
  maskEnabled: boolean;
729
1105
  maskLinked: boolean;
730
1106
  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
- }[];
1107
+ list: Filter[];
742
1108
  }
743
1109
  export type PlacedLayerType = 'unknown' | 'vector' | 'raster' | 'image stack';
744
1110
  export interface PlacedLayer {
@@ -973,7 +1339,22 @@ export interface LayerAdditionalInfo {
973
1339
  unifyLayerVisibility?: boolean;
974
1340
  };
975
1341
  timeline?: Timeline;
976
- filterEffects?: any;
1342
+ filterEffectsMasks?: {
1343
+ id: string;
1344
+ top: number;
1345
+ left: number;
1346
+ bottom: number;
1347
+ right: number;
1348
+ depth: number;
1349
+ channels: ({
1350
+ compressionMode: number;
1351
+ data: Uint8Array;
1352
+ } | undefined)[];
1353
+ extra?: {
1354
+ compressionMode: number;
1355
+ data: Uint8Array;
1356
+ };
1357
+ }[];
977
1358
  engineData?: string;
978
1359
  }
979
1360
  export interface ImageResources {
@@ -1205,6 +1586,7 @@ export interface Layer extends LayerAdditionalInfo {
1205
1586
  blendMode?: BlendMode;
1206
1587
  opacity?: number;
1207
1588
  transparencyProtected?: boolean;
1589
+ effectsOpen?: boolean;
1208
1590
  hidden?: boolean;
1209
1591
  clipping?: boolean;
1210
1592
  canvas?: HTMLCanvasElement;
@@ -1286,3 +1668,4 @@ export interface WriteOptions {
1286
1668
  * with some software. It may also be significantly slower. */
1287
1669
  compress?: boolean;
1288
1670
  }
1671
+ 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');