ag-psd 14.5.2 → 15.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/CHANGELOG.md +3 -0
- package/dist/abr.js +1 -1
- package/dist/additionalInfo.d.ts +2 -1
- package/dist/additionalInfo.js +187 -713
- package/dist/bundle.js +1768 -1253
- package/dist/descriptor.d.ts +156 -1
- package/dist/descriptor.js +876 -23
- package/dist/imageResources.js +207 -19
- package/dist/initializeCanvas.d.ts +1 -1
- package/dist/initializeCanvas.js +6 -1
- package/dist/psd.d.ts +159 -0
- package/dist/psd.js +1 -1
- package/dist/psdReader.js +6 -6
- package/dist/psdWriter.js +2 -2
- package/dist-es/abr.js +1 -1
- package/dist-es/additionalInfo.d.ts +2 -1
- package/dist-es/additionalInfo.js +168 -694
- package/dist-es/descriptor.d.ts +156 -1
- package/dist-es/descriptor.js +865 -22
- package/dist-es/imageResources.js +209 -21
- package/dist-es/initializeCanvas.d.ts +1 -1
- package/dist-es/initializeCanvas.js +4 -1
- package/dist-es/psd.d.ts +159 -0
- package/dist-es/psd.js +1 -1
- package/dist-es/psdReader.js +6 -6
- package/dist-es/psdWriter.js +2 -2
- package/package.json +1 -1
- package/test.js +0 -17
package/dist/bundle.js
CHANGED
|
@@ -387,35 +387,35 @@ addHandler('TySh', hasKey('text'), function (reader, target, leftBytes) {
|
|
|
387
387
|
addHandler('SoCo', function (target) { return target.vectorFill !== undefined && target.vectorStroke === undefined &&
|
|
388
388
|
target.vectorFill.type === 'color'; }, function (reader, target) {
|
|
389
389
|
var descriptor = (0, descriptor_1.readVersionAndDescriptor)(reader);
|
|
390
|
-
target.vectorFill = parseVectorContent(descriptor);
|
|
390
|
+
target.vectorFill = (0, descriptor_1.parseVectorContent)(descriptor);
|
|
391
391
|
}, function (writer, target) {
|
|
392
|
-
var descriptor = serializeVectorContent(target.vectorFill).descriptor;
|
|
392
|
+
var descriptor = (0, descriptor_1.serializeVectorContent)(target.vectorFill).descriptor;
|
|
393
393
|
(0, descriptor_1.writeVersionAndDescriptor)(writer, '', 'null', descriptor);
|
|
394
394
|
});
|
|
395
395
|
addHandler('GdFl', function (target) { return target.vectorFill !== undefined && target.vectorStroke === undefined &&
|
|
396
396
|
(target.vectorFill.type === 'solid' || target.vectorFill.type === 'noise'); }, function (reader, target, left) {
|
|
397
397
|
var descriptor = (0, descriptor_1.readVersionAndDescriptor)(reader);
|
|
398
|
-
target.vectorFill = parseVectorContent(descriptor);
|
|
398
|
+
target.vectorFill = (0, descriptor_1.parseVectorContent)(descriptor);
|
|
399
399
|
(0, psdReader_1.skipBytes)(reader, left());
|
|
400
400
|
}, function (writer, target) {
|
|
401
|
-
var descriptor = serializeVectorContent(target.vectorFill).descriptor;
|
|
401
|
+
var descriptor = (0, descriptor_1.serializeVectorContent)(target.vectorFill).descriptor;
|
|
402
402
|
(0, descriptor_1.writeVersionAndDescriptor)(writer, '', 'null', descriptor);
|
|
403
403
|
});
|
|
404
404
|
addHandler('PtFl', function (target) { return target.vectorFill !== undefined && target.vectorStroke === undefined &&
|
|
405
405
|
target.vectorFill.type === 'pattern'; }, function (reader, target) {
|
|
406
406
|
var descriptor = (0, descriptor_1.readVersionAndDescriptor)(reader);
|
|
407
|
-
target.vectorFill = parseVectorContent(descriptor);
|
|
407
|
+
target.vectorFill = (0, descriptor_1.parseVectorContent)(descriptor);
|
|
408
408
|
}, function (writer, target) {
|
|
409
|
-
var descriptor = serializeVectorContent(target.vectorFill).descriptor;
|
|
409
|
+
var descriptor = (0, descriptor_1.serializeVectorContent)(target.vectorFill).descriptor;
|
|
410
410
|
(0, descriptor_1.writeVersionAndDescriptor)(writer, '', 'null', descriptor);
|
|
411
411
|
});
|
|
412
412
|
addHandler('vscg', function (target) { return target.vectorFill !== undefined && target.vectorStroke !== undefined; }, function (reader, target, left) {
|
|
413
413
|
(0, psdReader_1.readSignature)(reader); // key
|
|
414
414
|
var desc = (0, descriptor_1.readVersionAndDescriptor)(reader);
|
|
415
|
-
target.vectorFill = parseVectorContent(desc);
|
|
415
|
+
target.vectorFill = (0, descriptor_1.parseVectorContent)(desc);
|
|
416
416
|
(0, psdReader_1.skipBytes)(reader, left());
|
|
417
417
|
}, function (writer, target) {
|
|
418
|
-
var _a = serializeVectorContent(target.vectorFill), descriptor = _a.descriptor, key = _a.key;
|
|
418
|
+
var _a = (0, descriptor_1.serializeVectorContent)(target.vectorFill), descriptor = _a.descriptor, key = _a.key;
|
|
419
419
|
(0, psdWriter_1.writeSignature)(writer, key);
|
|
420
420
|
(0, descriptor_1.writeVersionAndDescriptor)(writer, '', 'null', descriptor);
|
|
421
421
|
});
|
|
@@ -660,10 +660,10 @@ addHandler('lmfx', function (target) { return target.effects !== undefined && ha
|
|
|
660
660
|
var desc = (0, descriptor_1.readVersionAndDescriptor)(reader);
|
|
661
661
|
// console.log(require('util').inspect(info, false, 99, true));
|
|
662
662
|
// discard if read in 'lrFX' or 'lfx2' section
|
|
663
|
-
target.effects = parseEffects(desc, !!options.logMissingFeatures);
|
|
663
|
+
target.effects = (0, descriptor_1.parseEffects)(desc, !!options.logMissingFeatures);
|
|
664
664
|
(0, psdReader_1.skipBytes)(reader, left());
|
|
665
665
|
}, function (writer, target, _, options) {
|
|
666
|
-
var desc = serializeEffects(target.effects, !!options.logMissingFeatures, true);
|
|
666
|
+
var desc = (0, descriptor_1.serializeEffects)(target.effects, !!options.logMissingFeatures, true);
|
|
667
667
|
(0, psdWriter_1.writeUint32)(writer, 0); // version
|
|
668
668
|
(0, descriptor_1.writeVersionAndDescriptor)(writer, '', 'null', desc);
|
|
669
669
|
});
|
|
@@ -684,10 +684,11 @@ addHandler('luni', hasKey('name'), function (reader, target, left) {
|
|
|
684
684
|
addHandler('lnsr', hasKey('nameSource'), function (reader, target) { return target.nameSource = (0, psdReader_1.readSignature)(reader); }, function (writer, target) { return (0, psdWriter_1.writeSignature)(writer, target.nameSource); });
|
|
685
685
|
addHandler('lyid', hasKey('id'), function (reader, target) { return target.id = (0, psdReader_1.readUint32)(reader); }, function (writer, target, _psd, options) {
|
|
686
686
|
var id = target.id;
|
|
687
|
-
while (options.layerIds.
|
|
687
|
+
while (options.layerIds.has(id))
|
|
688
688
|
id += 100; // make sure we don't have duplicate layer ids
|
|
689
689
|
(0, psdWriter_1.writeUint32)(writer, id);
|
|
690
|
-
options.layerIds.
|
|
690
|
+
options.layerIds.add(id);
|
|
691
|
+
options.layerToId.set(target, id);
|
|
691
692
|
});
|
|
692
693
|
addHandler('lsct', hasKey('sectionDivider'), function (reader, target, left) {
|
|
693
694
|
target.sectionDivider = { type: (0, psdReader_1.readUint32)(reader) };
|
|
@@ -764,7 +765,8 @@ addHandler('lclr', hasKey('layerColor'), function (reader, target) {
|
|
|
764
765
|
(0, psdWriter_1.writeUint16)(writer, index === -1 ? 0 : index);
|
|
765
766
|
(0, psdWriter_1.writeZeros)(writer, 6);
|
|
766
767
|
});
|
|
767
|
-
addHandler('shmd',
|
|
768
|
+
addHandler('shmd', function (target) { return target.timestamp !== undefined || target.animationFrames !== undefined ||
|
|
769
|
+
target.animationFrameFlags !== undefined || target.timeline !== undefined; }, function (reader, target, left, _, options) {
|
|
768
770
|
var count = (0, psdReader_1.readUint32)(reader);
|
|
769
771
|
var _loop_1 = function (i) {
|
|
770
772
|
(0, psdReader_1.checkSignature)(reader, '8BIM');
|
|
@@ -774,28 +776,62 @@ addHandler('shmd', hasKey('timestamp'), function (reader, target, left, _, optio
|
|
|
774
776
|
(0, psdReader_1.readSection)(reader, 1, function (left) {
|
|
775
777
|
if (key === 'cust') {
|
|
776
778
|
var desc = (0, descriptor_1.readVersionAndDescriptor)(reader);
|
|
779
|
+
// console.log('cust', target.name, require('util').inspect(desc, false, 99, true));
|
|
777
780
|
if (desc.layerTime !== undefined)
|
|
778
781
|
target.timestamp = desc.layerTime;
|
|
779
782
|
}
|
|
780
783
|
else if (key === 'mlst') {
|
|
781
784
|
var desc = (0, descriptor_1.readVersionAndDescriptor)(reader);
|
|
782
|
-
|
|
783
|
-
|
|
785
|
+
// console.log('mlst', target.name, require('util').inspect(desc, false, 99, true));
|
|
786
|
+
target.animationFrames = [];
|
|
787
|
+
for (var i_1 = 0; i_1 < desc.LaSt.length; i_1++) {
|
|
788
|
+
var f = desc.LaSt[i_1];
|
|
789
|
+
var frame = { frames: f.FrLs };
|
|
790
|
+
if (f.enab !== undefined)
|
|
791
|
+
frame.enable = f.enab;
|
|
792
|
+
if (f.Ofst)
|
|
793
|
+
frame.offset = (0, descriptor_1.horzVrtcToXY)(f.Ofst);
|
|
794
|
+
if (f.FXRf)
|
|
795
|
+
frame.referencePoint = (0, descriptor_1.horzVrtcToXY)(f.FXRf);
|
|
796
|
+
if (f.Lefx)
|
|
797
|
+
frame.effects = (0, descriptor_1.parseEffects)(f.Lefx, !!options.logMissingFeatures);
|
|
798
|
+
if (f.blendOptions && f.blendOptions.Opct)
|
|
799
|
+
frame.opacity = (0, descriptor_1.parsePercent)(f.blendOptions.Opct);
|
|
800
|
+
target.animationFrames.push(frame);
|
|
801
|
+
}
|
|
784
802
|
}
|
|
785
803
|
else if (key === 'mdyn') {
|
|
786
804
|
// frame flags
|
|
787
|
-
|
|
805
|
+
(0, psdReader_1.readUint16)(reader); // unknown
|
|
788
806
|
var propagate = (0, psdReader_1.readUint8)(reader);
|
|
789
807
|
var flags = (0, psdReader_1.readUint8)(reader);
|
|
790
|
-
|
|
791
|
-
|
|
792
|
-
|
|
793
|
-
|
|
794
|
-
|
|
795
|
-
|
|
808
|
+
target.animationFrameFlags = {
|
|
809
|
+
propagateFrameOne: !propagate,
|
|
810
|
+
unifyLayerPosition: (flags & 1) !== 0,
|
|
811
|
+
unifyLayerStyle: (flags & 2) !== 0,
|
|
812
|
+
unifyLayerVisibility: (flags & 4) !== 0,
|
|
813
|
+
};
|
|
814
|
+
}
|
|
815
|
+
else if (key === 'tmln') {
|
|
816
|
+
var desc = (0, descriptor_1.readVersionAndDescriptor)(reader);
|
|
817
|
+
var timeScope = desc.timeScope;
|
|
818
|
+
// console.log('tmln', target.name, target.id, require('util').inspect(desc, false, 99, true));
|
|
819
|
+
var timeline = {
|
|
820
|
+
start: timeScope.Strt,
|
|
821
|
+
duration: timeScope.duration,
|
|
822
|
+
inTime: timeScope.inTime,
|
|
823
|
+
outTime: timeScope.outTime,
|
|
824
|
+
autoScope: desc.autoScope,
|
|
825
|
+
audioLevel: desc.audioLevel,
|
|
826
|
+
};
|
|
827
|
+
if (desc.trackList) {
|
|
828
|
+
timeline.tracks = (0, descriptor_1.parseTrackList)(desc.trackList, !!options.logMissingFeatures);
|
|
829
|
+
}
|
|
830
|
+
target.timeline = timeline;
|
|
831
|
+
// console.log('tmln:result', target.name, target.id, require('util').inspect(timeline, false, 99, true));
|
|
796
832
|
}
|
|
797
833
|
else {
|
|
798
|
-
options.logDevFeatures && console.log('Unhandled
|
|
834
|
+
options.logDevFeatures && console.log('Unhandled "shmd" section key', key);
|
|
799
835
|
}
|
|
800
836
|
(0, psdReader_1.skipBytes)(reader, left());
|
|
801
837
|
});
|
|
@@ -804,16 +840,102 @@ addHandler('shmd', hasKey('timestamp'), function (reader, target, left, _, optio
|
|
|
804
840
|
_loop_1(i);
|
|
805
841
|
}
|
|
806
842
|
(0, psdReader_1.skipBytes)(reader, left());
|
|
807
|
-
}, function (writer, target) {
|
|
808
|
-
var
|
|
809
|
-
|
|
810
|
-
|
|
811
|
-
|
|
812
|
-
|
|
813
|
-
|
|
814
|
-
|
|
815
|
-
|
|
816
|
-
|
|
843
|
+
}, function (writer, target, _, options) {
|
|
844
|
+
var animationFrames = target.animationFrames, animationFrameFlags = target.animationFrameFlags, timestamp = target.timestamp, timeline = target.timeline;
|
|
845
|
+
var count = 0;
|
|
846
|
+
if (animationFrames)
|
|
847
|
+
count++;
|
|
848
|
+
if (animationFrameFlags)
|
|
849
|
+
count++;
|
|
850
|
+
if (timeline)
|
|
851
|
+
count++;
|
|
852
|
+
if (timestamp !== undefined)
|
|
853
|
+
count++;
|
|
854
|
+
(0, psdWriter_1.writeUint32)(writer, count);
|
|
855
|
+
if (animationFrames) {
|
|
856
|
+
(0, psdWriter_1.writeSignature)(writer, '8BIM');
|
|
857
|
+
(0, psdWriter_1.writeSignature)(writer, 'mlst');
|
|
858
|
+
(0, psdWriter_1.writeUint8)(writer, 0); // copy (always false)
|
|
859
|
+
(0, psdWriter_1.writeZeros)(writer, 3);
|
|
860
|
+
(0, psdWriter_1.writeSection)(writer, 2, function () {
|
|
861
|
+
var _a;
|
|
862
|
+
var desc = {
|
|
863
|
+
LaID: (_a = target.id) !== null && _a !== void 0 ? _a : 0,
|
|
864
|
+
LaSt: [],
|
|
865
|
+
};
|
|
866
|
+
for (var i = 0; i < animationFrames.length; i++) {
|
|
867
|
+
var f = animationFrames[i];
|
|
868
|
+
var frame = {};
|
|
869
|
+
if (f.enable !== undefined)
|
|
870
|
+
frame.enab = f.enable;
|
|
871
|
+
frame.FrLs = f.frames;
|
|
872
|
+
if (f.offset)
|
|
873
|
+
frame.Ofst = (0, descriptor_1.xyToHorzVrtc)(f.offset);
|
|
874
|
+
if (f.referencePoint)
|
|
875
|
+
frame.FXRf = (0, descriptor_1.xyToHorzVrtc)(f.referencePoint);
|
|
876
|
+
if (f.effects)
|
|
877
|
+
frame.Lefx = (0, descriptor_1.serializeEffects)(f.effects, false, false);
|
|
878
|
+
if (f.opacity !== undefined)
|
|
879
|
+
frame.blendOptions = { Opct: (0, descriptor_1.unitsPercent)(f.opacity) };
|
|
880
|
+
desc.LaSt.push(frame);
|
|
881
|
+
}
|
|
882
|
+
(0, descriptor_1.writeVersionAndDescriptor)(writer, '', 'null', desc);
|
|
883
|
+
}, true);
|
|
884
|
+
}
|
|
885
|
+
if (animationFrameFlags) {
|
|
886
|
+
(0, psdWriter_1.writeSignature)(writer, '8BIM');
|
|
887
|
+
(0, psdWriter_1.writeSignature)(writer, 'mdyn');
|
|
888
|
+
(0, psdWriter_1.writeUint8)(writer, 0); // copy (always false)
|
|
889
|
+
(0, psdWriter_1.writeZeros)(writer, 3);
|
|
890
|
+
(0, psdWriter_1.writeSection)(writer, 2, function () {
|
|
891
|
+
(0, psdWriter_1.writeUint16)(writer, 0); // unknown
|
|
892
|
+
(0, psdWriter_1.writeUint8)(writer, animationFrameFlags.propagateFrameOne ? 0x0 : 0xf);
|
|
893
|
+
(0, psdWriter_1.writeUint8)(writer, (animationFrameFlags.unifyLayerPosition ? 1 : 0) |
|
|
894
|
+
(animationFrameFlags.unifyLayerStyle ? 2 : 0) |
|
|
895
|
+
(animationFrameFlags.unifyLayerVisibility ? 4 : 0));
|
|
896
|
+
});
|
|
897
|
+
}
|
|
898
|
+
if (timeline) {
|
|
899
|
+
(0, psdWriter_1.writeSignature)(writer, '8BIM');
|
|
900
|
+
(0, psdWriter_1.writeSignature)(writer, 'tmln');
|
|
901
|
+
(0, psdWriter_1.writeUint8)(writer, 0); // copy (always false)
|
|
902
|
+
(0, psdWriter_1.writeZeros)(writer, 3);
|
|
903
|
+
(0, psdWriter_1.writeSection)(writer, 2, function () {
|
|
904
|
+
var desc = {
|
|
905
|
+
Vrsn: 1,
|
|
906
|
+
timeScope: {
|
|
907
|
+
Vrsn: 1,
|
|
908
|
+
Strt: timeline.start,
|
|
909
|
+
duration: timeline.duration,
|
|
910
|
+
inTime: timeline.inTime,
|
|
911
|
+
outTime: timeline.outTime,
|
|
912
|
+
},
|
|
913
|
+
autoScope: timeline.autoScope,
|
|
914
|
+
audioLevel: timeline.audioLevel,
|
|
915
|
+
};
|
|
916
|
+
if (timeline.tracks) {
|
|
917
|
+
desc.trackList = (0, descriptor_1.serializeTrackList)(timeline.tracks);
|
|
918
|
+
}
|
|
919
|
+
var id = options.layerToId.get(target) || target.id || 0;
|
|
920
|
+
if (!id)
|
|
921
|
+
throw new Error('You need to provide layer.id value whan writing document with animations');
|
|
922
|
+
desc.LyrI = id;
|
|
923
|
+
// console.log('WRITE:tmln', target.name, target.id, require('util').inspect(desc, false, 99, true));
|
|
924
|
+
(0, descriptor_1.writeVersionAndDescriptor)(writer, '', 'null', desc, 'anim');
|
|
925
|
+
}, true);
|
|
926
|
+
}
|
|
927
|
+
if (timestamp !== undefined) {
|
|
928
|
+
(0, psdWriter_1.writeSignature)(writer, '8BIM');
|
|
929
|
+
(0, psdWriter_1.writeSignature)(writer, 'cust');
|
|
930
|
+
(0, psdWriter_1.writeUint8)(writer, 0); // copy (always false)
|
|
931
|
+
(0, psdWriter_1.writeZeros)(writer, 3);
|
|
932
|
+
(0, psdWriter_1.writeSection)(writer, 2, function () {
|
|
933
|
+
var desc = {
|
|
934
|
+
layerTime: timestamp,
|
|
935
|
+
};
|
|
936
|
+
(0, descriptor_1.writeVersionAndDescriptor)(writer, '', 'metadata', desc);
|
|
937
|
+
}, true);
|
|
938
|
+
}
|
|
817
939
|
});
|
|
818
940
|
addHandler('vstk', hasKey('vectorStroke'), function (reader, target, left) {
|
|
819
941
|
var desc = (0, descriptor_1.readVersionAndDescriptor)(reader);
|
|
@@ -832,7 +954,7 @@ addHandler('vstk', hasKey('vectorStroke'), function (reader, target, left) {
|
|
|
832
954
|
lineDashSet: desc.strokeStyleLineDashSet.map(descriptor_1.parseUnits),
|
|
833
955
|
blendMode: descriptor_1.BlnM.decode(desc.strokeStyleBlendMode),
|
|
834
956
|
opacity: (0, descriptor_1.parsePercent)(desc.strokeStyleOpacity),
|
|
835
|
-
content: parseVectorContent(desc.strokeStyleContent),
|
|
957
|
+
content: (0, descriptor_1.parseVectorContent)(desc.strokeStyleContent),
|
|
836
958
|
resolution: desc.strokeStyleResolution,
|
|
837
959
|
};
|
|
838
960
|
(0, psdReader_1.skipBytes)(reader, left());
|
|
@@ -854,7 +976,7 @@ addHandler('vstk', hasKey('vectorStroke'), function (reader, target, left) {
|
|
|
854
976
|
strokeStyleLineDashSet: stroke.lineDashSet || [],
|
|
855
977
|
strokeStyleBlendMode: descriptor_1.BlnM.encode(stroke.blendMode),
|
|
856
978
|
strokeStyleOpacity: (0, descriptor_1.unitsPercent)((_b = stroke.opacity) !== null && _b !== void 0 ? _b : 1),
|
|
857
|
-
strokeStyleContent: serializeVectorContent(stroke.content || { type: 'color', color: { r: 0, g: 0, b: 0 } }).descriptor,
|
|
979
|
+
strokeStyleContent: (0, descriptor_1.serializeVectorContent)(stroke.content || { type: 'color', color: { r: 0, g: 0, b: 0 } }).descriptor,
|
|
858
980
|
strokeStyleResolution: (_c = stroke.resolution) !== null && _c !== void 0 ? _c : 72,
|
|
859
981
|
};
|
|
860
982
|
(0, descriptor_1.writeVersionAndDescriptor)(writer, '', 'strokeStyle', descriptor);
|
|
@@ -867,7 +989,7 @@ hasKey('artboard'), function (reader, target, left) {
|
|
|
867
989
|
rect: { top: rect['Top '], left: rect.Left, bottom: rect.Btom, right: rect.Rght },
|
|
868
990
|
guideIndices: desc.guideIndeces,
|
|
869
991
|
presetName: desc.artboardPresetName,
|
|
870
|
-
color: parseColor(desc['Clr ']),
|
|
992
|
+
color: (0, descriptor_1.parseColor)(desc['Clr ']),
|
|
871
993
|
backgroundType: desc.artboardBackgroundType,
|
|
872
994
|
};
|
|
873
995
|
(0, psdReader_1.skipBytes)(reader, left());
|
|
@@ -879,7 +1001,7 @@ hasKey('artboard'), function (reader, target, left) {
|
|
|
879
1001
|
artboardRect: { 'Top ': rect.top, Left: rect.left, Btom: rect.bottom, Rght: rect.right },
|
|
880
1002
|
guideIndeces: artboard.guideIndices || [],
|
|
881
1003
|
artboardPresetName: artboard.presetName || '',
|
|
882
|
-
'Clr ': serializeColor(artboard.color),
|
|
1004
|
+
'Clr ': (0, descriptor_1.serializeColor)(artboard.color),
|
|
883
1005
|
artboardBackgroundType: (_a = artboard.backgroundType) !== null && _a !== void 0 ? _a : 1,
|
|
884
1006
|
};
|
|
885
1007
|
(0, descriptor_1.writeVersionAndDescriptor)(writer, '', 'artboard', desc);
|
|
@@ -989,8 +1111,8 @@ addHandler('PlLd', hasKey('placedLayer'), function (reader, target, left) {
|
|
|
989
1111
|
if ((0, psdReader_1.readInt32)(reader) !== 3)
|
|
990
1112
|
throw new Error("Invalid PlLd version");
|
|
991
1113
|
var id = (0, psdReader_1.readPascalString)(reader, 1);
|
|
992
|
-
(0, psdReader_1.readInt32)(reader);
|
|
993
|
-
(0, psdReader_1.readInt32)(reader); //
|
|
1114
|
+
var pageNumber = (0, psdReader_1.readInt32)(reader);
|
|
1115
|
+
var totalPages = (0, psdReader_1.readInt32)(reader); // TODO: check how this works ?
|
|
994
1116
|
(0, psdReader_1.readInt32)(reader); // anitAliasPolicy 16
|
|
995
1117
|
var placedLayerType = (0, psdReader_1.readInt32)(reader); // 0 = unknown, 1 = vector, 2 = raster, 3 = image stack
|
|
996
1118
|
if (!placedLayerTypes[placedLayerType])
|
|
@@ -1005,8 +1127,8 @@ addHandler('PlLd', hasKey('placedLayer'), function (reader, target, left) {
|
|
|
1005
1127
|
target.placedLayer = target.placedLayer || {
|
|
1006
1128
|
id: id,
|
|
1007
1129
|
type: placedLayerTypes[placedLayerType],
|
|
1008
|
-
|
|
1009
|
-
|
|
1130
|
+
pageNumber: pageNumber,
|
|
1131
|
+
totalPages: totalPages,
|
|
1010
1132
|
transform: transform,
|
|
1011
1133
|
warp: parseWarp(warp),
|
|
1012
1134
|
};
|
|
@@ -1044,11 +1166,11 @@ addHandler('SoLd', hasKey('placedLayer'), function (reader, target, left) {
|
|
|
1044
1166
|
id: desc.Idnt,
|
|
1045
1167
|
placed: desc.placed,
|
|
1046
1168
|
type: placedLayerTypes[desc.Type],
|
|
1047
|
-
|
|
1048
|
-
|
|
1049
|
-
|
|
1050
|
-
|
|
1051
|
-
|
|
1169
|
+
pageNumber: desc.PgNm,
|
|
1170
|
+
totalPages: desc.totalPages,
|
|
1171
|
+
frameStep: desc.frameStep,
|
|
1172
|
+
duration: desc.duration,
|
|
1173
|
+
frameCount: desc.frameCount,
|
|
1052
1174
|
transform: desc.Trnf,
|
|
1053
1175
|
width: desc['Sz '].Wdth,
|
|
1054
1176
|
height: desc['Sz '].Hght,
|
|
@@ -1070,13 +1192,7 @@ addHandler('SoLd', hasKey('placedLayer'), function (reader, target, left) {
|
|
|
1070
1192
|
(0, psdWriter_1.writeSignature)(writer, 'soLD');
|
|
1071
1193
|
(0, psdWriter_1.writeInt32)(writer, 4); // version
|
|
1072
1194
|
var placed = target.placedLayer;
|
|
1073
|
-
var desc = __assign(__assign({ Idnt: placed.id, placed: (_a = placed.placed) !== null && _a !== void 0 ? _a : placed.id, PgNm: 1, totalPages: 1 }, (placed.crop ? { Crop: placed.crop } : {})), { frameStep: {
|
|
1074
|
-
numerator: 0,
|
|
1075
|
-
denominator: 600
|
|
1076
|
-
}, duration: {
|
|
1077
|
-
numerator: 0,
|
|
1078
|
-
denominator: 600
|
|
1079
|
-
}, frameCount: 1, Annt: 16, Type: placedLayerTypes.indexOf(placed.type), Trnf: placed.transform, nonAffineTransform: (_b = placed.nonAffineTransform) !== null && _b !== void 0 ? _b : placed.transform, quiltWarp: {}, warp: encodeWarp(placed.warp || {}), 'Sz ': {
|
|
1195
|
+
var desc = __assign(__assign({ Idnt: placed.id, placed: (_a = placed.placed) !== null && _a !== void 0 ? _a : placed.id, PgNm: placed.pageNumber || 1, totalPages: placed.totalPages || 1 }, (placed.crop ? { Crop: placed.crop } : {})), { frameStep: placed.frameStep || { numerator: 0, denominator: 600 }, duration: placed.duration || { numerator: 0, denominator: 600 }, frameCount: placed.frameCount || 0, Annt: 16, Type: placedLayerTypes.indexOf(placed.type), Trnf: placed.transform, nonAffineTransform: (_b = placed.nonAffineTransform) !== null && _b !== void 0 ? _b : placed.transform, quiltWarp: {}, warp: encodeWarp(placed.warp || {}), 'Sz ': {
|
|
1080
1196
|
Wdth: placed.width || 0,
|
|
1081
1197
|
Hght: placed.height || 0, // TODO: find size ?
|
|
1082
1198
|
}, Rslt: placed.resolution ? (0, descriptor_1.unitsValue)(placed.resolution, 'resolution') : { units: 'Density', value: 72 } });
|
|
@@ -1647,7 +1763,7 @@ addHandler('blwh', adjustmentType('black & white'), function (reader, target, le
|
|
|
1647
1763
|
presetFileName: desc.blackAndWhitePresetFileName,
|
|
1648
1764
|
};
|
|
1649
1765
|
if (desc.tintColor !== undefined)
|
|
1650
|
-
target.adjustment.tintColor = parseColor(desc.tintColor);
|
|
1766
|
+
target.adjustment.tintColor = (0, descriptor_1.parseColor)(desc.tintColor);
|
|
1651
1767
|
(0, psdReader_1.skipBytes)(reader, left());
|
|
1652
1768
|
}, function (writer, target) {
|
|
1653
1769
|
var info = target.adjustment;
|
|
@@ -1659,7 +1775,7 @@ addHandler('blwh', adjustmentType('black & white'), function (reader, target, le
|
|
|
1659
1775
|
'Bl ': info.blues || 0,
|
|
1660
1776
|
Mgnt: info.magentas || 0,
|
|
1661
1777
|
useTint: !!info.useTint,
|
|
1662
|
-
tintColor: serializeColor(info.tintColor),
|
|
1778
|
+
tintColor: (0, descriptor_1.serializeColor)(info.tintColor),
|
|
1663
1779
|
bwPresetKind: info.presetKind || 0,
|
|
1664
1780
|
blackAndWhitePresetFileName: info.presetFileName || '',
|
|
1665
1781
|
};
|
|
@@ -2093,7 +2209,7 @@ target) { return target.artboards !== undefined; }, function (reader, target, le
|
|
|
2093
2209
|
autoNestEnabled: desc.autoNestEnabled,
|
|
2094
2210
|
autoPositionEnabled: desc.autoPositionEnabled,
|
|
2095
2211
|
shrinkwrapOnSaveEnabled: desc.shrinkwrapOnSaveEnabled,
|
|
2096
|
-
docDefaultNewArtboardBackgroundColor: parseColor(desc.docDefaultNewArtboardBackgroundColor),
|
|
2212
|
+
docDefaultNewArtboardBackgroundColor: (0, descriptor_1.parseColor)(desc.docDefaultNewArtboardBackgroundColor),
|
|
2097
2213
|
docDefaultNewArtboardBackgroundType: desc.docDefaultNewArtboardBackgroundType,
|
|
2098
2214
|
};
|
|
2099
2215
|
(0, psdReader_1.skipBytes)(reader, left());
|
|
@@ -2108,155 +2224,11 @@ target) { return target.artboards !== undefined; }, function (reader, target, le
|
|
|
2108
2224
|
autoNestEnabled: (_b = artb.autoNestEnabled) !== null && _b !== void 0 ? _b : true,
|
|
2109
2225
|
autoPositionEnabled: (_c = artb.autoPositionEnabled) !== null && _c !== void 0 ? _c : true,
|
|
2110
2226
|
shrinkwrapOnSaveEnabled: (_d = artb.shrinkwrapOnSaveEnabled) !== null && _d !== void 0 ? _d : true,
|
|
2111
|
-
docDefaultNewArtboardBackgroundColor: serializeColor(artb.docDefaultNewArtboardBackgroundColor),
|
|
2227
|
+
docDefaultNewArtboardBackgroundColor: (0, descriptor_1.serializeColor)(artb.docDefaultNewArtboardBackgroundColor),
|
|
2112
2228
|
docDefaultNewArtboardBackgroundType: (_e = artb.docDefaultNewArtboardBackgroundType) !== null && _e !== void 0 ? _e : 1,
|
|
2113
2229
|
};
|
|
2114
2230
|
(0, descriptor_1.writeVersionAndDescriptor)(writer, '', 'null', desc, 'artd');
|
|
2115
2231
|
});
|
|
2116
|
-
function parseFxObject(fx) {
|
|
2117
|
-
var stroke = {
|
|
2118
|
-
enabled: !!fx.enab,
|
|
2119
|
-
position: descriptor_1.FStl.decode(fx.Styl),
|
|
2120
|
-
fillType: descriptor_1.FrFl.decode(fx.PntT),
|
|
2121
|
-
blendMode: descriptor_1.BlnM.decode(fx['Md ']),
|
|
2122
|
-
opacity: (0, descriptor_1.parsePercent)(fx.Opct),
|
|
2123
|
-
size: (0, descriptor_1.parseUnits)(fx['Sz ']),
|
|
2124
|
-
};
|
|
2125
|
-
if (fx.present !== undefined)
|
|
2126
|
-
stroke.present = fx.present;
|
|
2127
|
-
if (fx.showInDialog !== undefined)
|
|
2128
|
-
stroke.showInDialog = fx.showInDialog;
|
|
2129
|
-
if (fx.overprint !== undefined)
|
|
2130
|
-
stroke.overprint = fx.overprint;
|
|
2131
|
-
if (fx['Clr '])
|
|
2132
|
-
stroke.color = parseColor(fx['Clr ']);
|
|
2133
|
-
if (fx.Grad)
|
|
2134
|
-
stroke.gradient = parseGradientContent(fx);
|
|
2135
|
-
if (fx.Ptrn)
|
|
2136
|
-
stroke.pattern = parsePatternContent(fx);
|
|
2137
|
-
return stroke;
|
|
2138
|
-
}
|
|
2139
|
-
function serializeFxObject(stroke) {
|
|
2140
|
-
var FrFX = {};
|
|
2141
|
-
FrFX.enab = !!stroke.enabled;
|
|
2142
|
-
if (stroke.present !== undefined)
|
|
2143
|
-
FrFX.present = !!stroke.present;
|
|
2144
|
-
if (stroke.showInDialog !== undefined)
|
|
2145
|
-
FrFX.showInDialog = !!stroke.showInDialog;
|
|
2146
|
-
FrFX.Styl = descriptor_1.FStl.encode(stroke.position);
|
|
2147
|
-
FrFX.PntT = descriptor_1.FrFl.encode(stroke.fillType);
|
|
2148
|
-
FrFX['Md '] = descriptor_1.BlnM.encode(stroke.blendMode);
|
|
2149
|
-
FrFX.Opct = (0, descriptor_1.unitsPercent)(stroke.opacity);
|
|
2150
|
-
FrFX['Sz '] = (0, descriptor_1.unitsValue)(stroke.size, 'size');
|
|
2151
|
-
if (stroke.color)
|
|
2152
|
-
FrFX['Clr '] = serializeColor(stroke.color);
|
|
2153
|
-
if (stroke.gradient)
|
|
2154
|
-
FrFX = __assign(__assign({}, FrFX), serializeGradientContent(stroke.gradient));
|
|
2155
|
-
if (stroke.pattern)
|
|
2156
|
-
FrFX = __assign(__assign({}, FrFX), serializePatternContent(stroke.pattern));
|
|
2157
|
-
if (stroke.overprint !== undefined)
|
|
2158
|
-
FrFX.overprint = !!stroke.overprint;
|
|
2159
|
-
return FrFX;
|
|
2160
|
-
}
|
|
2161
|
-
function parseEffects(info, log) {
|
|
2162
|
-
var effects = {};
|
|
2163
|
-
if (!info.masterFXSwitch)
|
|
2164
|
-
effects.disabled = true;
|
|
2165
|
-
if (info['Scl '])
|
|
2166
|
-
effects.scale = (0, descriptor_1.parsePercent)(info['Scl ']);
|
|
2167
|
-
if (info.DrSh)
|
|
2168
|
-
effects.dropShadow = [parseEffectObject(info.DrSh, log)];
|
|
2169
|
-
if (info.dropShadowMulti)
|
|
2170
|
-
effects.dropShadow = info.dropShadowMulti.map(function (i) { return parseEffectObject(i, log); });
|
|
2171
|
-
if (info.IrSh)
|
|
2172
|
-
effects.innerShadow = [parseEffectObject(info.IrSh, log)];
|
|
2173
|
-
if (info.innerShadowMulti)
|
|
2174
|
-
effects.innerShadow = info.innerShadowMulti.map(function (i) { return parseEffectObject(i, log); });
|
|
2175
|
-
if (info.OrGl)
|
|
2176
|
-
effects.outerGlow = parseEffectObject(info.OrGl, log);
|
|
2177
|
-
if (info.IrGl)
|
|
2178
|
-
effects.innerGlow = parseEffectObject(info.IrGl, log);
|
|
2179
|
-
if (info.ebbl)
|
|
2180
|
-
effects.bevel = parseEffectObject(info.ebbl, log);
|
|
2181
|
-
if (info.SoFi)
|
|
2182
|
-
effects.solidFill = [parseEffectObject(info.SoFi, log)];
|
|
2183
|
-
if (info.solidFillMulti)
|
|
2184
|
-
effects.solidFill = info.solidFillMulti.map(function (i) { return parseEffectObject(i, log); });
|
|
2185
|
-
if (info.patternFill)
|
|
2186
|
-
effects.patternOverlay = parseEffectObject(info.patternFill, log);
|
|
2187
|
-
if (info.GrFl)
|
|
2188
|
-
effects.gradientOverlay = [parseEffectObject(info.GrFl, log)];
|
|
2189
|
-
if (info.gradientFillMulti)
|
|
2190
|
-
effects.gradientOverlay = info.gradientFillMulti.map(function (i) { return parseEffectObject(i, log); });
|
|
2191
|
-
if (info.ChFX)
|
|
2192
|
-
effects.satin = parseEffectObject(info.ChFX, log);
|
|
2193
|
-
if (info.FrFX)
|
|
2194
|
-
effects.stroke = [parseFxObject(info.FrFX)];
|
|
2195
|
-
if (info.frameFXMulti)
|
|
2196
|
-
effects.stroke = info.frameFXMulti.map(function (i) { return parseFxObject(i); });
|
|
2197
|
-
return effects;
|
|
2198
|
-
}
|
|
2199
|
-
function serializeEffects(e, log, multi) {
|
|
2200
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o;
|
|
2201
|
-
var info = multi ? {
|
|
2202
|
-
'Scl ': (0, descriptor_1.unitsPercent)((_a = e.scale) !== null && _a !== void 0 ? _a : 1),
|
|
2203
|
-
masterFXSwitch: !e.disabled,
|
|
2204
|
-
} : {
|
|
2205
|
-
masterFXSwitch: !e.disabled,
|
|
2206
|
-
'Scl ': (0, descriptor_1.unitsPercent)((_b = e.scale) !== null && _b !== void 0 ? _b : 1),
|
|
2207
|
-
};
|
|
2208
|
-
var arrayKeys = ['dropShadow', 'innerShadow', 'solidFill', 'gradientOverlay', 'stroke'];
|
|
2209
|
-
for (var _i = 0, arrayKeys_1 = arrayKeys; _i < arrayKeys_1.length; _i++) {
|
|
2210
|
-
var key = arrayKeys_1[_i];
|
|
2211
|
-
if (e[key] && !Array.isArray(e[key]))
|
|
2212
|
-
throw new Error("".concat(key, " should be an array"));
|
|
2213
|
-
}
|
|
2214
|
-
if (((_c = e.dropShadow) === null || _c === void 0 ? void 0 : _c[0]) && !multi)
|
|
2215
|
-
info.DrSh = serializeEffectObject(e.dropShadow[0], 'dropShadow', log);
|
|
2216
|
-
if (((_d = e.dropShadow) === null || _d === void 0 ? void 0 : _d[0]) && multi)
|
|
2217
|
-
info.dropShadowMulti = e.dropShadow.map(function (i) { return serializeEffectObject(i, 'dropShadow', log); });
|
|
2218
|
-
if (((_e = e.innerShadow) === null || _e === void 0 ? void 0 : _e[0]) && !multi)
|
|
2219
|
-
info.IrSh = serializeEffectObject(e.innerShadow[0], 'innerShadow', log);
|
|
2220
|
-
if (((_f = e.innerShadow) === null || _f === void 0 ? void 0 : _f[0]) && multi)
|
|
2221
|
-
info.innerShadowMulti = e.innerShadow.map(function (i) { return serializeEffectObject(i, 'innerShadow', log); });
|
|
2222
|
-
if (e.outerGlow)
|
|
2223
|
-
info.OrGl = serializeEffectObject(e.outerGlow, 'outerGlow', log);
|
|
2224
|
-
if (((_g = e.solidFill) === null || _g === void 0 ? void 0 : _g[0]) && multi)
|
|
2225
|
-
info.solidFillMulti = e.solidFill.map(function (i) { return serializeEffectObject(i, 'solidFill', log); });
|
|
2226
|
-
if (((_h = e.gradientOverlay) === null || _h === void 0 ? void 0 : _h[0]) && multi)
|
|
2227
|
-
info.gradientFillMulti = e.gradientOverlay.map(function (i) { return serializeEffectObject(i, 'gradientOverlay', log); });
|
|
2228
|
-
if (((_j = e.stroke) === null || _j === void 0 ? void 0 : _j[0]) && multi)
|
|
2229
|
-
info.frameFXMulti = e.stroke.map(function (i) { return serializeFxObject(i); });
|
|
2230
|
-
if (e.innerGlow)
|
|
2231
|
-
info.IrGl = serializeEffectObject(e.innerGlow, 'innerGlow', log);
|
|
2232
|
-
if (e.bevel)
|
|
2233
|
-
info.ebbl = serializeEffectObject(e.bevel, 'bevel', log);
|
|
2234
|
-
if (((_k = e.solidFill) === null || _k === void 0 ? void 0 : _k[0]) && !multi)
|
|
2235
|
-
info.SoFi = serializeEffectObject(e.solidFill[0], 'solidFill', log);
|
|
2236
|
-
if (e.patternOverlay)
|
|
2237
|
-
info.patternFill = serializeEffectObject(e.patternOverlay, 'patternOverlay', log);
|
|
2238
|
-
if (((_l = e.gradientOverlay) === null || _l === void 0 ? void 0 : _l[0]) && !multi)
|
|
2239
|
-
info.GrFl = serializeEffectObject(e.gradientOverlay[0], 'gradientOverlay', log);
|
|
2240
|
-
if (e.satin)
|
|
2241
|
-
info.ChFX = serializeEffectObject(e.satin, 'satin', log);
|
|
2242
|
-
if (((_m = e.stroke) === null || _m === void 0 ? void 0 : _m[0]) && !multi)
|
|
2243
|
-
info.FrFX = serializeFxObject((_o = e.stroke) === null || _o === void 0 ? void 0 : _o[0]);
|
|
2244
|
-
if (multi) {
|
|
2245
|
-
info.numModifyingFX = 0;
|
|
2246
|
-
for (var _p = 0, _q = Object.keys(e); _p < _q.length; _p++) {
|
|
2247
|
-
var key = _q[_p];
|
|
2248
|
-
var value = e[key];
|
|
2249
|
-
if (Array.isArray(value)) {
|
|
2250
|
-
for (var _r = 0, value_1 = value; _r < value_1.length; _r++) {
|
|
2251
|
-
var effect = value_1[_r];
|
|
2252
|
-
if (effect.enabled)
|
|
2253
|
-
info.numModifyingFX++;
|
|
2254
|
-
}
|
|
2255
|
-
}
|
|
2256
|
-
}
|
|
2257
|
-
}
|
|
2258
|
-
return info;
|
|
2259
|
-
}
|
|
2260
2232
|
function hasMultiEffects(effects) {
|
|
2261
2233
|
return Object.keys(effects).map(function (key) { return effects[key]; }).some(function (v) { return Array.isArray(v) && v.length > 1; });
|
|
2262
2234
|
}
|
|
@@ -2269,10 +2241,10 @@ addHandler('lfx2', function (target) { return target.effects !== undefined && !h
|
|
|
2269
2241
|
// console.log(require('util').inspect(desc, false, 99, true));
|
|
2270
2242
|
// TODO: don't discard if we got it from lmfx
|
|
2271
2243
|
// discard if read in 'lrFX' section
|
|
2272
|
-
target.effects = parseEffects(desc, !!options.logMissingFeatures);
|
|
2244
|
+
target.effects = (0, descriptor_1.parseEffects)(desc, !!options.logMissingFeatures);
|
|
2273
2245
|
(0, psdReader_1.skipBytes)(reader, left());
|
|
2274
2246
|
}, function (writer, target, _, options) {
|
|
2275
|
-
var desc = serializeEffects(target.effects, !!options.logMissingFeatures, false);
|
|
2247
|
+
var desc = (0, descriptor_1.serializeEffects)(target.effects, !!options.logMissingFeatures, false);
|
|
2276
2248
|
// console.log(require('util').inspect(desc, false, 99, true));
|
|
2277
2249
|
(0, psdWriter_1.writeUint32)(writer, 0); // version
|
|
2278
2250
|
(0, descriptor_1.writeVersionAndDescriptor)(writer, '', 'null', desc);
|
|
@@ -2324,6 +2296,17 @@ addHandler('iOpa', hasKey('fillOpacity'), function (reader, target) {
|
|
|
2324
2296
|
(0, psdWriter_1.writeUint8)(writer, target.fillOpacity * 0xff);
|
|
2325
2297
|
(0, psdWriter_1.writeZeros)(writer, 3);
|
|
2326
2298
|
});
|
|
2299
|
+
addHandler('brst', hasKey('channelBlendingRestrictions'), function (reader, target, left) {
|
|
2300
|
+
target.channelBlendingRestrictions = [];
|
|
2301
|
+
while (left() > 4) {
|
|
2302
|
+
target.channelBlendingRestrictions.push((0, psdReader_1.readInt32)(reader));
|
|
2303
|
+
}
|
|
2304
|
+
}, function (writer, target) {
|
|
2305
|
+
for (var _i = 0, _a = target.channelBlendingRestrictions; _i < _a.length; _i++) {
|
|
2306
|
+
var channel = _a[_i];
|
|
2307
|
+
(0, psdWriter_1.writeInt32)(writer, channel);
|
|
2308
|
+
}
|
|
2309
|
+
});
|
|
2327
2310
|
addHandler('tsly', hasKey('transparencyShapesLayer'), function (reader, target) {
|
|
2328
2311
|
target.transparencyShapesLayer = !!(0, psdReader_1.readUint8)(reader);
|
|
2329
2312
|
(0, psdReader_1.skipBytes)(reader, 3);
|
|
@@ -2331,481 +2314,1236 @@ addHandler('tsly', hasKey('transparencyShapesLayer'), function (reader, target)
|
|
|
2331
2314
|
(0, psdWriter_1.writeUint8)(writer, target.transparencyShapesLayer ? 1 : 0);
|
|
2332
2315
|
(0, psdWriter_1.writeZeros)(writer, 3);
|
|
2333
2316
|
});
|
|
2334
|
-
|
|
2335
|
-
|
|
2336
|
-
|
|
2337
|
-
|
|
2338
|
-
|
|
2339
|
-
|
|
2340
|
-
|
|
2341
|
-
|
|
2342
|
-
|
|
2343
|
-
|
|
2344
|
-
|
|
2345
|
-
|
|
2346
|
-
|
|
2347
|
-
|
|
2348
|
-
|
|
2349
|
-
|
|
2350
|
-
|
|
2351
|
-
|
|
2352
|
-
|
|
2353
|
-
|
|
2354
|
-
|
|
2355
|
-
|
|
2356
|
-
|
|
2357
|
-
|
|
2358
|
-
|
|
2359
|
-
|
|
2360
|
-
|
|
2361
|
-
|
|
2362
|
-
|
|
2363
|
-
|
|
2364
|
-
|
|
2365
|
-
|
|
2317
|
+
|
|
2318
|
+
|
|
2319
|
+
},{"./descriptor":4,"./effectsHelpers":5,"./engineData":6,"./helpers":7,"./psdReader":11,"./psdWriter":12,"./text":13,"base64-js":15}],3:[function(require,module,exports){
|
|
2320
|
+
"use strict";
|
|
2321
|
+
var __assign = (this && this.__assign) || function () {
|
|
2322
|
+
__assign = Object.assign || function(t) {
|
|
2323
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
2324
|
+
s = arguments[i];
|
|
2325
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
2326
|
+
t[p] = s[p];
|
|
2327
|
+
}
|
|
2328
|
+
return t;
|
|
2329
|
+
};
|
|
2330
|
+
return __assign.apply(this, arguments);
|
|
2331
|
+
};
|
|
2332
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
2333
|
+
exports.readCsh = void 0;
|
|
2334
|
+
var additionalInfo_1 = require("./additionalInfo");
|
|
2335
|
+
var psdReader_1 = require("./psdReader");
|
|
2336
|
+
function readCsh(buffer) {
|
|
2337
|
+
var reader = (0, psdReader_1.createReader)(buffer.buffer, buffer.byteOffset, buffer.byteLength);
|
|
2338
|
+
var csh = { shapes: [] };
|
|
2339
|
+
(0, psdReader_1.checkSignature)(reader, 'cush');
|
|
2340
|
+
if ((0, psdReader_1.readUint32)(reader) !== 2)
|
|
2341
|
+
throw new Error('Invalid version');
|
|
2342
|
+
var count = (0, psdReader_1.readUint32)(reader);
|
|
2343
|
+
for (var i = 0; i < count; i++) {
|
|
2344
|
+
var name_1 = (0, psdReader_1.readUnicodeString)(reader);
|
|
2345
|
+
while (reader.offset % 4)
|
|
2346
|
+
reader.offset++; // pad to 4byte bounds
|
|
2347
|
+
if ((0, psdReader_1.readUint32)(reader) !== 1)
|
|
2348
|
+
throw new Error('Invalid shape version');
|
|
2349
|
+
var size = (0, psdReader_1.readUint32)(reader);
|
|
2350
|
+
var end = reader.offset + size;
|
|
2351
|
+
var id = (0, psdReader_1.readPascalString)(reader, 1);
|
|
2352
|
+
// this might not be correct ???
|
|
2353
|
+
var y1 = (0, psdReader_1.readUint32)(reader);
|
|
2354
|
+
var x1 = (0, psdReader_1.readUint32)(reader);
|
|
2355
|
+
var y2 = (0, psdReader_1.readUint32)(reader);
|
|
2356
|
+
var x2 = (0, psdReader_1.readUint32)(reader);
|
|
2357
|
+
var width = x2 - x1;
|
|
2358
|
+
var height = y2 - y1;
|
|
2359
|
+
var mask = { paths: [] };
|
|
2360
|
+
(0, additionalInfo_1.readVectorMask)(reader, mask, width, height, end - reader.offset);
|
|
2361
|
+
csh.shapes.push(__assign({ name: name_1, id: id, width: width, height: height }, mask));
|
|
2362
|
+
reader.offset = end;
|
|
2366
2363
|
}
|
|
2364
|
+
return csh;
|
|
2367
2365
|
}
|
|
2368
|
-
|
|
2369
|
-
|
|
2370
|
-
|
|
2371
|
-
|
|
2372
|
-
|
|
2373
|
-
|
|
2374
|
-
|
|
2375
|
-
|
|
2376
|
-
|
|
2377
|
-
|
|
2378
|
-
|
|
2379
|
-
|
|
2380
|
-
|
|
2381
|
-
|
|
2382
|
-
|
|
2383
|
-
|
|
2384
|
-
|
|
2385
|
-
|
|
2386
|
-
|
|
2387
|
-
|
|
2388
|
-
|
|
2389
|
-
|
|
2390
|
-
|
|
2391
|
-
|
|
2392
|
-
|
|
2393
|
-
};
|
|
2394
|
-
}
|
|
2395
|
-
else {
|
|
2396
|
-
return {
|
|
2397
|
-
GrdF: 'GrdF.ClNs',
|
|
2398
|
-
'Nm ': grad.name || '',
|
|
2399
|
-
ShTr: !!grad.addTransparency,
|
|
2400
|
-
VctC: !!grad.restrictColors,
|
|
2401
|
-
ClrS: descriptor_1.ClrS.encode(grad.colorModel),
|
|
2402
|
-
RndS: grad.randomSeed || 0,
|
|
2403
|
-
Smth: Math.round(((_b = grad.roughness) !== null && _b !== void 0 ? _b : 1) * 4096),
|
|
2404
|
-
'Mnm ': (grad.min || [0, 0, 0, 0]).map(function (x) { return x * 100; }),
|
|
2405
|
-
'Mxm ': (grad.max || [1, 1, 1, 1]).map(function (x) { return x * 100; }),
|
|
2406
|
-
};
|
|
2407
|
-
}
|
|
2366
|
+
exports.readCsh = readCsh;
|
|
2367
|
+
|
|
2368
|
+
|
|
2369
|
+
},{"./additionalInfo":2,"./psdReader":11}],4:[function(require,module,exports){
|
|
2370
|
+
"use strict";
|
|
2371
|
+
var __assign = (this && this.__assign) || function () {
|
|
2372
|
+
__assign = Object.assign || function(t) {
|
|
2373
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
2374
|
+
s = arguments[i];
|
|
2375
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
2376
|
+
t[p] = s[p];
|
|
2377
|
+
}
|
|
2378
|
+
return t;
|
|
2379
|
+
};
|
|
2380
|
+
return __assign.apply(this, arguments);
|
|
2381
|
+
};
|
|
2382
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
2383
|
+
exports.strokeStyleLineAlignment = exports.strokeStyleLineJoinType = exports.strokeStyleLineCapType = exports.FrFl = exports.FStl = exports.ClrS = exports.gradientInterpolationMethodType = exports.stdTrackID = exports.animInterpStyleEnum = exports.GrdT = exports.IGSr = exports.BETE = exports.BESs = exports.bvlT = exports.BESl = exports.BlnM = exports.warpStyle = exports.Annt = exports.Ornt = exports.textGridding = exports.unitsValue = exports.unitsPercent = exports.unitsAngle = exports.parseUnitsToNumber = exports.parseUnitsOrNumber = exports.parseUnits = exports.parsePercentOrAngle = exports.parsePercent = exports.parseAngle = exports.serializeColor = exports.parseColor = exports.serializeVectorContent = exports.parseVectorContent = exports.serializeTrackList = exports.parseTrackList = exports.parseEffects = exports.serializeEffects = exports.xyToHorzVrtc = exports.horzVrtcToXY = exports.writeVersionAndDescriptor = exports.readVersionAndDescriptor = exports.writeDescriptorStructure = exports.readDescriptorStructure = exports.readAsciiStringOrClassId = exports.setLogErrors = void 0;
|
|
2384
|
+
var helpers_1 = require("./helpers");
|
|
2385
|
+
var psdReader_1 = require("./psdReader");
|
|
2386
|
+
var psdWriter_1 = require("./psdWriter");
|
|
2387
|
+
function revMap(map) {
|
|
2388
|
+
var result = {};
|
|
2389
|
+
Object.keys(map).forEach(function (key) { return result[map[key]] = key; });
|
|
2390
|
+
return result;
|
|
2408
2391
|
}
|
|
2409
|
-
|
|
2410
|
-
|
|
2411
|
-
|
|
2412
|
-
|
|
2413
|
-
|
|
2414
|
-
|
|
2415
|
-
|
|
2416
|
-
|
|
2417
|
-
|
|
2418
|
-
|
|
2419
|
-
|
|
2420
|
-
|
|
2421
|
-
|
|
2422
|
-
|
|
2423
|
-
|
|
2424
|
-
|
|
2425
|
-
|
|
2426
|
-
|
|
2392
|
+
var unitsMap = {
|
|
2393
|
+
'#Ang': 'Angle',
|
|
2394
|
+
'#Rsl': 'Density',
|
|
2395
|
+
'#Rlt': 'Distance',
|
|
2396
|
+
'#Nne': 'None',
|
|
2397
|
+
'#Prc': 'Percent',
|
|
2398
|
+
'#Pxl': 'Pixels',
|
|
2399
|
+
'#Mlm': 'Millimeters',
|
|
2400
|
+
'#Pnt': 'Points',
|
|
2401
|
+
'RrPi': 'Picas',
|
|
2402
|
+
'RrIn': 'Inches',
|
|
2403
|
+
'RrCm': 'Centimeters',
|
|
2404
|
+
};
|
|
2405
|
+
var unitsMapRev = revMap(unitsMap);
|
|
2406
|
+
var logErrors = false;
|
|
2407
|
+
function setLogErrors(value) {
|
|
2408
|
+
logErrors = value;
|
|
2409
|
+
}
|
|
2410
|
+
exports.setLogErrors = setLogErrors;
|
|
2411
|
+
function makeType(name, classID) {
|
|
2412
|
+
return { name: name, classID: classID };
|
|
2413
|
+
}
|
|
2414
|
+
var nullType = makeType('', 'null');
|
|
2415
|
+
var fieldToExtType = {
|
|
2416
|
+
strokeStyleContent: makeType('', 'solidColorLayer'),
|
|
2417
|
+
// printProofSetup: makeType('校样设置', 'proofSetup'), // TESTING
|
|
2418
|
+
printProofSetup: makeType('Proof Setup', 'proofSetup'),
|
|
2419
|
+
patternFill: makeType('', 'patternFill'),
|
|
2420
|
+
Grad: makeType('Gradient', 'Grdn'),
|
|
2421
|
+
ebbl: makeType('', 'ebbl'),
|
|
2422
|
+
SoFi: makeType('', 'SoFi'),
|
|
2423
|
+
GrFl: makeType('', 'GrFl'),
|
|
2424
|
+
sdwC: makeType('', 'RGBC'),
|
|
2425
|
+
hglC: makeType('', 'RGBC'),
|
|
2426
|
+
'Clr ': makeType('', 'RGBC'),
|
|
2427
|
+
'tintColor': makeType('', 'RGBC'),
|
|
2428
|
+
Ofst: makeType('', 'Pnt '),
|
|
2429
|
+
ChFX: makeType('', 'ChFX'),
|
|
2430
|
+
MpgS: makeType('', 'ShpC'),
|
|
2431
|
+
DrSh: makeType('', 'DrSh'),
|
|
2432
|
+
IrSh: makeType('', 'IrSh'),
|
|
2433
|
+
OrGl: makeType('', 'OrGl'),
|
|
2434
|
+
IrGl: makeType('', 'IrGl'),
|
|
2435
|
+
TrnS: makeType('', 'ShpC'),
|
|
2436
|
+
Ptrn: makeType('', 'Ptrn'),
|
|
2437
|
+
FrFX: makeType('', 'FrFX'),
|
|
2438
|
+
phase: makeType('', 'Pnt '),
|
|
2439
|
+
frameStep: nullType,
|
|
2440
|
+
duration: nullType,
|
|
2441
|
+
workInTime: nullType,
|
|
2442
|
+
workOutTime: nullType,
|
|
2443
|
+
audioClipGroupList: nullType,
|
|
2444
|
+
bounds: makeType('', 'Rctn'),
|
|
2445
|
+
customEnvelopeWarp: makeType('', 'customEnvelopeWarp'),
|
|
2446
|
+
warp: makeType('', 'warp'),
|
|
2447
|
+
'Sz ': makeType('', 'Pnt '),
|
|
2448
|
+
origin: makeType('', 'Pnt '),
|
|
2449
|
+
autoExpandOffset: makeType('', 'Pnt '),
|
|
2450
|
+
keyOriginShapeBBox: makeType('', 'unitRect'),
|
|
2451
|
+
Vrsn: nullType,
|
|
2452
|
+
psVersion: nullType,
|
|
2453
|
+
docDefaultNewArtboardBackgroundColor: makeType('', 'RGBC'),
|
|
2454
|
+
artboardRect: makeType('', 'classFloatRect'),
|
|
2455
|
+
keyOriginRRectRadii: makeType('', 'radii'),
|
|
2456
|
+
keyOriginBoxCorners: nullType,
|
|
2457
|
+
rectangleCornerA: makeType('', 'Pnt '),
|
|
2458
|
+
rectangleCornerB: makeType('', 'Pnt '),
|
|
2459
|
+
rectangleCornerC: makeType('', 'Pnt '),
|
|
2460
|
+
rectangleCornerD: makeType('', 'Pnt '),
|
|
2461
|
+
compInfo: nullType,
|
|
2462
|
+
Trnf: makeType('Transform', 'Trnf'),
|
|
2463
|
+
quiltWarp: makeType('', 'quiltWarp'),
|
|
2464
|
+
generatorSettings: nullType,
|
|
2465
|
+
crema: nullType,
|
|
2466
|
+
FrIn: nullType,
|
|
2467
|
+
blendOptions: nullType,
|
|
2468
|
+
FXRf: nullType,
|
|
2469
|
+
Lefx: nullType,
|
|
2470
|
+
time: nullType,
|
|
2471
|
+
animKey: nullType,
|
|
2472
|
+
timeScope: nullType,
|
|
2473
|
+
inTime: nullType,
|
|
2474
|
+
outTime: nullType,
|
|
2475
|
+
sheetStyle: nullType,
|
|
2476
|
+
translation: nullType,
|
|
2477
|
+
Skew: nullType,
|
|
2478
|
+
'Lnk ': makeType('', 'ExternalFileLink'),
|
|
2479
|
+
frameReader: makeType('', 'FrameReader'),
|
|
2480
|
+
effectParams: makeType('', 'motionTrackEffectParams'),
|
|
2481
|
+
};
|
|
2482
|
+
var fieldToArrayExtType = {
|
|
2483
|
+
'Crv ': makeType('', 'CrPt'),
|
|
2484
|
+
Clrs: makeType('', 'Clrt'),
|
|
2485
|
+
Trns: makeType('', 'TrnS'),
|
|
2486
|
+
keyDescriptorList: nullType,
|
|
2487
|
+
solidFillMulti: makeType('', 'SoFi'),
|
|
2488
|
+
gradientFillMulti: makeType('', 'GrFl'),
|
|
2489
|
+
dropShadowMulti: makeType('', 'DrSh'),
|
|
2490
|
+
innerShadowMulti: makeType('', 'IrSh'),
|
|
2491
|
+
frameFXMulti: makeType('', 'FrFX'),
|
|
2492
|
+
FrIn: nullType,
|
|
2493
|
+
FSts: nullType,
|
|
2494
|
+
LaSt: nullType,
|
|
2495
|
+
sheetTimelineOptions: nullType,
|
|
2496
|
+
trackList: makeType('', 'animationTrack'),
|
|
2497
|
+
globalTrackList: makeType('', 'animationTrack'),
|
|
2498
|
+
keyList: nullType,
|
|
2499
|
+
audioClipGroupList: nullType,
|
|
2500
|
+
audioClipList: nullType,
|
|
2501
|
+
};
|
|
2502
|
+
var typeToField = {
|
|
2503
|
+
'TEXT': [
|
|
2504
|
+
'Txt ', 'printerName', 'Nm ', 'Idnt', 'blackAndWhitePresetFileName', 'LUT3DFileName',
|
|
2505
|
+
'presetFileName', 'curvesPresetFileName', 'mixerPresetFileName', 'placed', 'description', 'reason',
|
|
2506
|
+
'artboardPresetName', 'json', 'groupID', 'clipID', 'relPath', 'fullPath', 'mediaDescriptor',
|
|
2507
|
+
],
|
|
2508
|
+
'tdta': ['EngineData', 'LUT3DFileData'],
|
|
2509
|
+
'long': [
|
|
2510
|
+
'TextIndex', 'RndS', 'Mdpn', 'Smth', 'Lctn', 'strokeStyleVersion', 'LaID', 'Vrsn', 'Cnt ',
|
|
2511
|
+
'Brgh', 'Cntr', 'means', 'vibrance', 'Strt', 'bwPresetKind', 'presetKind', 'comp', 'compID', 'originalCompID',
|
|
2512
|
+
'curvesPresetKind', 'mixerPresetKind', 'uOrder', 'vOrder', 'PgNm', 'totalPages', 'Crop',
|
|
2513
|
+
'numerator', 'denominator', 'frameCount', 'Annt', 'keyOriginType', 'unitValueQuadVersion',
|
|
2514
|
+
'keyOriginIndex', 'major', 'minor', 'fix', 'docDefaultNewArtboardBackgroundType', 'artboardBackgroundType',
|
|
2515
|
+
'numModifyingFX', 'deformNumRows', 'deformNumCols', 'FrID', 'FrDl', 'FsID', 'LCnt', 'AFrm', 'AFSt',
|
|
2516
|
+
'numBefore', 'numAfter', 'Spcn', 'minOpacity', 'maxOpacity', 'BlnM', 'sheetID', 'gblA', 'globalAltitude',
|
|
2517
|
+
'descVersion', 'frameReaderType', 'LyrI', 'zoomOrigin',
|
|
2518
|
+
],
|
|
2519
|
+
'enum': [
|
|
2520
|
+
'textGridding', 'Ornt', 'warpStyle', 'warpRotate', 'Inte', 'Bltn', 'ClrS',
|
|
2521
|
+
'sdwM', 'hglM', 'bvlT', 'bvlS', 'bvlD', 'Md ', 'glwS', 'GrdF', 'GlwT',
|
|
2522
|
+
'strokeStyleLineCapType', 'strokeStyleLineJoinType', 'strokeStyleLineAlignment',
|
|
2523
|
+
'strokeStyleBlendMode', 'PntT', 'Styl', 'lookupType', 'LUTFormat', 'dataOrder',
|
|
2524
|
+
'tableOrder', 'enableCompCore', 'enableCompCoreGPU', 'compCoreSupport', 'compCoreGPUSupport', 'Engn',
|
|
2525
|
+
'enableCompCoreThreads', 'gs99', 'FrDs', 'trackID', 'animInterpStyle',
|
|
2526
|
+
],
|
|
2527
|
+
'bool': [
|
|
2528
|
+
'PstS', 'printSixteenBit', 'masterFXSwitch', 'enab', 'uglg', 'antialiasGloss',
|
|
2529
|
+
'useShape', 'useTexture', 'uglg', 'antialiasGloss', 'useShape',
|
|
2530
|
+
'useTexture', 'Algn', 'Rvrs', 'Dthr', 'Invr', 'VctC', 'ShTr', 'layerConceals',
|
|
2531
|
+
'strokeEnabled', 'fillEnabled', 'strokeStyleScaleLock', 'strokeStyleStrokeAdjust',
|
|
2532
|
+
'hardProof', 'MpBl', 'paperWhite', 'useLegacy', 'Auto', 'Lab ', 'useTint', 'keyShapeInvalidated',
|
|
2533
|
+
'autoExpandEnabled', 'autoNestEnabled', 'autoPositionEnabled', 'shrinkwrapOnSaveEnabled',
|
|
2534
|
+
'present', 'showInDialog', 'overprint', 'sheetDisclosed', 'lightsDisclosed', 'meshesDisclosed',
|
|
2535
|
+
'materialsDisclosed', 'hasMotion', 'muted', 'Effc', 'selected', 'autoScope', 'fillCanvas',
|
|
2536
|
+
],
|
|
2537
|
+
'doub': [
|
|
2538
|
+
'warpValue', 'warpPerspective', 'warpPerspectiveOther', 'Intr', 'Wdth', 'Hght',
|
|
2539
|
+
'strokeStyleMiterLimit', 'strokeStyleResolution', 'layerTime', 'keyOriginResolution',
|
|
2540
|
+
'xx', 'xy', 'yx', 'yy', 'tx', 'ty', 'FrGA', 'frameRate', 'audioLevel', 'rotation',
|
|
2541
|
+
],
|
|
2542
|
+
'UntF': [
|
|
2543
|
+
'Scl ', 'sdwO', 'hglO', 'lagl', 'Lald', 'srgR', 'blur', 'Sftn', 'Opct', 'Dstn', 'Angl',
|
|
2544
|
+
'Ckmt', 'Nose', 'Inpr', 'ShdN', 'strokeStyleLineWidth', 'strokeStyleLineDashOffset',
|
|
2545
|
+
'strokeStyleOpacity', 'H ', 'Top ', 'Left', 'Btom', 'Rght', 'Rslt',
|
|
2546
|
+
'topRight', 'topLeft', 'bottomLeft', 'bottomRight',
|
|
2547
|
+
],
|
|
2548
|
+
'VlLs': [
|
|
2549
|
+
'Crv ', 'Clrs', 'Mnm ', 'Mxm ', 'Trns', 'pathList', 'strokeStyleLineDashSet', 'FrLs',
|
|
2550
|
+
'LaSt', 'Trnf', 'nonAffineTransform', 'keyDescriptorList', 'guideIndeces', 'gradientFillMulti',
|
|
2551
|
+
'solidFillMulti', 'frameFXMulti', 'innerShadowMulti', 'dropShadowMulti', 'FrIn', 'FSts', 'FsFr',
|
|
2552
|
+
'sheetTimelineOptions', 'audioClipList', 'trackList', 'globalTrackList', 'keyList', 'audioClipList',
|
|
2553
|
+
],
|
|
2554
|
+
'ObAr': ['meshPoints', 'quiltSliceX', 'quiltSliceY'],
|
|
2555
|
+
'obj ': ['null'],
|
|
2556
|
+
};
|
|
2557
|
+
var channels = [
|
|
2558
|
+
'Rd ', 'Grn ', 'Bl ', 'Yllw', 'Ylw ', 'Cyn ', 'Mgnt', 'Blck', 'Gry ', 'Lmnc', 'A ', 'B ',
|
|
2559
|
+
];
|
|
2560
|
+
var fieldToArrayType = {
|
|
2561
|
+
'Mnm ': 'long',
|
|
2562
|
+
'Mxm ': 'long',
|
|
2563
|
+
'FrLs': 'long',
|
|
2564
|
+
'strokeStyleLineDashSet': 'UntF',
|
|
2565
|
+
'Trnf': 'doub',
|
|
2566
|
+
'nonAffineTransform': 'doub',
|
|
2567
|
+
'keyDescriptorList': 'Objc',
|
|
2568
|
+
'gradientFillMulti': 'Objc',
|
|
2569
|
+
'solidFillMulti': 'Objc',
|
|
2570
|
+
'frameFXMulti': 'Objc',
|
|
2571
|
+
'innerShadowMulti': 'Objc',
|
|
2572
|
+
'dropShadowMulti': 'Objc',
|
|
2573
|
+
'LaSt': 'Objc',
|
|
2574
|
+
'FrIn': 'Objc',
|
|
2575
|
+
'FSts': 'Objc',
|
|
2576
|
+
'FsFr': 'long',
|
|
2577
|
+
'blendOptions': 'Objc',
|
|
2578
|
+
'sheetTimelineOptions': 'Objc',
|
|
2579
|
+
'keyList': 'Objc',
|
|
2580
|
+
};
|
|
2581
|
+
var fieldToType = {};
|
|
2582
|
+
for (var _i = 0, _a = Object.keys(typeToField); _i < _a.length; _i++) {
|
|
2583
|
+
var type = _a[_i];
|
|
2584
|
+
for (var _b = 0, _c = typeToField[type]; _b < _c.length; _b++) {
|
|
2585
|
+
var field = _c[_b];
|
|
2586
|
+
fieldToType[field] = type;
|
|
2427
2587
|
}
|
|
2428
|
-
return result;
|
|
2429
2588
|
}
|
|
2430
|
-
|
|
2431
|
-
var
|
|
2432
|
-
|
|
2433
|
-
|
|
2434
|
-
};
|
|
2435
|
-
if (descriptor.Lnkd !== undefined)
|
|
2436
|
-
result.linked = descriptor.Lnkd;
|
|
2437
|
-
if (descriptor.phase !== undefined)
|
|
2438
|
-
result.phase = { x: descriptor.phase.Hrzn, y: descriptor.phase.Vrtc };
|
|
2439
|
-
return result;
|
|
2589
|
+
for (var _d = 0, _e = Object.keys(fieldToExtType); _d < _e.length; _d++) {
|
|
2590
|
+
var field = _e[_d];
|
|
2591
|
+
if (!fieldToType[field])
|
|
2592
|
+
fieldToType[field] = 'Objc';
|
|
2440
2593
|
}
|
|
2441
|
-
|
|
2442
|
-
|
|
2443
|
-
|
|
2594
|
+
for (var _f = 0, _g = Object.keys(fieldToArrayExtType); _f < _g.length; _f++) {
|
|
2595
|
+
var field = _g[_f];
|
|
2596
|
+
fieldToArrayType[field] = 'Objc';
|
|
2597
|
+
}
|
|
2598
|
+
function getTypeByKey(key, value, root, parent) {
|
|
2599
|
+
if (key === 'Sz ') {
|
|
2600
|
+
return ('Wdth' in value) ? 'Objc' : (('units' in value) ? 'UntF' : 'doub');
|
|
2444
2601
|
}
|
|
2445
|
-
else if ('
|
|
2446
|
-
return
|
|
2602
|
+
else if (key === 'Type') {
|
|
2603
|
+
return typeof value === 'string' ? 'enum' : 'long';
|
|
2447
2604
|
}
|
|
2448
|
-
else if (
|
|
2449
|
-
return
|
|
2605
|
+
else if (key === 'AntA') {
|
|
2606
|
+
return typeof value === 'string' ? 'enum' : 'bool';
|
|
2607
|
+
}
|
|
2608
|
+
else if ((key === 'Hrzn' || key === 'Vrtc') && parent.Type === 'keyType.Pstn') {
|
|
2609
|
+
return 'long';
|
|
2610
|
+
}
|
|
2611
|
+
else if (key === 'Hrzn' || key === 'Vrtc' || key === 'Top ' || key === 'Left' || key === 'Btom' || key === 'Rght') {
|
|
2612
|
+
return typeof value === 'number' ? 'doub' : 'UntF';
|
|
2613
|
+
}
|
|
2614
|
+
else if (key === 'Vrsn') {
|
|
2615
|
+
return typeof value === 'number' ? 'long' : 'Objc';
|
|
2616
|
+
}
|
|
2617
|
+
else if (key === 'Rd ' || key === 'Grn ' || key === 'Bl ') {
|
|
2618
|
+
return root === 'artd' ? 'long' : 'doub';
|
|
2619
|
+
}
|
|
2620
|
+
else if (key === 'Trnf') {
|
|
2621
|
+
return Array.isArray(value) ? 'VlLs' : 'Objc';
|
|
2450
2622
|
}
|
|
2451
2623
|
else {
|
|
2452
|
-
|
|
2624
|
+
return fieldToType[key];
|
|
2453
2625
|
}
|
|
2454
2626
|
}
|
|
2455
|
-
function
|
|
2456
|
-
var
|
|
2457
|
-
|
|
2458
|
-
result.Dthr = content.dither;
|
|
2459
|
-
if (content.reverse !== undefined)
|
|
2460
|
-
result.Rvrs = content.reverse;
|
|
2461
|
-
if (content.angle !== undefined)
|
|
2462
|
-
result.Angl = (0, descriptor_1.unitsAngle)(content.angle);
|
|
2463
|
-
result.Type = descriptor_1.GrdT.encode(content.style);
|
|
2464
|
-
if (content.align !== undefined)
|
|
2465
|
-
result.Algn = content.align;
|
|
2466
|
-
if (content.scale !== undefined)
|
|
2467
|
-
result['Scl '] = (0, descriptor_1.unitsPercent)(content.scale);
|
|
2468
|
-
if (content.offset) {
|
|
2469
|
-
result.Ofst = {
|
|
2470
|
-
Hrzn: (0, descriptor_1.unitsPercent)(content.offset.x),
|
|
2471
|
-
Vrtc: (0, descriptor_1.unitsPercent)(content.offset.y),
|
|
2472
|
-
};
|
|
2473
|
-
}
|
|
2474
|
-
result.Grad = serializeGradient(content);
|
|
2475
|
-
return result;
|
|
2476
|
-
}
|
|
2477
|
-
function serializePatternContent(content) {
|
|
2478
|
-
var result = {
|
|
2479
|
-
Ptrn: {
|
|
2480
|
-
'Nm ': content.name || '',
|
|
2481
|
-
Idnt: content.id || '',
|
|
2482
|
-
}
|
|
2483
|
-
};
|
|
2484
|
-
if (content.linked !== undefined)
|
|
2485
|
-
result.Lnkd = !!content.linked;
|
|
2486
|
-
if (content.phase !== undefined)
|
|
2487
|
-
result.phase = { Hrzn: content.phase.x, Vrtc: content.phase.y };
|
|
2488
|
-
return result;
|
|
2627
|
+
function readAsciiStringOrClassId(reader) {
|
|
2628
|
+
var length = (0, psdReader_1.readInt32)(reader);
|
|
2629
|
+
return (0, psdReader_1.readAsciiString)(reader, length || 4);
|
|
2489
2630
|
}
|
|
2490
|
-
|
|
2491
|
-
|
|
2492
|
-
|
|
2493
|
-
|
|
2494
|
-
|
|
2495
|
-
|
|
2631
|
+
exports.readAsciiStringOrClassId = readAsciiStringOrClassId;
|
|
2632
|
+
function writeAsciiStringOrClassId(writer, value) {
|
|
2633
|
+
if (value.length === 4 && value !== 'warp' && value !== 'time' && value !== 'hold') {
|
|
2634
|
+
// write classId
|
|
2635
|
+
(0, psdWriter_1.writeInt32)(writer, 0);
|
|
2636
|
+
(0, psdWriter_1.writeSignature)(writer, value);
|
|
2496
2637
|
}
|
|
2497
2638
|
else {
|
|
2498
|
-
|
|
2639
|
+
// write ascii string
|
|
2640
|
+
(0, psdWriter_1.writeInt32)(writer, value.length);
|
|
2641
|
+
for (var i = 0; i < value.length; i++) {
|
|
2642
|
+
(0, psdWriter_1.writeUint8)(writer, value.charCodeAt(i));
|
|
2643
|
+
}
|
|
2499
2644
|
}
|
|
2500
2645
|
}
|
|
2501
|
-
function
|
|
2502
|
-
|
|
2503
|
-
|
|
2504
|
-
|
|
2505
|
-
|
|
2506
|
-
|
|
2507
|
-
|
|
2508
|
-
|
|
2509
|
-
|
|
2510
|
-
|
|
2511
|
-
|
|
2512
|
-
|
|
2513
|
-
|
|
2514
|
-
else if ('Lmnc' in color) {
|
|
2515
|
-
return { l: color.Lmnc, a: color['A '], b: color['B '] };
|
|
2516
|
-
}
|
|
2517
|
-
else {
|
|
2518
|
-
throw new Error('Unsupported color descriptor');
|
|
2646
|
+
function readDescriptorStructure(reader) {
|
|
2647
|
+
var object = {};
|
|
2648
|
+
// object.__struct =
|
|
2649
|
+
readClassStructure(reader);
|
|
2650
|
+
var itemsCount = (0, psdReader_1.readUint32)(reader);
|
|
2651
|
+
// console.log('//', object.__struct);
|
|
2652
|
+
for (var i = 0; i < itemsCount; i++) {
|
|
2653
|
+
var key = readAsciiStringOrClassId(reader);
|
|
2654
|
+
var type = (0, psdReader_1.readSignature)(reader);
|
|
2655
|
+
// console.log(`> '${key}' '${type}'`);
|
|
2656
|
+
var data = readOSType(reader, type);
|
|
2657
|
+
// if (!getTypeByKey(key, data)) console.log(`> '${key}' '${type}'`, data);
|
|
2658
|
+
object[key] = data;
|
|
2519
2659
|
}
|
|
2660
|
+
return object;
|
|
2520
2661
|
}
|
|
2521
|
-
|
|
2522
|
-
|
|
2523
|
-
|
|
2524
|
-
|
|
2525
|
-
|
|
2526
|
-
|
|
2527
|
-
|
|
2528
|
-
|
|
2529
|
-
|
|
2530
|
-
|
|
2531
|
-
|
|
2532
|
-
|
|
2533
|
-
|
|
2534
|
-
|
|
2535
|
-
|
|
2536
|
-
|
|
2537
|
-
|
|
2538
|
-
|
|
2662
|
+
exports.readDescriptorStructure = readDescriptorStructure;
|
|
2663
|
+
function writeDescriptorStructure(writer, name, classId, value, root) {
|
|
2664
|
+
if (logErrors && !classId)
|
|
2665
|
+
console.log('Missing classId for: ', name, classId, value);
|
|
2666
|
+
// write class structure
|
|
2667
|
+
(0, psdWriter_1.writeUnicodeStringWithPadding)(writer, name);
|
|
2668
|
+
writeAsciiStringOrClassId(writer, classId);
|
|
2669
|
+
var keys = Object.keys(value);
|
|
2670
|
+
(0, psdWriter_1.writeUint32)(writer, keys.length);
|
|
2671
|
+
for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {
|
|
2672
|
+
var key = keys_1[_i];
|
|
2673
|
+
var type = getTypeByKey(key, value[key], root, value);
|
|
2674
|
+
var extType = fieldToExtType[key];
|
|
2675
|
+
if (key === 'Scl ' && 'Hrzn' in value[key]) {
|
|
2676
|
+
type = 'Objc';
|
|
2677
|
+
extType = nullType;
|
|
2678
|
+
}
|
|
2679
|
+
else if (key === 'audioClipGroupList' && keys.length === 1) {
|
|
2680
|
+
type = 'VlLs';
|
|
2681
|
+
}
|
|
2682
|
+
else if ((key === 'Strt' || key === 'Brgh') && 'H ' in value) {
|
|
2683
|
+
type = 'doub';
|
|
2684
|
+
}
|
|
2685
|
+
else if (key === 'Strt') {
|
|
2686
|
+
type = 'Objc';
|
|
2687
|
+
extType = nullType;
|
|
2688
|
+
}
|
|
2689
|
+
else if (channels.indexOf(key) !== -1) {
|
|
2690
|
+
type = (classId === 'RGBC' && root !== 'artd') ? 'doub' : 'long';
|
|
2691
|
+
}
|
|
2692
|
+
else if (key === 'profile') {
|
|
2693
|
+
type = classId === 'printOutput' ? 'TEXT' : 'tdta';
|
|
2694
|
+
}
|
|
2695
|
+
else if (key === 'strokeStyleContent') {
|
|
2696
|
+
if (value[key]['Clr ']) {
|
|
2697
|
+
extType = makeType('', 'solidColorLayer');
|
|
2698
|
+
}
|
|
2699
|
+
else if (value[key].Grad) {
|
|
2700
|
+
extType = makeType('', 'gradientLayer');
|
|
2701
|
+
}
|
|
2702
|
+
else if (value[key].Ptrn) {
|
|
2703
|
+
extType = makeType('', 'patternLayer');
|
|
2704
|
+
}
|
|
2705
|
+
else {
|
|
2706
|
+
logErrors && console.log('Invalid strokeStyleContent value', value[key]);
|
|
2707
|
+
}
|
|
2708
|
+
}
|
|
2709
|
+
else if (key === 'bounds' && root === 'quiltWarp') {
|
|
2710
|
+
extType = makeType('', 'classFloatRect');
|
|
2711
|
+
}
|
|
2712
|
+
if (extType && extType.classID === 'RGBC') {
|
|
2713
|
+
if ('H ' in value[key])
|
|
2714
|
+
extType = { classID: 'HSBC', name: '' };
|
|
2715
|
+
// TODO: other color spaces
|
|
2716
|
+
}
|
|
2717
|
+
writeAsciiStringOrClassId(writer, key);
|
|
2718
|
+
(0, psdWriter_1.writeSignature)(writer, type || 'long');
|
|
2719
|
+
writeOSType(writer, type || 'long', value[key], key, extType, root);
|
|
2720
|
+
if (logErrors && !type)
|
|
2721
|
+
console.log("Missing descriptor field type for: '".concat(key, "' in"), value);
|
|
2539
2722
|
}
|
|
2540
|
-
|
|
2541
|
-
|
|
2723
|
+
}
|
|
2724
|
+
exports.writeDescriptorStructure = writeDescriptorStructure;
|
|
2725
|
+
function readOSType(reader, type) {
|
|
2726
|
+
switch (type) {
|
|
2727
|
+
case 'obj ': // Reference
|
|
2728
|
+
return readReferenceStructure(reader);
|
|
2729
|
+
case 'Objc': // Descriptor
|
|
2730
|
+
case 'GlbO': // GlobalObject same as Descriptor
|
|
2731
|
+
return readDescriptorStructure(reader);
|
|
2732
|
+
case 'VlLs': { // List
|
|
2733
|
+
var length_1 = (0, psdReader_1.readInt32)(reader);
|
|
2734
|
+
var items = [];
|
|
2735
|
+
for (var i = 0; i < length_1; i++) {
|
|
2736
|
+
var type_1 = (0, psdReader_1.readSignature)(reader);
|
|
2737
|
+
// console.log(' >', type);
|
|
2738
|
+
items.push(readOSType(reader, type_1));
|
|
2739
|
+
}
|
|
2740
|
+
return items;
|
|
2741
|
+
}
|
|
2742
|
+
case 'doub': // Double
|
|
2743
|
+
return (0, psdReader_1.readFloat64)(reader);
|
|
2744
|
+
case 'UntF': { // Unit double
|
|
2745
|
+
var units = (0, psdReader_1.readSignature)(reader);
|
|
2746
|
+
var value = (0, psdReader_1.readFloat64)(reader);
|
|
2747
|
+
if (!unitsMap[units])
|
|
2748
|
+
throw new Error("Invalid units: ".concat(units));
|
|
2749
|
+
return { units: unitsMap[units], value: value };
|
|
2750
|
+
}
|
|
2751
|
+
case 'UnFl': { // Unit float
|
|
2752
|
+
var units = (0, psdReader_1.readSignature)(reader);
|
|
2753
|
+
var value = (0, psdReader_1.readFloat32)(reader);
|
|
2754
|
+
if (!unitsMap[units])
|
|
2755
|
+
throw new Error("Invalid units: ".concat(units));
|
|
2756
|
+
return { units: unitsMap[units], value: value };
|
|
2757
|
+
}
|
|
2758
|
+
case 'TEXT': // String
|
|
2759
|
+
return (0, psdReader_1.readUnicodeString)(reader);
|
|
2760
|
+
case 'enum': { // Enumerated
|
|
2761
|
+
var type_2 = readAsciiStringOrClassId(reader);
|
|
2762
|
+
var value = readAsciiStringOrClassId(reader);
|
|
2763
|
+
return "".concat(type_2, ".").concat(value);
|
|
2764
|
+
}
|
|
2765
|
+
case 'long': // Integer
|
|
2766
|
+
return (0, psdReader_1.readInt32)(reader);
|
|
2767
|
+
case 'comp': { // Large Integer
|
|
2768
|
+
var low = (0, psdReader_1.readUint32)(reader);
|
|
2769
|
+
var high = (0, psdReader_1.readUint32)(reader);
|
|
2770
|
+
return { low: low, high: high };
|
|
2771
|
+
}
|
|
2772
|
+
case 'bool': // Boolean
|
|
2773
|
+
return !!(0, psdReader_1.readUint8)(reader);
|
|
2774
|
+
case 'type': // Class
|
|
2775
|
+
case 'GlbC': // Class
|
|
2776
|
+
return readClassStructure(reader);
|
|
2777
|
+
case 'alis': { // Alias
|
|
2778
|
+
var length_2 = (0, psdReader_1.readInt32)(reader);
|
|
2779
|
+
return (0, psdReader_1.readAsciiString)(reader, length_2);
|
|
2780
|
+
}
|
|
2781
|
+
case 'tdta': { // Raw Data
|
|
2782
|
+
var length_3 = (0, psdReader_1.readInt32)(reader);
|
|
2783
|
+
return (0, psdReader_1.readBytes)(reader, length_3);
|
|
2784
|
+
}
|
|
2785
|
+
case 'ObAr': { // Object array
|
|
2786
|
+
(0, psdReader_1.readInt32)(reader); // version: 16
|
|
2787
|
+
(0, psdReader_1.readUnicodeString)(reader); // name: ''
|
|
2788
|
+
readAsciiStringOrClassId(reader); // 'rationalPoint'
|
|
2789
|
+
var length_4 = (0, psdReader_1.readInt32)(reader);
|
|
2790
|
+
var items = [];
|
|
2791
|
+
for (var i = 0; i < length_4; i++) {
|
|
2792
|
+
var type1 = readAsciiStringOrClassId(reader); // type Hrzn | Vrtc
|
|
2793
|
+
(0, psdReader_1.readSignature)(reader); // UnFl
|
|
2794
|
+
(0, psdReader_1.readSignature)(reader); // units ? '#Pxl'
|
|
2795
|
+
var valuesCount = (0, psdReader_1.readInt32)(reader);
|
|
2796
|
+
var values = [];
|
|
2797
|
+
for (var j = 0; j < valuesCount; j++) {
|
|
2798
|
+
values.push((0, psdReader_1.readFloat64)(reader));
|
|
2799
|
+
}
|
|
2800
|
+
items.push({ type: type1, values: values });
|
|
2801
|
+
}
|
|
2802
|
+
return items;
|
|
2803
|
+
}
|
|
2804
|
+
case 'Pth ': { // File path
|
|
2805
|
+
/*const length =*/ (0, psdReader_1.readInt32)(reader);
|
|
2806
|
+
var sig = (0, psdReader_1.readSignature)(reader);
|
|
2807
|
+
/*const pathSize =*/ (0, psdReader_1.readInt32LE)(reader);
|
|
2808
|
+
var charsCount = (0, psdReader_1.readInt32LE)(reader);
|
|
2809
|
+
var path = (0, psdReader_1.readUnicodeStringWithLength)(reader, charsCount);
|
|
2810
|
+
return { sig: sig, path: path };
|
|
2811
|
+
}
|
|
2812
|
+
default:
|
|
2813
|
+
throw new Error("Invalid TySh descriptor OSType: ".concat(type, " at ").concat(reader.offset.toString(16)));
|
|
2542
2814
|
}
|
|
2543
2815
|
}
|
|
2544
|
-
|
|
2545
|
-
|
|
2546
|
-
|
|
2547
|
-
|
|
2548
|
-
|
|
2549
|
-
|
|
2550
|
-
|
|
2551
|
-
|
|
2552
|
-
|
|
2553
|
-
|
|
2554
|
-
|
|
2555
|
-
|
|
2556
|
-
|
|
2557
|
-
|
|
2558
|
-
|
|
2559
|
-
|
|
2560
|
-
|
|
2561
|
-
|
|
2562
|
-
|
|
2563
|
-
|
|
2564
|
-
|
|
2565
|
-
|
|
2566
|
-
|
|
2567
|
-
|
|
2568
|
-
|
|
2569
|
-
|
|
2570
|
-
|
|
2571
|
-
|
|
2572
|
-
|
|
2573
|
-
|
|
2574
|
-
|
|
2575
|
-
|
|
2576
|
-
|
|
2577
|
-
|
|
2578
|
-
|
|
2579
|
-
|
|
2580
|
-
|
|
2581
|
-
|
|
2582
|
-
|
|
2583
|
-
|
|
2584
|
-
|
|
2585
|
-
|
|
2586
|
-
|
|
2587
|
-
|
|
2588
|
-
|
|
2589
|
-
|
|
2590
|
-
|
|
2591
|
-
|
|
2592
|
-
|
|
2593
|
-
|
|
2594
|
-
|
|
2595
|
-
|
|
2596
|
-
|
|
2597
|
-
|
|
2598
|
-
|
|
2599
|
-
|
|
2600
|
-
|
|
2601
|
-
|
|
2602
|
-
|
|
2603
|
-
|
|
2604
|
-
|
|
2605
|
-
|
|
2606
|
-
|
|
2607
|
-
|
|
2608
|
-
|
|
2609
|
-
|
|
2610
|
-
|
|
2611
|
-
|
|
2612
|
-
|
|
2613
|
-
|
|
2614
|
-
|
|
2615
|
-
|
|
2616
|
-
|
|
2617
|
-
|
|
2618
|
-
|
|
2619
|
-
|
|
2620
|
-
|
|
2621
|
-
|
|
2622
|
-
|
|
2623
|
-
|
|
2624
|
-
|
|
2625
|
-
|
|
2626
|
-
|
|
2627
|
-
|
|
2628
|
-
|
|
2629
|
-
|
|
2630
|
-
|
|
2631
|
-
|
|
2632
|
-
|
|
2633
|
-
|
|
2634
|
-
|
|
2635
|
-
|
|
2636
|
-
|
|
2637
|
-
|
|
2638
|
-
|
|
2639
|
-
|
|
2640
|
-
|
|
2641
|
-
|
|
2642
|
-
|
|
2643
|
-
|
|
2644
|
-
|
|
2645
|
-
|
|
2646
|
-
case 'Ckmt':
|
|
2647
|
-
result.choke = (0, descriptor_1.parseUnits)(val);
|
|
2648
|
-
break;
|
|
2649
|
-
case 'ShdN':
|
|
2650
|
-
result.jitter = (0, descriptor_1.parsePercent)(val);
|
|
2651
|
-
break;
|
|
2652
|
-
case 'Dstn':
|
|
2653
|
-
result.distance = (0, descriptor_1.parseUnits)(val);
|
|
2654
|
-
break;
|
|
2655
|
-
case 'Scl ':
|
|
2656
|
-
result.scale = (0, descriptor_1.parsePercent)(val);
|
|
2816
|
+
var ObArTypes = {
|
|
2817
|
+
meshPoints: 'rationalPoint',
|
|
2818
|
+
quiltSliceX: 'UntF',
|
|
2819
|
+
quiltSliceY: 'UntF',
|
|
2820
|
+
};
|
|
2821
|
+
function writeOSType(writer, type, value, key, extType, root) {
|
|
2822
|
+
switch (type) {
|
|
2823
|
+
case 'obj ': // Reference
|
|
2824
|
+
writeReferenceStructure(writer, key, value);
|
|
2825
|
+
break;
|
|
2826
|
+
case 'Objc': // Descriptor
|
|
2827
|
+
case 'GlbO': // GlobalObject same as Descriptor
|
|
2828
|
+
if (!extType)
|
|
2829
|
+
throw new Error("Missing ext type for: '".concat(key, "' (").concat(JSON.stringify(value), ")"));
|
|
2830
|
+
writeDescriptorStructure(writer, extType.name, extType.classID, value, root);
|
|
2831
|
+
break;
|
|
2832
|
+
case 'VlLs': // List
|
|
2833
|
+
(0, psdWriter_1.writeInt32)(writer, value.length);
|
|
2834
|
+
for (var i = 0; i < value.length; i++) {
|
|
2835
|
+
var type_3 = fieldToArrayType[key];
|
|
2836
|
+
(0, psdWriter_1.writeSignature)(writer, type_3 || 'long');
|
|
2837
|
+
writeOSType(writer, type_3 || 'long', value[i], '', fieldToArrayExtType[key], root);
|
|
2838
|
+
if (logErrors && !type_3)
|
|
2839
|
+
console.log("Missing descriptor array type for: '".concat(key, "' in"), value);
|
|
2840
|
+
}
|
|
2841
|
+
break;
|
|
2842
|
+
case 'doub': // Double
|
|
2843
|
+
(0, psdWriter_1.writeFloat64)(writer, value);
|
|
2844
|
+
break;
|
|
2845
|
+
case 'UntF': // Unit double
|
|
2846
|
+
if (!unitsMapRev[value.units])
|
|
2847
|
+
throw new Error("Invalid units: ".concat(value.units, " in ").concat(key));
|
|
2848
|
+
(0, psdWriter_1.writeSignature)(writer, unitsMapRev[value.units]);
|
|
2849
|
+
(0, psdWriter_1.writeFloat64)(writer, value.value);
|
|
2850
|
+
break;
|
|
2851
|
+
case 'UnFl': // Unit float
|
|
2852
|
+
if (!unitsMapRev[value.units])
|
|
2853
|
+
throw new Error("Invalid units: ".concat(value.units, " in ").concat(key));
|
|
2854
|
+
(0, psdWriter_1.writeSignature)(writer, unitsMapRev[value.units]);
|
|
2855
|
+
(0, psdWriter_1.writeFloat32)(writer, value.value);
|
|
2856
|
+
break;
|
|
2857
|
+
case 'TEXT': // String
|
|
2858
|
+
(0, psdWriter_1.writeUnicodeStringWithPadding)(writer, value);
|
|
2859
|
+
break;
|
|
2860
|
+
case 'enum': { // Enumerated
|
|
2861
|
+
var _a = value.split('.'), _type = _a[0], val = _a[1];
|
|
2862
|
+
writeAsciiStringOrClassId(writer, _type);
|
|
2863
|
+
writeAsciiStringOrClassId(writer, val);
|
|
2864
|
+
break;
|
|
2865
|
+
}
|
|
2866
|
+
case 'long': // Integer
|
|
2867
|
+
(0, psdWriter_1.writeInt32)(writer, value);
|
|
2868
|
+
break;
|
|
2869
|
+
// case 'comp': // Large Integer
|
|
2870
|
+
// writeLargeInteger(reader);
|
|
2871
|
+
case 'bool': // Boolean
|
|
2872
|
+
(0, psdWriter_1.writeUint8)(writer, value ? 1 : 0);
|
|
2873
|
+
break;
|
|
2874
|
+
// case 'type': // Class
|
|
2875
|
+
// case 'GlbC': // Class
|
|
2876
|
+
// writeClassStructure(reader);
|
|
2877
|
+
// case 'alis': // Alias
|
|
2878
|
+
// writeAliasStructure(reader);
|
|
2879
|
+
case 'tdta': // Raw Data
|
|
2880
|
+
(0, psdWriter_1.writeInt32)(writer, value.byteLength);
|
|
2881
|
+
(0, psdWriter_1.writeBytes)(writer, value);
|
|
2882
|
+
break;
|
|
2883
|
+
case 'ObAr': { // Object array
|
|
2884
|
+
(0, psdWriter_1.writeInt32)(writer, 16); // version
|
|
2885
|
+
(0, psdWriter_1.writeUnicodeStringWithPadding)(writer, ''); // name
|
|
2886
|
+
var type_4 = ObArTypes[key];
|
|
2887
|
+
if (!type_4)
|
|
2888
|
+
throw new Error("Not implemented ObArType for: ".concat(key));
|
|
2889
|
+
writeAsciiStringOrClassId(writer, type_4);
|
|
2890
|
+
(0, psdWriter_1.writeInt32)(writer, value.length);
|
|
2891
|
+
for (var i = 0; i < value.length; i++) {
|
|
2892
|
+
writeAsciiStringOrClassId(writer, value[i].type); // Hrzn | Vrtc
|
|
2893
|
+
(0, psdWriter_1.writeSignature)(writer, 'UnFl');
|
|
2894
|
+
(0, psdWriter_1.writeSignature)(writer, '#Pxl');
|
|
2895
|
+
(0, psdWriter_1.writeInt32)(writer, value[i].values.length);
|
|
2896
|
+
for (var j = 0; j < value[i].values.length; j++) {
|
|
2897
|
+
(0, psdWriter_1.writeFloat64)(writer, value[i].values[j]);
|
|
2898
|
+
}
|
|
2899
|
+
}
|
|
2900
|
+
break;
|
|
2901
|
+
}
|
|
2902
|
+
// case 'Pth ': // File path
|
|
2903
|
+
// writeFilePath(reader);
|
|
2904
|
+
default:
|
|
2905
|
+
throw new Error("Not implemented descriptor OSType: ".concat(type));
|
|
2906
|
+
}
|
|
2907
|
+
}
|
|
2908
|
+
function readReferenceStructure(reader) {
|
|
2909
|
+
var itemsCount = (0, psdReader_1.readInt32)(reader);
|
|
2910
|
+
var items = [];
|
|
2911
|
+
for (var i = 0; i < itemsCount; i++) {
|
|
2912
|
+
var type = (0, psdReader_1.readSignature)(reader);
|
|
2913
|
+
switch (type) {
|
|
2914
|
+
case 'prop': { // Property
|
|
2915
|
+
readClassStructure(reader);
|
|
2916
|
+
var keyID = readAsciiStringOrClassId(reader);
|
|
2917
|
+
items.push(keyID);
|
|
2657
2918
|
break;
|
|
2658
|
-
|
|
2659
|
-
|
|
2919
|
+
}
|
|
2920
|
+
case 'Clss': // Class
|
|
2921
|
+
items.push(readClassStructure(reader));
|
|
2660
2922
|
break;
|
|
2661
|
-
case '
|
|
2662
|
-
|
|
2923
|
+
case 'Enmr': { // Enumerated Reference
|
|
2924
|
+
readClassStructure(reader);
|
|
2925
|
+
var typeID = readAsciiStringOrClassId(reader);
|
|
2926
|
+
var value = readAsciiStringOrClassId(reader);
|
|
2927
|
+
items.push("".concat(typeID, ".").concat(value));
|
|
2663
2928
|
break;
|
|
2664
|
-
|
|
2665
|
-
|
|
2929
|
+
}
|
|
2930
|
+
case 'rele': { // Offset
|
|
2931
|
+
// const { name, classID } =
|
|
2932
|
+
readClassStructure(reader);
|
|
2933
|
+
items.push((0, psdReader_1.readUint32)(reader));
|
|
2666
2934
|
break;
|
|
2667
|
-
|
|
2668
|
-
case '
|
|
2669
|
-
|
|
2670
|
-
name: val['Nm '],
|
|
2671
|
-
curve: val['Crv '].map(function (p) { return ({ x: p.Hrzn, y: p.Vrtc }); }),
|
|
2672
|
-
};
|
|
2935
|
+
}
|
|
2936
|
+
case 'Idnt': // Identifier
|
|
2937
|
+
items.push((0, psdReader_1.readInt32)(reader));
|
|
2673
2938
|
break;
|
|
2674
|
-
case '
|
|
2675
|
-
|
|
2939
|
+
case 'indx': // Index
|
|
2940
|
+
items.push((0, psdReader_1.readInt32)(reader));
|
|
2676
2941
|
break;
|
|
2677
|
-
case '
|
|
2678
|
-
|
|
2679
|
-
|
|
2680
|
-
case 'present':
|
|
2681
|
-
case 'showInDialog':
|
|
2682
|
-
case 'antialiasGloss':
|
|
2683
|
-
result[key] = val;
|
|
2942
|
+
case 'name': { // Name
|
|
2943
|
+
readClassStructure(reader);
|
|
2944
|
+
items.push((0, psdReader_1.readUnicodeString)(reader));
|
|
2684
2945
|
break;
|
|
2946
|
+
}
|
|
2685
2947
|
default:
|
|
2686
|
-
|
|
2948
|
+
throw new Error("Invalid descriptor reference type: ".concat(type));
|
|
2687
2949
|
}
|
|
2688
2950
|
}
|
|
2689
|
-
return
|
|
2951
|
+
return items;
|
|
2690
2952
|
}
|
|
2691
|
-
function
|
|
2692
|
-
|
|
2693
|
-
for (var
|
|
2694
|
-
var
|
|
2695
|
-
var
|
|
2696
|
-
|
|
2697
|
-
|
|
2698
|
-
|
|
2699
|
-
|
|
2700
|
-
|
|
2701
|
-
|
|
2702
|
-
|
|
2953
|
+
function writeReferenceStructure(writer, _key, items) {
|
|
2954
|
+
(0, psdWriter_1.writeInt32)(writer, items.length);
|
|
2955
|
+
for (var i = 0; i < items.length; i++) {
|
|
2956
|
+
var value = items[i];
|
|
2957
|
+
var type = 'unknown';
|
|
2958
|
+
if (typeof value === 'string') {
|
|
2959
|
+
if (/^[a-z]+\.[a-z]+$/i.test(value)) {
|
|
2960
|
+
type = 'Enmr';
|
|
2961
|
+
}
|
|
2962
|
+
else {
|
|
2963
|
+
type = 'name';
|
|
2964
|
+
}
|
|
2965
|
+
}
|
|
2966
|
+
(0, psdWriter_1.writeSignature)(writer, type);
|
|
2967
|
+
switch (type) {
|
|
2968
|
+
// case 'prop': // Property
|
|
2969
|
+
// case 'Clss': // Class
|
|
2970
|
+
case 'Enmr': { // Enumerated Reference
|
|
2971
|
+
var _a = value.split('.'), typeID = _a[0], enumValue = _a[1];
|
|
2972
|
+
writeClassStructure(writer, '\0', typeID);
|
|
2973
|
+
writeAsciiStringOrClassId(writer, typeID);
|
|
2974
|
+
writeAsciiStringOrClassId(writer, enumValue);
|
|
2703
2975
|
break;
|
|
2704
|
-
|
|
2705
|
-
|
|
2976
|
+
}
|
|
2977
|
+
// case 'rele': // Offset
|
|
2978
|
+
// case 'Idnt': // Identifier
|
|
2979
|
+
// case 'indx': // Index
|
|
2980
|
+
case 'name': { // Name
|
|
2981
|
+
writeClassStructure(writer, '\0', 'Lyr ');
|
|
2982
|
+
(0, psdWriter_1.writeUnicodeString)(writer, value + '\0');
|
|
2706
2983
|
break;
|
|
2707
|
-
|
|
2708
|
-
|
|
2709
|
-
|
|
2710
|
-
|
|
2711
|
-
|
|
2984
|
+
}
|
|
2985
|
+
default:
|
|
2986
|
+
throw new Error("Invalid descriptor reference type: ".concat(type));
|
|
2987
|
+
}
|
|
2988
|
+
}
|
|
2989
|
+
return items;
|
|
2990
|
+
}
|
|
2991
|
+
function readClassStructure(reader) {
|
|
2992
|
+
var name = (0, psdReader_1.readUnicodeString)(reader);
|
|
2993
|
+
var classID = readAsciiStringOrClassId(reader);
|
|
2994
|
+
// console.log({ name, classID });
|
|
2995
|
+
return { name: name, classID: classID };
|
|
2996
|
+
}
|
|
2997
|
+
function writeClassStructure(writer, name, classID) {
|
|
2998
|
+
(0, psdWriter_1.writeUnicodeString)(writer, name);
|
|
2999
|
+
writeAsciiStringOrClassId(writer, classID);
|
|
3000
|
+
}
|
|
3001
|
+
function readVersionAndDescriptor(reader) {
|
|
3002
|
+
var version = (0, psdReader_1.readUint32)(reader);
|
|
3003
|
+
if (version !== 16)
|
|
3004
|
+
throw new Error("Invalid descriptor version: ".concat(version));
|
|
3005
|
+
var desc = readDescriptorStructure(reader);
|
|
3006
|
+
// console.log(require('util').inspect(desc, false, 99, true));
|
|
3007
|
+
return desc;
|
|
3008
|
+
}
|
|
3009
|
+
exports.readVersionAndDescriptor = readVersionAndDescriptor;
|
|
3010
|
+
function writeVersionAndDescriptor(writer, name, classID, descriptor, root) {
|
|
3011
|
+
if (root === void 0) { root = ''; }
|
|
3012
|
+
(0, psdWriter_1.writeUint32)(writer, 16); // version
|
|
3013
|
+
writeDescriptorStructure(writer, name, classID, descriptor, root);
|
|
3014
|
+
}
|
|
3015
|
+
exports.writeVersionAndDescriptor = writeVersionAndDescriptor;
|
|
3016
|
+
function horzVrtcToXY(hv) {
|
|
3017
|
+
return { x: hv.Hrzn, y: hv.Vrtc };
|
|
3018
|
+
}
|
|
3019
|
+
exports.horzVrtcToXY = horzVrtcToXY;
|
|
3020
|
+
function xyToHorzVrtc(xy) {
|
|
3021
|
+
return { Hrzn: xy.x, Vrtc: xy.y };
|
|
3022
|
+
}
|
|
3023
|
+
exports.xyToHorzVrtc = xyToHorzVrtc;
|
|
3024
|
+
function parseFxObject(fx) {
|
|
3025
|
+
var stroke = {
|
|
3026
|
+
enabled: !!fx.enab,
|
|
3027
|
+
position: exports.FStl.decode(fx.Styl),
|
|
3028
|
+
fillType: exports.FrFl.decode(fx.PntT),
|
|
3029
|
+
blendMode: exports.BlnM.decode(fx['Md ']),
|
|
3030
|
+
opacity: parsePercent(fx.Opct),
|
|
3031
|
+
size: parseUnits(fx['Sz ']),
|
|
3032
|
+
};
|
|
3033
|
+
if (fx.present !== undefined)
|
|
3034
|
+
stroke.present = fx.present;
|
|
3035
|
+
if (fx.showInDialog !== undefined)
|
|
3036
|
+
stroke.showInDialog = fx.showInDialog;
|
|
3037
|
+
if (fx.overprint !== undefined)
|
|
3038
|
+
stroke.overprint = fx.overprint;
|
|
3039
|
+
if (fx['Clr '])
|
|
3040
|
+
stroke.color = parseColor(fx['Clr ']);
|
|
3041
|
+
if (fx.Grad)
|
|
3042
|
+
stroke.gradient = parseGradientContent(fx);
|
|
3043
|
+
if (fx.Ptrn)
|
|
3044
|
+
stroke.pattern = parsePatternContent(fx);
|
|
3045
|
+
return stroke;
|
|
3046
|
+
}
|
|
3047
|
+
function serializeFxObject(stroke) {
|
|
3048
|
+
var FrFX = {};
|
|
3049
|
+
FrFX.enab = !!stroke.enabled;
|
|
3050
|
+
if (stroke.present !== undefined)
|
|
3051
|
+
FrFX.present = !!stroke.present;
|
|
3052
|
+
if (stroke.showInDialog !== undefined)
|
|
3053
|
+
FrFX.showInDialog = !!stroke.showInDialog;
|
|
3054
|
+
FrFX.Styl = exports.FStl.encode(stroke.position);
|
|
3055
|
+
FrFX.PntT = exports.FrFl.encode(stroke.fillType);
|
|
3056
|
+
FrFX['Md '] = exports.BlnM.encode(stroke.blendMode);
|
|
3057
|
+
FrFX.Opct = unitsPercent(stroke.opacity);
|
|
3058
|
+
FrFX['Sz '] = unitsValue(stroke.size, 'size');
|
|
3059
|
+
if (stroke.color)
|
|
3060
|
+
FrFX['Clr '] = serializeColor(stroke.color);
|
|
3061
|
+
if (stroke.gradient)
|
|
3062
|
+
FrFX = __assign(__assign({}, FrFX), serializeGradientContent(stroke.gradient));
|
|
3063
|
+
if (stroke.pattern)
|
|
3064
|
+
FrFX = __assign(__assign({}, FrFX), serializePatternContent(stroke.pattern));
|
|
3065
|
+
if (stroke.overprint !== undefined)
|
|
3066
|
+
FrFX.overprint = !!stroke.overprint;
|
|
3067
|
+
return FrFX;
|
|
3068
|
+
}
|
|
3069
|
+
function serializeEffects(e, log, multi) {
|
|
3070
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o;
|
|
3071
|
+
var info = multi ? {
|
|
3072
|
+
'Scl ': unitsPercent((_a = e.scale) !== null && _a !== void 0 ? _a : 1),
|
|
3073
|
+
masterFXSwitch: !e.disabled,
|
|
3074
|
+
} : {
|
|
3075
|
+
masterFXSwitch: !e.disabled,
|
|
3076
|
+
'Scl ': unitsPercent((_b = e.scale) !== null && _b !== void 0 ? _b : 1),
|
|
3077
|
+
};
|
|
3078
|
+
var arrayKeys = ['dropShadow', 'innerShadow', 'solidFill', 'gradientOverlay', 'stroke'];
|
|
3079
|
+
for (var _i = 0, arrayKeys_1 = arrayKeys; _i < arrayKeys_1.length; _i++) {
|
|
3080
|
+
var key = arrayKeys_1[_i];
|
|
3081
|
+
if (e[key] && !Array.isArray(e[key]))
|
|
3082
|
+
throw new Error("".concat(key, " should be an array"));
|
|
3083
|
+
}
|
|
3084
|
+
if (((_c = e.dropShadow) === null || _c === void 0 ? void 0 : _c[0]) && !multi)
|
|
3085
|
+
info.DrSh = serializeEffectObject(e.dropShadow[0], 'dropShadow', log);
|
|
3086
|
+
if (((_d = e.dropShadow) === null || _d === void 0 ? void 0 : _d[0]) && multi)
|
|
3087
|
+
info.dropShadowMulti = e.dropShadow.map(function (i) { return serializeEffectObject(i, 'dropShadow', log); });
|
|
3088
|
+
if (((_e = e.innerShadow) === null || _e === void 0 ? void 0 : _e[0]) && !multi)
|
|
3089
|
+
info.IrSh = serializeEffectObject(e.innerShadow[0], 'innerShadow', log);
|
|
3090
|
+
if (((_f = e.innerShadow) === null || _f === void 0 ? void 0 : _f[0]) && multi)
|
|
3091
|
+
info.innerShadowMulti = e.innerShadow.map(function (i) { return serializeEffectObject(i, 'innerShadow', log); });
|
|
3092
|
+
if (e.outerGlow)
|
|
3093
|
+
info.OrGl = serializeEffectObject(e.outerGlow, 'outerGlow', log);
|
|
3094
|
+
if (((_g = e.solidFill) === null || _g === void 0 ? void 0 : _g[0]) && multi)
|
|
3095
|
+
info.solidFillMulti = e.solidFill.map(function (i) { return serializeEffectObject(i, 'solidFill', log); });
|
|
3096
|
+
if (((_h = e.gradientOverlay) === null || _h === void 0 ? void 0 : _h[0]) && multi)
|
|
3097
|
+
info.gradientFillMulti = e.gradientOverlay.map(function (i) { return serializeEffectObject(i, 'gradientOverlay', log); });
|
|
3098
|
+
if (((_j = e.stroke) === null || _j === void 0 ? void 0 : _j[0]) && multi)
|
|
3099
|
+
info.frameFXMulti = e.stroke.map(function (i) { return serializeFxObject(i); });
|
|
3100
|
+
if (e.innerGlow)
|
|
3101
|
+
info.IrGl = serializeEffectObject(e.innerGlow, 'innerGlow', log);
|
|
3102
|
+
if (e.bevel)
|
|
3103
|
+
info.ebbl = serializeEffectObject(e.bevel, 'bevel', log);
|
|
3104
|
+
if (((_k = e.solidFill) === null || _k === void 0 ? void 0 : _k[0]) && !multi)
|
|
3105
|
+
info.SoFi = serializeEffectObject(e.solidFill[0], 'solidFill', log);
|
|
3106
|
+
if (e.patternOverlay)
|
|
3107
|
+
info.patternFill = serializeEffectObject(e.patternOverlay, 'patternOverlay', log);
|
|
3108
|
+
if (((_l = e.gradientOverlay) === null || _l === void 0 ? void 0 : _l[0]) && !multi)
|
|
3109
|
+
info.GrFl = serializeEffectObject(e.gradientOverlay[0], 'gradientOverlay', log);
|
|
3110
|
+
if (e.satin)
|
|
3111
|
+
info.ChFX = serializeEffectObject(e.satin, 'satin', log);
|
|
3112
|
+
if (((_m = e.stroke) === null || _m === void 0 ? void 0 : _m[0]) && !multi)
|
|
3113
|
+
info.FrFX = serializeFxObject((_o = e.stroke) === null || _o === void 0 ? void 0 : _o[0]);
|
|
3114
|
+
if (multi) {
|
|
3115
|
+
info.numModifyingFX = 0;
|
|
3116
|
+
for (var _p = 0, _q = Object.keys(e); _p < _q.length; _p++) {
|
|
3117
|
+
var key = _q[_p];
|
|
3118
|
+
var value = e[key];
|
|
3119
|
+
if (Array.isArray(value)) {
|
|
3120
|
+
for (var _r = 0, value_1 = value; _r < value_1.length; _r++) {
|
|
3121
|
+
var effect = value_1[_r];
|
|
3122
|
+
if (effect.enabled)
|
|
3123
|
+
info.numModifyingFX++;
|
|
3124
|
+
}
|
|
3125
|
+
}
|
|
3126
|
+
}
|
|
3127
|
+
}
|
|
3128
|
+
return info;
|
|
3129
|
+
}
|
|
3130
|
+
exports.serializeEffects = serializeEffects;
|
|
3131
|
+
function parseEffects(info, log) {
|
|
3132
|
+
var effects = {};
|
|
3133
|
+
if (!info.masterFXSwitch)
|
|
3134
|
+
effects.disabled = true;
|
|
3135
|
+
if (info['Scl '])
|
|
3136
|
+
effects.scale = parsePercent(info['Scl ']);
|
|
3137
|
+
if (info.DrSh)
|
|
3138
|
+
effects.dropShadow = [parseEffectObject(info.DrSh, log)];
|
|
3139
|
+
if (info.dropShadowMulti)
|
|
3140
|
+
effects.dropShadow = info.dropShadowMulti.map(function (i) { return parseEffectObject(i, log); });
|
|
3141
|
+
if (info.IrSh)
|
|
3142
|
+
effects.innerShadow = [parseEffectObject(info.IrSh, log)];
|
|
3143
|
+
if (info.innerShadowMulti)
|
|
3144
|
+
effects.innerShadow = info.innerShadowMulti.map(function (i) { return parseEffectObject(i, log); });
|
|
3145
|
+
if (info.OrGl)
|
|
3146
|
+
effects.outerGlow = parseEffectObject(info.OrGl, log);
|
|
3147
|
+
if (info.IrGl)
|
|
3148
|
+
effects.innerGlow = parseEffectObject(info.IrGl, log);
|
|
3149
|
+
if (info.ebbl)
|
|
3150
|
+
effects.bevel = parseEffectObject(info.ebbl, log);
|
|
3151
|
+
if (info.SoFi)
|
|
3152
|
+
effects.solidFill = [parseEffectObject(info.SoFi, log)];
|
|
3153
|
+
if (info.solidFillMulti)
|
|
3154
|
+
effects.solidFill = info.solidFillMulti.map(function (i) { return parseEffectObject(i, log); });
|
|
3155
|
+
if (info.patternFill)
|
|
3156
|
+
effects.patternOverlay = parseEffectObject(info.patternFill, log);
|
|
3157
|
+
if (info.GrFl)
|
|
3158
|
+
effects.gradientOverlay = [parseEffectObject(info.GrFl, log)];
|
|
3159
|
+
if (info.gradientFillMulti)
|
|
3160
|
+
effects.gradientOverlay = info.gradientFillMulti.map(function (i) { return parseEffectObject(i, log); });
|
|
3161
|
+
if (info.ChFX)
|
|
3162
|
+
effects.satin = parseEffectObject(info.ChFX, log);
|
|
3163
|
+
if (info.FrFX)
|
|
3164
|
+
effects.stroke = [parseFxObject(info.FrFX)];
|
|
3165
|
+
if (info.frameFXMulti)
|
|
3166
|
+
effects.stroke = info.frameFXMulti.map(function (i) { return parseFxObject(i); });
|
|
3167
|
+
return effects;
|
|
3168
|
+
}
|
|
3169
|
+
exports.parseEffects = parseEffects;
|
|
3170
|
+
function parseKeyList(keyList, logMissingFeatures) {
|
|
3171
|
+
var keys = [];
|
|
3172
|
+
for (var j = 0; j < keyList.length; j++) {
|
|
3173
|
+
var key = keyList[j];
|
|
3174
|
+
var time = key.time, selected = key.selected, animKey = key.animKey;
|
|
3175
|
+
var interpolation = exports.animInterpStyleEnum.decode(key.animInterpStyle);
|
|
3176
|
+
switch (animKey.Type) {
|
|
3177
|
+
case 'keyType.Opct':
|
|
3178
|
+
keys.push({ interpolation: interpolation, time: time, selected: selected, type: 'opacity', value: parsePercent(animKey.Opct) });
|
|
2712
3179
|
break;
|
|
2713
|
-
case '
|
|
2714
|
-
|
|
3180
|
+
case 'keyType.Pstn':
|
|
3181
|
+
keys.push({ interpolation: interpolation, time: time, selected: selected, type: 'position', x: animKey.Hrzn, y: animKey.Vrtc });
|
|
2715
3182
|
break;
|
|
2716
|
-
case '
|
|
2717
|
-
|
|
3183
|
+
case 'keyType.Trnf':
|
|
3184
|
+
keys.push({
|
|
3185
|
+
interpolation: interpolation,
|
|
3186
|
+
time: time,
|
|
3187
|
+
selected: selected,
|
|
3188
|
+
type: 'transform',
|
|
3189
|
+
scale: horzVrtcToXY(animKey['Scl ']), skew: horzVrtcToXY(animKey.Skew), rotation: animKey.rotation, translation: horzVrtcToXY(animKey.translation)
|
|
3190
|
+
});
|
|
2718
3191
|
break;
|
|
2719
|
-
case '
|
|
2720
|
-
|
|
3192
|
+
case 'keyType.sheetStyle': {
|
|
3193
|
+
var key_1 = { interpolation: interpolation, time: time, selected: selected, type: 'style' };
|
|
3194
|
+
if (animKey.sheetStyle.Lefx)
|
|
3195
|
+
key_1.style = parseEffects(animKey.sheetStyle.Lefx, logMissingFeatures);
|
|
3196
|
+
keys.push(key_1);
|
|
2721
3197
|
break;
|
|
2722
|
-
|
|
2723
|
-
|
|
3198
|
+
}
|
|
3199
|
+
case 'keyType.globalLighting': {
|
|
3200
|
+
keys.push({
|
|
3201
|
+
interpolation: interpolation,
|
|
3202
|
+
time: time,
|
|
3203
|
+
selected: selected,
|
|
3204
|
+
type: 'globalLighting',
|
|
3205
|
+
globalAngle: animKey.gblA, globalAltitude: animKey.globalAltitude
|
|
3206
|
+
});
|
|
2724
3207
|
break;
|
|
2725
|
-
|
|
2726
|
-
|
|
3208
|
+
}
|
|
3209
|
+
default: throw new Error("Unsupported keyType value");
|
|
3210
|
+
}
|
|
3211
|
+
}
|
|
3212
|
+
return keys;
|
|
3213
|
+
}
|
|
3214
|
+
function serializeKeyList(keys) {
|
|
3215
|
+
var keyList = [];
|
|
3216
|
+
for (var j = 0; j < keys.length; j++) {
|
|
3217
|
+
var key = keys[j];
|
|
3218
|
+
var time = key.time, _a = key.selected, selected = _a === void 0 ? false : _a, interpolation = key.interpolation;
|
|
3219
|
+
var animInterpStyle = exports.animInterpStyleEnum.encode(interpolation);
|
|
3220
|
+
var animKey = void 0;
|
|
3221
|
+
switch (key.type) {
|
|
3222
|
+
case 'opacity':
|
|
3223
|
+
animKey = { Type: 'keyType.Opct', Opct: unitsPercent(key.value) };
|
|
2727
3224
|
break;
|
|
2728
3225
|
case 'position':
|
|
2729
|
-
|
|
2730
|
-
break;
|
|
2731
|
-
case 'blendMode':
|
|
2732
|
-
result['Md '] = descriptor_1.BlnM.encode(val);
|
|
2733
|
-
break;
|
|
2734
|
-
case 'highlightBlendMode':
|
|
2735
|
-
result.hglM = descriptor_1.BlnM.encode(val);
|
|
3226
|
+
animKey = { Type: 'keyType.Pstn', Hrzn: key.x, Vrtc: key.y };
|
|
2736
3227
|
break;
|
|
2737
|
-
case '
|
|
2738
|
-
|
|
3228
|
+
case 'transform':
|
|
3229
|
+
animKey = { Type: 'keyType.Trnf', 'Scl ': xyToHorzVrtc(key.scale), Skew: xyToHorzVrtc(key.skew), rotation: key.rotation, translation: xyToHorzVrtc(key.translation) };
|
|
2739
3230
|
break;
|
|
2740
3231
|
case 'style':
|
|
2741
|
-
|
|
3232
|
+
animKey = { Type: 'keyType.sheetStyle', sheetStyle: { Vrsn: 1, blendOptions: {} } };
|
|
3233
|
+
if (key.style)
|
|
3234
|
+
animKey.sheetStyle = { Vrsn: 1, Lefx: serializeEffects(key.style, false, false), blendOptions: {} };
|
|
2742
3235
|
break;
|
|
2743
|
-
case '
|
|
2744
|
-
|
|
3236
|
+
case 'globalLighting': {
|
|
3237
|
+
animKey = { Type: 'keyType.globalLighting', gblA: key.globalAngle, globalAltitude: key.globalAltitude };
|
|
2745
3238
|
break;
|
|
2746
|
-
|
|
2747
|
-
|
|
2748
|
-
|
|
2749
|
-
|
|
2750
|
-
|
|
2751
|
-
|
|
2752
|
-
|
|
3239
|
+
}
|
|
3240
|
+
default: throw new Error("Unsupported keyType value");
|
|
3241
|
+
}
|
|
3242
|
+
keyList.push({ Vrsn: 1, animInterpStyle: animInterpStyle, time: time, animKey: animKey, selected: selected });
|
|
3243
|
+
}
|
|
3244
|
+
return keyList;
|
|
3245
|
+
}
|
|
3246
|
+
function parseTrackList(trackList, logMissingFeatures) {
|
|
3247
|
+
var tracks = [];
|
|
3248
|
+
for (var i = 0; i < trackList.length; i++) {
|
|
3249
|
+
var tr = trackList[i];
|
|
3250
|
+
var track = {
|
|
3251
|
+
type: exports.stdTrackID.decode(tr.trackID),
|
|
3252
|
+
enabled: tr.enab,
|
|
3253
|
+
keys: parseKeyList(tr.keyList, logMissingFeatures),
|
|
3254
|
+
};
|
|
3255
|
+
if (tr.effectParams) {
|
|
3256
|
+
track.effectParams = {
|
|
3257
|
+
fillCanvas: tr.effectParams.fillCanvas,
|
|
3258
|
+
zoomOrigin: tr.effectParams.zoomOrigin,
|
|
3259
|
+
keys: parseKeyList(tr.effectParams.keyList, logMissingFeatures),
|
|
3260
|
+
};
|
|
3261
|
+
}
|
|
3262
|
+
tracks.push(track);
|
|
3263
|
+
}
|
|
3264
|
+
return tracks;
|
|
3265
|
+
}
|
|
3266
|
+
exports.parseTrackList = parseTrackList;
|
|
3267
|
+
function serializeTrackList(tracks) {
|
|
3268
|
+
var trackList = [];
|
|
3269
|
+
for (var i = 0; i < tracks.length; i++) {
|
|
3270
|
+
var t = tracks[i];
|
|
3271
|
+
trackList.push(__assign(__assign({ trackID: exports.stdTrackID.encode(t.type), Vrsn: 1, enab: !!t.enabled, Effc: !!t.effectParams }, (t.effectParams ? {
|
|
3272
|
+
effectParams: {
|
|
3273
|
+
keyList: serializeKeyList(t.keys),
|
|
3274
|
+
fillCanvas: t.effectParams.fillCanvas,
|
|
3275
|
+
zoomOrigin: t.effectParams.zoomOrigin,
|
|
3276
|
+
}
|
|
3277
|
+
} : {})), { keyList: serializeKeyList(t.keys) }));
|
|
3278
|
+
}
|
|
3279
|
+
return trackList;
|
|
3280
|
+
}
|
|
3281
|
+
exports.serializeTrackList = serializeTrackList;
|
|
3282
|
+
function parseEffectObject(obj, reportErrors) {
|
|
3283
|
+
var result = {};
|
|
3284
|
+
for (var _i = 0, _a = Object.keys(obj); _i < _a.length; _i++) {
|
|
3285
|
+
var key = _a[_i];
|
|
3286
|
+
var val = obj[key];
|
|
3287
|
+
switch (key) {
|
|
3288
|
+
case 'enab':
|
|
3289
|
+
result.enabled = !!val;
|
|
2753
3290
|
break;
|
|
2754
|
-
case '
|
|
2755
|
-
result.
|
|
3291
|
+
case 'uglg':
|
|
3292
|
+
result.useGlobalLight = !!val;
|
|
2756
3293
|
break;
|
|
2757
|
-
case '
|
|
2758
|
-
result.
|
|
3294
|
+
case 'AntA':
|
|
3295
|
+
result.antialiased = !!val;
|
|
2759
3296
|
break;
|
|
2760
|
-
case '
|
|
2761
|
-
result.
|
|
3297
|
+
case 'Algn':
|
|
3298
|
+
result.align = !!val;
|
|
2762
3299
|
break;
|
|
2763
|
-
case '
|
|
2764
|
-
result.
|
|
3300
|
+
case 'Dthr':
|
|
3301
|
+
result.dither = !!val;
|
|
2765
3302
|
break;
|
|
2766
|
-
case '
|
|
2767
|
-
result.
|
|
3303
|
+
case 'Invr':
|
|
3304
|
+
result.invert = !!val;
|
|
2768
3305
|
break;
|
|
2769
|
-
case '
|
|
2770
|
-
result.
|
|
3306
|
+
case 'Rvrs':
|
|
3307
|
+
result.reverse = !!val;
|
|
2771
3308
|
break;
|
|
2772
|
-
case '
|
|
2773
|
-
|
|
2774
|
-
result.Angl = (0, descriptor_1.unitsAngle)(val);
|
|
2775
|
-
}
|
|
2776
|
-
else {
|
|
2777
|
-
result.lagl = (0, descriptor_1.unitsAngle)(val);
|
|
2778
|
-
}
|
|
3309
|
+
case 'Clr ':
|
|
3310
|
+
result.color = parseColor(val);
|
|
2779
3311
|
break;
|
|
2780
|
-
case '
|
|
2781
|
-
result.
|
|
3312
|
+
case 'hglC':
|
|
3313
|
+
result.highlightColor = parseColor(val);
|
|
2782
3314
|
break;
|
|
2783
|
-
case '
|
|
2784
|
-
result.
|
|
3315
|
+
case 'sdwC':
|
|
3316
|
+
result.shadowColor = parseColor(val);
|
|
2785
3317
|
break;
|
|
2786
|
-
case '
|
|
2787
|
-
result.
|
|
3318
|
+
case 'Styl':
|
|
3319
|
+
result.position = exports.FStl.decode(val);
|
|
2788
3320
|
break;
|
|
2789
|
-
case '
|
|
2790
|
-
result.
|
|
3321
|
+
case 'Md ':
|
|
3322
|
+
result.blendMode = exports.BlnM.decode(val);
|
|
2791
3323
|
break;
|
|
2792
|
-
case '
|
|
2793
|
-
result.
|
|
3324
|
+
case 'hglM':
|
|
3325
|
+
result.highlightBlendMode = exports.BlnM.decode(val);
|
|
3326
|
+
break;
|
|
3327
|
+
case 'sdwM':
|
|
3328
|
+
result.shadowBlendMode = exports.BlnM.decode(val);
|
|
3329
|
+
break;
|
|
3330
|
+
case 'bvlS':
|
|
3331
|
+
result.style = exports.BESl.decode(val);
|
|
3332
|
+
break;
|
|
3333
|
+
case 'bvlD':
|
|
3334
|
+
result.direction = exports.BESs.decode(val);
|
|
3335
|
+
break;
|
|
3336
|
+
case 'bvlT':
|
|
3337
|
+
result.technique = exports.bvlT.decode(val);
|
|
3338
|
+
break;
|
|
3339
|
+
case 'GlwT':
|
|
3340
|
+
result.technique = exports.BETE.decode(val);
|
|
3341
|
+
break;
|
|
3342
|
+
case 'glwS':
|
|
3343
|
+
result.source = exports.IGSr.decode(val);
|
|
3344
|
+
break;
|
|
3345
|
+
case 'Type':
|
|
3346
|
+
result.type = exports.GrdT.decode(val);
|
|
3347
|
+
break;
|
|
3348
|
+
case 'gs99':
|
|
3349
|
+
result.interpolationMethod = exports.gradientInterpolationMethodType.decode(val);
|
|
3350
|
+
break;
|
|
3351
|
+
case 'Opct':
|
|
3352
|
+
result.opacity = parsePercent(val);
|
|
3353
|
+
break;
|
|
3354
|
+
case 'hglO':
|
|
3355
|
+
result.highlightOpacity = parsePercent(val);
|
|
3356
|
+
break;
|
|
3357
|
+
case 'sdwO':
|
|
3358
|
+
result.shadowOpacity = parsePercent(val);
|
|
3359
|
+
break;
|
|
3360
|
+
case 'lagl':
|
|
3361
|
+
result.angle = parseAngle(val);
|
|
3362
|
+
break;
|
|
3363
|
+
case 'Angl':
|
|
3364
|
+
result.angle = parseAngle(val);
|
|
3365
|
+
break;
|
|
3366
|
+
case 'Lald':
|
|
3367
|
+
result.altitude = parseAngle(val);
|
|
3368
|
+
break;
|
|
3369
|
+
case 'Sftn':
|
|
3370
|
+
result.soften = parseUnits(val);
|
|
3371
|
+
break;
|
|
3372
|
+
case 'srgR':
|
|
3373
|
+
result.strength = parsePercent(val);
|
|
3374
|
+
break;
|
|
3375
|
+
case 'blur':
|
|
3376
|
+
result.size = parseUnits(val);
|
|
3377
|
+
break;
|
|
3378
|
+
case 'Nose':
|
|
3379
|
+
result.noise = parsePercent(val);
|
|
3380
|
+
break;
|
|
3381
|
+
case 'Inpr':
|
|
3382
|
+
result.range = parsePercent(val);
|
|
3383
|
+
break;
|
|
3384
|
+
case 'Ckmt':
|
|
3385
|
+
result.choke = parseUnits(val);
|
|
3386
|
+
break;
|
|
3387
|
+
case 'ShdN':
|
|
3388
|
+
result.jitter = parsePercent(val);
|
|
3389
|
+
break;
|
|
3390
|
+
case 'Dstn':
|
|
3391
|
+
result.distance = parseUnits(val);
|
|
3392
|
+
break;
|
|
3393
|
+
case 'Scl ':
|
|
3394
|
+
result.scale = parsePercent(val);
|
|
3395
|
+
break;
|
|
3396
|
+
case 'Ptrn':
|
|
3397
|
+
result.pattern = { name: val['Nm '], id: val.Idnt };
|
|
3398
|
+
break;
|
|
3399
|
+
case 'phase':
|
|
3400
|
+
result.phase = { x: val.Hrzn, y: val.Vrtc };
|
|
3401
|
+
break;
|
|
3402
|
+
case 'Ofst':
|
|
3403
|
+
result.offset = { x: parsePercent(val.Hrzn), y: parsePercent(val.Vrtc) };
|
|
3404
|
+
break;
|
|
3405
|
+
case 'MpgS':
|
|
3406
|
+
case 'TrnS':
|
|
3407
|
+
result.contour = {
|
|
3408
|
+
name: val['Nm '],
|
|
3409
|
+
curve: val['Crv '].map(function (p) { return ({ x: p.Hrzn, y: p.Vrtc }); }),
|
|
3410
|
+
};
|
|
3411
|
+
break;
|
|
3412
|
+
case 'Grad':
|
|
3413
|
+
result.gradient = parseGradient(val);
|
|
3414
|
+
break;
|
|
3415
|
+
case 'useTexture':
|
|
3416
|
+
case 'useShape':
|
|
3417
|
+
case 'layerConceals':
|
|
3418
|
+
case 'present':
|
|
3419
|
+
case 'showInDialog':
|
|
3420
|
+
case 'antialiasGloss':
|
|
3421
|
+
result[key] = val;
|
|
3422
|
+
break;
|
|
3423
|
+
default:
|
|
3424
|
+
reportErrors && console.log("Invalid effect key: '".concat(key, "', value:"), val);
|
|
3425
|
+
}
|
|
3426
|
+
}
|
|
3427
|
+
return result;
|
|
3428
|
+
}
|
|
3429
|
+
function serializeEffectObject(obj, objName, reportErrors) {
|
|
3430
|
+
var result = {};
|
|
3431
|
+
for (var _i = 0, _a = Object.keys(obj); _i < _a.length; _i++) {
|
|
3432
|
+
var objKey = _a[_i];
|
|
3433
|
+
var key = objKey;
|
|
3434
|
+
var val = obj[key];
|
|
3435
|
+
switch (key) {
|
|
3436
|
+
case 'enabled':
|
|
3437
|
+
result.enab = !!val;
|
|
3438
|
+
break;
|
|
3439
|
+
case 'useGlobalLight':
|
|
3440
|
+
result.uglg = !!val;
|
|
3441
|
+
break;
|
|
3442
|
+
case 'antialiased':
|
|
3443
|
+
result.AntA = !!val;
|
|
3444
|
+
break;
|
|
3445
|
+
case 'align':
|
|
3446
|
+
result.Algn = !!val;
|
|
3447
|
+
break;
|
|
3448
|
+
case 'dither':
|
|
3449
|
+
result.Dthr = !!val;
|
|
3450
|
+
break;
|
|
3451
|
+
case 'invert':
|
|
3452
|
+
result.Invr = !!val;
|
|
3453
|
+
break;
|
|
3454
|
+
case 'reverse':
|
|
3455
|
+
result.Rvrs = !!val;
|
|
3456
|
+
break;
|
|
3457
|
+
case 'color':
|
|
3458
|
+
result['Clr '] = serializeColor(val);
|
|
3459
|
+
break;
|
|
3460
|
+
case 'highlightColor':
|
|
3461
|
+
result.hglC = serializeColor(val);
|
|
3462
|
+
break;
|
|
3463
|
+
case 'shadowColor':
|
|
3464
|
+
result.sdwC = serializeColor(val);
|
|
3465
|
+
break;
|
|
3466
|
+
case 'position':
|
|
3467
|
+
result.Styl = exports.FStl.encode(val);
|
|
3468
|
+
break;
|
|
3469
|
+
case 'blendMode':
|
|
3470
|
+
result['Md '] = exports.BlnM.encode(val);
|
|
3471
|
+
break;
|
|
3472
|
+
case 'highlightBlendMode':
|
|
3473
|
+
result.hglM = exports.BlnM.encode(val);
|
|
3474
|
+
break;
|
|
3475
|
+
case 'shadowBlendMode':
|
|
3476
|
+
result.sdwM = exports.BlnM.encode(val);
|
|
3477
|
+
break;
|
|
3478
|
+
case 'style':
|
|
3479
|
+
result.bvlS = exports.BESl.encode(val);
|
|
3480
|
+
break;
|
|
3481
|
+
case 'direction':
|
|
3482
|
+
result.bvlD = exports.BESs.encode(val);
|
|
3483
|
+
break;
|
|
3484
|
+
case 'technique':
|
|
3485
|
+
if (objName === 'bevel') {
|
|
3486
|
+
result.bvlT = exports.bvlT.encode(val);
|
|
3487
|
+
}
|
|
3488
|
+
else {
|
|
3489
|
+
result.GlwT = exports.BETE.encode(val);
|
|
3490
|
+
}
|
|
3491
|
+
break;
|
|
3492
|
+
case 'source':
|
|
3493
|
+
result.glwS = exports.IGSr.encode(val);
|
|
3494
|
+
break;
|
|
3495
|
+
case 'type':
|
|
3496
|
+
result.Type = exports.GrdT.encode(val);
|
|
3497
|
+
break;
|
|
3498
|
+
case 'interpolationMethod':
|
|
3499
|
+
result.gs99 = exports.gradientInterpolationMethodType.encode(val);
|
|
3500
|
+
break;
|
|
3501
|
+
case 'opacity':
|
|
3502
|
+
result.Opct = unitsPercent(val);
|
|
3503
|
+
break;
|
|
3504
|
+
case 'highlightOpacity':
|
|
3505
|
+
result.hglO = unitsPercent(val);
|
|
3506
|
+
break;
|
|
3507
|
+
case 'shadowOpacity':
|
|
3508
|
+
result.sdwO = unitsPercent(val);
|
|
3509
|
+
break;
|
|
3510
|
+
case 'angle':
|
|
3511
|
+
if (objName === 'gradientOverlay') {
|
|
3512
|
+
result.Angl = unitsAngle(val);
|
|
3513
|
+
}
|
|
3514
|
+
else {
|
|
3515
|
+
result.lagl = unitsAngle(val);
|
|
3516
|
+
}
|
|
3517
|
+
break;
|
|
3518
|
+
case 'altitude':
|
|
3519
|
+
result.Lald = unitsAngle(val);
|
|
3520
|
+
break;
|
|
3521
|
+
case 'soften':
|
|
3522
|
+
result.Sftn = unitsValue(val, key);
|
|
3523
|
+
break;
|
|
3524
|
+
case 'strength':
|
|
3525
|
+
result.srgR = unitsPercent(val);
|
|
3526
|
+
break;
|
|
3527
|
+
case 'size':
|
|
3528
|
+
result.blur = unitsValue(val, key);
|
|
3529
|
+
break;
|
|
3530
|
+
case 'noise':
|
|
3531
|
+
result.Nose = unitsPercent(val);
|
|
2794
3532
|
break;
|
|
2795
3533
|
case 'range':
|
|
2796
|
-
result.Inpr =
|
|
3534
|
+
result.Inpr = unitsPercent(val);
|
|
2797
3535
|
break;
|
|
2798
3536
|
case 'choke':
|
|
2799
|
-
result.Ckmt =
|
|
3537
|
+
result.Ckmt = unitsValue(val, key);
|
|
2800
3538
|
break;
|
|
2801
3539
|
case 'jitter':
|
|
2802
|
-
result.ShdN =
|
|
3540
|
+
result.ShdN = unitsPercent(val);
|
|
2803
3541
|
break;
|
|
2804
3542
|
case 'distance':
|
|
2805
|
-
result.Dstn =
|
|
3543
|
+
result.Dstn = unitsValue(val, key);
|
|
2806
3544
|
break;
|
|
2807
3545
|
case 'scale':
|
|
2808
|
-
result['Scl '] =
|
|
3546
|
+
result['Scl '] = unitsPercent(val);
|
|
2809
3547
|
break;
|
|
2810
3548
|
case 'pattern':
|
|
2811
3549
|
result.Ptrn = { 'Nm ': val.name, Idnt: val.id };
|
|
@@ -2814,7 +3552,7 @@ function serializeEffectObject(obj, objName, reportErrors) {
|
|
|
2814
3552
|
result.phase = { Hrzn: val.x, Vrtc: val.y };
|
|
2815
3553
|
break;
|
|
2816
3554
|
case 'offset':
|
|
2817
|
-
result.Ofst = { Hrzn:
|
|
3555
|
+
result.Ofst = { Hrzn: unitsPercent(val.x), Vrtc: unitsPercent(val.y) };
|
|
2818
3556
|
break;
|
|
2819
3557
|
case 'contour': {
|
|
2820
3558
|
result[objName === 'satin' ? 'MpgS' : 'TrnS'] = {
|
|
@@ -2840,641 +3578,219 @@ function serializeEffectObject(obj, objName, reportErrors) {
|
|
|
2840
3578
|
}
|
|
2841
3579
|
return result;
|
|
2842
3580
|
}
|
|
2843
|
-
|
|
2844
|
-
|
|
2845
|
-
|
|
2846
|
-
|
|
2847
|
-
|
|
2848
|
-
|
|
2849
|
-
|
|
2850
|
-
s
|
|
2851
|
-
|
|
2852
|
-
|
|
2853
|
-
|
|
2854
|
-
|
|
2855
|
-
|
|
2856
|
-
|
|
2857
|
-
|
|
2858
|
-
|
|
2859
|
-
|
|
2860
|
-
|
|
2861
|
-
|
|
2862
|
-
|
|
2863
|
-
|
|
2864
|
-
|
|
2865
|
-
|
|
2866
|
-
|
|
2867
|
-
|
|
2868
|
-
|
|
2869
|
-
|
|
2870
|
-
|
|
2871
|
-
|
|
2872
|
-
|
|
2873
|
-
|
|
2874
|
-
throw new Error('Invalid shape version');
|
|
2875
|
-
var size = (0, psdReader_1.readUint32)(reader);
|
|
2876
|
-
var end = reader.offset + size;
|
|
2877
|
-
var id = (0, psdReader_1.readPascalString)(reader, 1);
|
|
2878
|
-
// this might not be correct ???
|
|
2879
|
-
var y1 = (0, psdReader_1.readUint32)(reader);
|
|
2880
|
-
var x1 = (0, psdReader_1.readUint32)(reader);
|
|
2881
|
-
var y2 = (0, psdReader_1.readUint32)(reader);
|
|
2882
|
-
var x2 = (0, psdReader_1.readUint32)(reader);
|
|
2883
|
-
var width = x2 - x1;
|
|
2884
|
-
var height = y2 - y1;
|
|
2885
|
-
var mask = { paths: [] };
|
|
2886
|
-
(0, additionalInfo_1.readVectorMask)(reader, mask, width, height, end - reader.offset);
|
|
2887
|
-
csh.shapes.push(__assign({ name: name_1, id: id, width: width, height: height }, mask));
|
|
2888
|
-
reader.offset = end;
|
|
3581
|
+
function parseGradient(grad) {
|
|
3582
|
+
if (grad.GrdF === 'GrdF.CstS') {
|
|
3583
|
+
var samples_1 = grad.Intr || 4096;
|
|
3584
|
+
return {
|
|
3585
|
+
type: 'solid',
|
|
3586
|
+
name: grad['Nm '],
|
|
3587
|
+
smoothness: grad.Intr / 4096,
|
|
3588
|
+
colorStops: grad.Clrs.map(function (s) { return ({
|
|
3589
|
+
color: parseColor(s['Clr ']),
|
|
3590
|
+
location: s.Lctn / samples_1,
|
|
3591
|
+
midpoint: s.Mdpn / 100,
|
|
3592
|
+
}); }),
|
|
3593
|
+
opacityStops: grad.Trns.map(function (s) { return ({
|
|
3594
|
+
opacity: parsePercent(s.Opct),
|
|
3595
|
+
location: s.Lctn / samples_1,
|
|
3596
|
+
midpoint: s.Mdpn / 100,
|
|
3597
|
+
}); }),
|
|
3598
|
+
};
|
|
3599
|
+
}
|
|
3600
|
+
else {
|
|
3601
|
+
return {
|
|
3602
|
+
type: 'noise',
|
|
3603
|
+
name: grad['Nm '],
|
|
3604
|
+
roughness: grad.Smth / 4096,
|
|
3605
|
+
colorModel: exports.ClrS.decode(grad.ClrS),
|
|
3606
|
+
randomSeed: grad.RndS,
|
|
3607
|
+
restrictColors: !!grad.VctC,
|
|
3608
|
+
addTransparency: !!grad.ShTr,
|
|
3609
|
+
min: grad['Mnm '].map(function (x) { return x / 100; }),
|
|
3610
|
+
max: grad['Mxm '].map(function (x) { return x / 100; }),
|
|
3611
|
+
};
|
|
2889
3612
|
}
|
|
2890
|
-
return csh;
|
|
2891
|
-
}
|
|
2892
|
-
exports.readCsh = readCsh;
|
|
2893
|
-
|
|
2894
|
-
|
|
2895
|
-
},{"./additionalInfo":2,"./psdReader":11}],4:[function(require,module,exports){
|
|
2896
|
-
"use strict";
|
|
2897
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
2898
|
-
exports.strokeStyleLineAlignment = exports.strokeStyleLineJoinType = exports.strokeStyleLineCapType = exports.FrFl = exports.FStl = exports.ClrS = exports.gradientInterpolationMethodType = exports.GrdT = exports.IGSr = exports.BETE = exports.BESs = exports.bvlT = exports.BESl = exports.BlnM = exports.warpStyle = exports.Annt = exports.Ornt = exports.textGridding = exports.unitsValue = exports.unitsPercent = exports.unitsAngle = exports.parseUnitsToNumber = exports.parseUnitsOrNumber = exports.parseUnits = exports.parsePercentOrAngle = exports.parsePercent = exports.parseAngle = exports.writeVersionAndDescriptor = exports.readVersionAndDescriptor = exports.writeDescriptorStructure = exports.readDescriptorStructure = exports.readAsciiStringOrClassId = exports.setLogErrors = void 0;
|
|
2899
|
-
var helpers_1 = require("./helpers");
|
|
2900
|
-
var psdReader_1 = require("./psdReader");
|
|
2901
|
-
var psdWriter_1 = require("./psdWriter");
|
|
2902
|
-
function revMap(map) {
|
|
2903
|
-
var result = {};
|
|
2904
|
-
Object.keys(map).forEach(function (key) { return result[map[key]] = key; });
|
|
2905
|
-
return result;
|
|
2906
3613
|
}
|
|
2907
|
-
|
|
2908
|
-
|
|
2909
|
-
'
|
|
2910
|
-
|
|
2911
|
-
|
|
2912
|
-
|
|
2913
|
-
|
|
2914
|
-
|
|
2915
|
-
|
|
2916
|
-
|
|
2917
|
-
|
|
2918
|
-
|
|
2919
|
-
|
|
2920
|
-
|
|
2921
|
-
|
|
2922
|
-
|
|
2923
|
-
|
|
2924
|
-
|
|
2925
|
-
|
|
2926
|
-
|
|
2927
|
-
|
|
2928
|
-
|
|
2929
|
-
|
|
2930
|
-
|
|
2931
|
-
|
|
2932
|
-
|
|
2933
|
-
patternFill: makeType('', 'patternFill'),
|
|
2934
|
-
Grad: makeType('Gradient', 'Grdn'),
|
|
2935
|
-
ebbl: makeType('', 'ebbl'),
|
|
2936
|
-
SoFi: makeType('', 'SoFi'),
|
|
2937
|
-
GrFl: makeType('', 'GrFl'),
|
|
2938
|
-
sdwC: makeType('', 'RGBC'),
|
|
2939
|
-
hglC: makeType('', 'RGBC'),
|
|
2940
|
-
'Clr ': makeType('', 'RGBC'),
|
|
2941
|
-
'tintColor': makeType('', 'RGBC'),
|
|
2942
|
-
Ofst: makeType('', 'Pnt '),
|
|
2943
|
-
ChFX: makeType('', 'ChFX'),
|
|
2944
|
-
MpgS: makeType('', 'ShpC'),
|
|
2945
|
-
DrSh: makeType('', 'DrSh'),
|
|
2946
|
-
IrSh: makeType('', 'IrSh'),
|
|
2947
|
-
OrGl: makeType('', 'OrGl'),
|
|
2948
|
-
IrGl: makeType('', 'IrGl'),
|
|
2949
|
-
TrnS: makeType('', 'ShpC'),
|
|
2950
|
-
Ptrn: makeType('', 'Ptrn'),
|
|
2951
|
-
FrFX: makeType('', 'FrFX'),
|
|
2952
|
-
phase: makeType('', 'Pnt '),
|
|
2953
|
-
frameStep: makeType('', 'null'),
|
|
2954
|
-
duration: makeType('', 'null'),
|
|
2955
|
-
bounds: makeType('', 'Rctn'),
|
|
2956
|
-
customEnvelopeWarp: makeType('', 'customEnvelopeWarp'),
|
|
2957
|
-
warp: makeType('', 'warp'),
|
|
2958
|
-
'Sz ': makeType('', 'Pnt '),
|
|
2959
|
-
origin: makeType('', 'Pnt '),
|
|
2960
|
-
autoExpandOffset: makeType('', 'Pnt '),
|
|
2961
|
-
keyOriginShapeBBox: makeType('', 'unitRect'),
|
|
2962
|
-
Vrsn: makeType('', 'null'),
|
|
2963
|
-
psVersion: makeType('', 'null'),
|
|
2964
|
-
docDefaultNewArtboardBackgroundColor: makeType('', 'RGBC'),
|
|
2965
|
-
artboardRect: makeType('', 'classFloatRect'),
|
|
2966
|
-
keyOriginRRectRadii: makeType('', 'radii'),
|
|
2967
|
-
keyOriginBoxCorners: makeType('', 'null'),
|
|
2968
|
-
rectangleCornerA: makeType('', 'Pnt '),
|
|
2969
|
-
rectangleCornerB: makeType('', 'Pnt '),
|
|
2970
|
-
rectangleCornerC: makeType('', 'Pnt '),
|
|
2971
|
-
rectangleCornerD: makeType('', 'Pnt '),
|
|
2972
|
-
compInfo: makeType('', 'null'),
|
|
2973
|
-
Trnf: makeType('Transform', 'Trnf'),
|
|
2974
|
-
quiltWarp: makeType('', 'quiltWarp'),
|
|
2975
|
-
generatorSettings: makeType('', 'null'),
|
|
2976
|
-
crema: makeType('', 'null'),
|
|
2977
|
-
};
|
|
2978
|
-
var fieldToArrayExtType = {
|
|
2979
|
-
'Crv ': makeType('', 'CrPt'),
|
|
2980
|
-
Clrs: makeType('', 'Clrt'),
|
|
2981
|
-
Trns: makeType('', 'TrnS'),
|
|
2982
|
-
keyDescriptorList: makeType('', 'null'),
|
|
2983
|
-
solidFillMulti: makeType('', 'SoFi'),
|
|
2984
|
-
gradientFillMulti: makeType('', 'GrFl'),
|
|
2985
|
-
dropShadowMulti: makeType('', 'DrSh'),
|
|
2986
|
-
innerShadowMulti: makeType('', 'IrSh'),
|
|
2987
|
-
frameFXMulti: makeType('', 'FrFX'),
|
|
2988
|
-
};
|
|
2989
|
-
var typeToField = {
|
|
2990
|
-
'TEXT': [
|
|
2991
|
-
'Txt ', 'printerName', 'Nm ', 'Idnt', 'blackAndWhitePresetFileName', 'LUT3DFileName',
|
|
2992
|
-
'presetFileName', 'curvesPresetFileName', 'mixerPresetFileName', 'placed', 'description', 'reason',
|
|
2993
|
-
'artboardPresetName', 'json',
|
|
2994
|
-
],
|
|
2995
|
-
'tdta': ['EngineData', 'LUT3DFileData'],
|
|
2996
|
-
'long': [
|
|
2997
|
-
'TextIndex', 'RndS', 'Mdpn', 'Smth', 'Lctn', 'strokeStyleVersion', 'LaID', 'Vrsn', 'Cnt ',
|
|
2998
|
-
'Brgh', 'Cntr', 'means', 'vibrance', 'Strt', 'bwPresetKind', 'presetKind', 'comp', 'compID', 'originalCompID',
|
|
2999
|
-
'curvesPresetKind', 'mixerPresetKind', 'uOrder', 'vOrder', 'PgNm', 'totalPages', 'Crop',
|
|
3000
|
-
'numerator', 'denominator', 'frameCount', 'Annt', 'keyOriginType', 'unitValueQuadVersion',
|
|
3001
|
-
'keyOriginIndex', 'major', 'minor', 'fix', 'docDefaultNewArtboardBackgroundType', 'artboardBackgroundType',
|
|
3002
|
-
'numModifyingFX', 'deformNumRows', 'deformNumCols',
|
|
3003
|
-
],
|
|
3004
|
-
'enum': [
|
|
3005
|
-
'textGridding', 'Ornt', 'warpStyle', 'warpRotate', 'Inte', 'Bltn', 'ClrS',
|
|
3006
|
-
'sdwM', 'hglM', 'bvlT', 'bvlS', 'bvlD', 'Md ', 'glwS', 'GrdF', 'GlwT',
|
|
3007
|
-
'strokeStyleLineCapType', 'strokeStyleLineJoinType', 'strokeStyleLineAlignment',
|
|
3008
|
-
'strokeStyleBlendMode', 'PntT', 'Styl', 'lookupType', 'LUTFormat', 'dataOrder',
|
|
3009
|
-
'tableOrder', 'enableCompCore', 'enableCompCoreGPU', 'compCoreSupport', 'compCoreGPUSupport', 'Engn',
|
|
3010
|
-
'enableCompCoreThreads', 'gs99',
|
|
3011
|
-
],
|
|
3012
|
-
'bool': [
|
|
3013
|
-
'PstS', 'printSixteenBit', 'masterFXSwitch', 'enab', 'uglg', 'antialiasGloss',
|
|
3014
|
-
'useShape', 'useTexture', 'masterFXSwitch', 'uglg', 'antialiasGloss', 'useShape',
|
|
3015
|
-
'useTexture', 'Algn', 'Rvrs', 'Dthr', 'Invr', 'VctC', 'ShTr', 'layerConceals',
|
|
3016
|
-
'strokeEnabled', 'fillEnabled', 'strokeStyleScaleLock', 'strokeStyleStrokeAdjust',
|
|
3017
|
-
'hardProof', 'MpBl', 'paperWhite', 'useLegacy', 'Auto', 'Lab ', 'useTint', 'keyShapeInvalidated',
|
|
3018
|
-
'autoExpandEnabled', 'autoNestEnabled', 'autoPositionEnabled', 'shrinkwrapOnSaveEnabled',
|
|
3019
|
-
'present', 'showInDialog', 'overprint',
|
|
3020
|
-
],
|
|
3021
|
-
'doub': [
|
|
3022
|
-
'warpValue', 'warpPerspective', 'warpPerspectiveOther', 'Intr', 'Wdth', 'Hght',
|
|
3023
|
-
'strokeStyleMiterLimit', 'strokeStyleResolution', 'layerTime', 'keyOriginResolution',
|
|
3024
|
-
'xx', 'xy', 'yx', 'yy', 'tx', 'ty',
|
|
3025
|
-
],
|
|
3026
|
-
'UntF': [
|
|
3027
|
-
'Scl ', 'sdwO', 'hglO', 'lagl', 'Lald', 'srgR', 'blur', 'Sftn', 'Opct', 'Dstn', 'Angl',
|
|
3028
|
-
'Ckmt', 'Nose', 'Inpr', 'ShdN', 'strokeStyleLineWidth', 'strokeStyleLineDashOffset',
|
|
3029
|
-
'strokeStyleOpacity', 'H ', 'Top ', 'Left', 'Btom', 'Rght', 'Rslt',
|
|
3030
|
-
'topRight', 'topLeft', 'bottomLeft', 'bottomRight',
|
|
3031
|
-
],
|
|
3032
|
-
'VlLs': [
|
|
3033
|
-
'Crv ', 'Clrs', 'Mnm ', 'Mxm ', 'Trns', 'pathList', 'strokeStyleLineDashSet', 'FrLs',
|
|
3034
|
-
'LaSt', 'Trnf', 'nonAffineTransform', 'keyDescriptorList', 'guideIndeces', 'gradientFillMulti',
|
|
3035
|
-
'solidFillMulti', 'frameFXMulti', 'innerShadowMulti', 'dropShadowMulti',
|
|
3036
|
-
],
|
|
3037
|
-
'ObAr': ['meshPoints', 'quiltSliceX', 'quiltSliceY'],
|
|
3038
|
-
'obj ': ['null'],
|
|
3039
|
-
};
|
|
3040
|
-
var channels = [
|
|
3041
|
-
'Rd ', 'Grn ', 'Bl ', 'Yllw', 'Ylw ', 'Cyn ', 'Mgnt', 'Blck', 'Gry ', 'Lmnc', 'A ', 'B ',
|
|
3042
|
-
];
|
|
3043
|
-
var fieldToArrayType = {
|
|
3044
|
-
'Mnm ': 'long',
|
|
3045
|
-
'Mxm ': 'long',
|
|
3046
|
-
'FrLs': 'long',
|
|
3047
|
-
'strokeStyleLineDashSet': 'UntF',
|
|
3048
|
-
'Trnf': 'doub',
|
|
3049
|
-
'nonAffineTransform': 'doub',
|
|
3050
|
-
'keyDescriptorList': 'Objc',
|
|
3051
|
-
'gradientFillMulti': 'Objc',
|
|
3052
|
-
'solidFillMulti': 'Objc',
|
|
3053
|
-
'frameFXMulti': 'Objc',
|
|
3054
|
-
'innerShadowMulti': 'Objc',
|
|
3055
|
-
'dropShadowMulti': 'Objc',
|
|
3056
|
-
};
|
|
3057
|
-
var fieldToType = {};
|
|
3058
|
-
for (var _i = 0, _a = Object.keys(typeToField); _i < _a.length; _i++) {
|
|
3059
|
-
var type = _a[_i];
|
|
3060
|
-
for (var _b = 0, _c = typeToField[type]; _b < _c.length; _b++) {
|
|
3061
|
-
var field = _c[_b];
|
|
3062
|
-
fieldToType[field] = type;
|
|
3063
|
-
}
|
|
3064
|
-
}
|
|
3065
|
-
for (var _d = 0, _e = Object.keys(fieldToExtType); _d < _e.length; _d++) {
|
|
3066
|
-
var field = _e[_d];
|
|
3067
|
-
if (!fieldToType[field])
|
|
3068
|
-
fieldToType[field] = 'Objc';
|
|
3069
|
-
}
|
|
3070
|
-
for (var _f = 0, _g = Object.keys(fieldToArrayExtType); _f < _g.length; _f++) {
|
|
3071
|
-
var field = _g[_f];
|
|
3072
|
-
fieldToArrayType[field] = 'Objc';
|
|
3073
|
-
}
|
|
3074
|
-
function getTypeByKey(key, value, root) {
|
|
3075
|
-
if (key === 'Sz ') {
|
|
3076
|
-
return ('Wdth' in value) ? 'Objc' : (('units' in value) ? 'UntF' : 'doub');
|
|
3077
|
-
}
|
|
3078
|
-
else if (key === 'Type') {
|
|
3079
|
-
return typeof value === 'string' ? 'enum' : 'long';
|
|
3080
|
-
}
|
|
3081
|
-
else if (key === 'AntA') {
|
|
3082
|
-
return typeof value === 'string' ? 'enum' : 'bool';
|
|
3083
|
-
}
|
|
3084
|
-
else if (key === 'Hrzn' || key === 'Vrtc' || key === 'Top ' || key === 'Left' || key === 'Btom' || key === 'Rght') {
|
|
3085
|
-
return typeof value === 'number' ? 'doub' : 'UntF';
|
|
3086
|
-
}
|
|
3087
|
-
else if (key === 'Vrsn') {
|
|
3088
|
-
return typeof value === 'number' ? 'long' : 'Objc';
|
|
3089
|
-
}
|
|
3090
|
-
else if (key === 'Rd ' || key === 'Grn ' || key === 'Bl ') {
|
|
3091
|
-
return root === 'artd' ? 'long' : 'doub';
|
|
3092
|
-
}
|
|
3093
|
-
else if (key === 'Trnf') {
|
|
3094
|
-
return Array.isArray(value) ? 'VlLs' : 'Objc';
|
|
3095
|
-
}
|
|
3096
|
-
else {
|
|
3097
|
-
return fieldToType[key];
|
|
3098
|
-
}
|
|
3099
|
-
}
|
|
3100
|
-
function readAsciiStringOrClassId(reader) {
|
|
3101
|
-
var length = (0, psdReader_1.readInt32)(reader);
|
|
3102
|
-
return (0, psdReader_1.readAsciiString)(reader, length || 4);
|
|
3103
|
-
}
|
|
3104
|
-
exports.readAsciiStringOrClassId = readAsciiStringOrClassId;
|
|
3105
|
-
function writeAsciiStringOrClassId(writer, value) {
|
|
3106
|
-
if (value.length === 4 && value !== 'warp') {
|
|
3107
|
-
// write classId
|
|
3108
|
-
(0, psdWriter_1.writeInt32)(writer, 0);
|
|
3109
|
-
(0, psdWriter_1.writeSignature)(writer, value);
|
|
3614
|
+
function serializeGradient(grad) {
|
|
3615
|
+
var _a, _b;
|
|
3616
|
+
if (grad.type === 'solid') {
|
|
3617
|
+
var samples_2 = Math.round(((_a = grad.smoothness) !== null && _a !== void 0 ? _a : 1) * 4096);
|
|
3618
|
+
return {
|
|
3619
|
+
'Nm ': grad.name || '',
|
|
3620
|
+
GrdF: 'GrdF.CstS',
|
|
3621
|
+
Intr: samples_2,
|
|
3622
|
+
Clrs: grad.colorStops.map(function (s) {
|
|
3623
|
+
var _a;
|
|
3624
|
+
return ({
|
|
3625
|
+
'Clr ': serializeColor(s.color),
|
|
3626
|
+
Type: 'Clry.UsrS',
|
|
3627
|
+
Lctn: Math.round(s.location * samples_2),
|
|
3628
|
+
Mdpn: Math.round(((_a = s.midpoint) !== null && _a !== void 0 ? _a : 0.5) * 100),
|
|
3629
|
+
});
|
|
3630
|
+
}),
|
|
3631
|
+
Trns: grad.opacityStops.map(function (s) {
|
|
3632
|
+
var _a;
|
|
3633
|
+
return ({
|
|
3634
|
+
Opct: unitsPercent(s.opacity),
|
|
3635
|
+
Lctn: Math.round(s.location * samples_2),
|
|
3636
|
+
Mdpn: Math.round(((_a = s.midpoint) !== null && _a !== void 0 ? _a : 0.5) * 100),
|
|
3637
|
+
});
|
|
3638
|
+
}),
|
|
3639
|
+
};
|
|
3110
3640
|
}
|
|
3111
3641
|
else {
|
|
3112
|
-
|
|
3113
|
-
|
|
3114
|
-
|
|
3115
|
-
|
|
3116
|
-
|
|
3117
|
-
|
|
3118
|
-
|
|
3119
|
-
|
|
3120
|
-
|
|
3121
|
-
|
|
3122
|
-
|
|
3123
|
-
var itemsCount = (0, psdReader_1.readUint32)(reader);
|
|
3124
|
-
for (var i = 0; i < itemsCount; i++) {
|
|
3125
|
-
var key = readAsciiStringOrClassId(reader);
|
|
3126
|
-
var type = (0, psdReader_1.readSignature)(reader);
|
|
3127
|
-
// console.log(`> '${key}' '${type}'`);
|
|
3128
|
-
var data = readOSType(reader, type);
|
|
3129
|
-
// if (!getTypeByKey(key, data)) console.log(`> '${key}' '${type}'`, data);
|
|
3130
|
-
object[key] = data;
|
|
3131
|
-
}
|
|
3132
|
-
// console.log('//', struct);
|
|
3133
|
-
return object;
|
|
3134
|
-
}
|
|
3135
|
-
exports.readDescriptorStructure = readDescriptorStructure;
|
|
3136
|
-
function writeDescriptorStructure(writer, name, classId, value, root) {
|
|
3137
|
-
if (logErrors && !classId)
|
|
3138
|
-
console.log('Missing classId for: ', name, classId, value);
|
|
3139
|
-
// write class structure
|
|
3140
|
-
(0, psdWriter_1.writeUnicodeStringWithPadding)(writer, name);
|
|
3141
|
-
writeAsciiStringOrClassId(writer, classId);
|
|
3142
|
-
var keys = Object.keys(value);
|
|
3143
|
-
(0, psdWriter_1.writeUint32)(writer, keys.length);
|
|
3144
|
-
for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {
|
|
3145
|
-
var key = keys_1[_i];
|
|
3146
|
-
var type = getTypeByKey(key, value[key], root);
|
|
3147
|
-
var extType = fieldToExtType[key];
|
|
3148
|
-
if ((key === 'Strt' || key === 'Brgh') && 'H ' in value) {
|
|
3149
|
-
type = 'doub';
|
|
3150
|
-
}
|
|
3151
|
-
else if (channels.indexOf(key) !== -1) {
|
|
3152
|
-
type = (classId === 'RGBC' && root !== 'artd') ? 'doub' : 'long';
|
|
3153
|
-
}
|
|
3154
|
-
else if (key === 'profile') {
|
|
3155
|
-
type = classId === 'printOutput' ? 'TEXT' : 'tdta';
|
|
3156
|
-
}
|
|
3157
|
-
else if (key === 'strokeStyleContent') {
|
|
3158
|
-
if (value[key]['Clr ']) {
|
|
3159
|
-
extType = makeType('', 'solidColorLayer');
|
|
3160
|
-
}
|
|
3161
|
-
else if (value[key].Grad) {
|
|
3162
|
-
extType = makeType('', 'gradientLayer');
|
|
3163
|
-
}
|
|
3164
|
-
else if (value[key].Ptrn) {
|
|
3165
|
-
extType = makeType('', 'patternLayer');
|
|
3166
|
-
}
|
|
3167
|
-
else {
|
|
3168
|
-
logErrors && console.log('Invalid strokeStyleContent value', value[key]);
|
|
3169
|
-
}
|
|
3170
|
-
}
|
|
3171
|
-
else if (key === 'bounds' && root === 'quiltWarp') {
|
|
3172
|
-
extType = makeType('', 'classFloatRect');
|
|
3173
|
-
}
|
|
3174
|
-
if (extType && extType.classID === 'RGBC') {
|
|
3175
|
-
if ('H ' in value[key])
|
|
3176
|
-
extType = { classID: 'HSBC', name: '' };
|
|
3177
|
-
// TODO: other color spaces
|
|
3178
|
-
}
|
|
3179
|
-
writeAsciiStringOrClassId(writer, key);
|
|
3180
|
-
(0, psdWriter_1.writeSignature)(writer, type || 'long');
|
|
3181
|
-
writeOSType(writer, type || 'long', value[key], key, extType, root);
|
|
3182
|
-
if (logErrors && !type)
|
|
3183
|
-
console.log("Missing descriptor field type for: '".concat(key, "' in"), value);
|
|
3184
|
-
}
|
|
3185
|
-
}
|
|
3186
|
-
exports.writeDescriptorStructure = writeDescriptorStructure;
|
|
3187
|
-
function readOSType(reader, type) {
|
|
3188
|
-
switch (type) {
|
|
3189
|
-
case 'obj ': // Reference
|
|
3190
|
-
return readReferenceStructure(reader);
|
|
3191
|
-
case 'Objc': // Descriptor
|
|
3192
|
-
case 'GlbO': // GlobalObject same as Descriptor
|
|
3193
|
-
return readDescriptorStructure(reader);
|
|
3194
|
-
case 'VlLs': { // List
|
|
3195
|
-
var length_1 = (0, psdReader_1.readInt32)(reader);
|
|
3196
|
-
var items = [];
|
|
3197
|
-
for (var i = 0; i < length_1; i++) {
|
|
3198
|
-
var type_1 = (0, psdReader_1.readSignature)(reader);
|
|
3199
|
-
// console.log(' >', type);
|
|
3200
|
-
items.push(readOSType(reader, type_1));
|
|
3201
|
-
}
|
|
3202
|
-
return items;
|
|
3203
|
-
}
|
|
3204
|
-
case 'doub': // Double
|
|
3205
|
-
return (0, psdReader_1.readFloat64)(reader);
|
|
3206
|
-
case 'UntF': { // Unit double
|
|
3207
|
-
var units = (0, psdReader_1.readSignature)(reader);
|
|
3208
|
-
var value = (0, psdReader_1.readFloat64)(reader);
|
|
3209
|
-
if (!unitsMap[units])
|
|
3210
|
-
throw new Error("Invalid units: ".concat(units));
|
|
3211
|
-
return { units: unitsMap[units], value: value };
|
|
3212
|
-
}
|
|
3213
|
-
case 'UnFl': { // Unit float
|
|
3214
|
-
var units = (0, psdReader_1.readSignature)(reader);
|
|
3215
|
-
var value = (0, psdReader_1.readFloat32)(reader);
|
|
3216
|
-
if (!unitsMap[units])
|
|
3217
|
-
throw new Error("Invalid units: ".concat(units));
|
|
3218
|
-
return { units: unitsMap[units], value: value };
|
|
3219
|
-
}
|
|
3220
|
-
case 'TEXT': // String
|
|
3221
|
-
return (0, psdReader_1.readUnicodeString)(reader);
|
|
3222
|
-
case 'enum': { // Enumerated
|
|
3223
|
-
var type_2 = readAsciiStringOrClassId(reader);
|
|
3224
|
-
var value = readAsciiStringOrClassId(reader);
|
|
3225
|
-
return "".concat(type_2, ".").concat(value);
|
|
3226
|
-
}
|
|
3227
|
-
case 'long': // Integer
|
|
3228
|
-
return (0, psdReader_1.readInt32)(reader);
|
|
3229
|
-
case 'comp': { // Large Integer
|
|
3230
|
-
var low = (0, psdReader_1.readUint32)(reader);
|
|
3231
|
-
var high = (0, psdReader_1.readUint32)(reader);
|
|
3232
|
-
return { low: low, high: high };
|
|
3233
|
-
}
|
|
3234
|
-
case 'bool': // Boolean
|
|
3235
|
-
return !!(0, psdReader_1.readUint8)(reader);
|
|
3236
|
-
case 'type': // Class
|
|
3237
|
-
case 'GlbC': // Class
|
|
3238
|
-
return readClassStructure(reader);
|
|
3239
|
-
case 'alis': { // Alias
|
|
3240
|
-
var length_2 = (0, psdReader_1.readInt32)(reader);
|
|
3241
|
-
return (0, psdReader_1.readAsciiString)(reader, length_2);
|
|
3242
|
-
}
|
|
3243
|
-
case 'tdta': { // Raw Data
|
|
3244
|
-
var length_3 = (0, psdReader_1.readInt32)(reader);
|
|
3245
|
-
return (0, psdReader_1.readBytes)(reader, length_3);
|
|
3246
|
-
}
|
|
3247
|
-
case 'ObAr': { // Object array
|
|
3248
|
-
(0, psdReader_1.readInt32)(reader); // version: 16
|
|
3249
|
-
(0, psdReader_1.readUnicodeString)(reader); // name: ''
|
|
3250
|
-
readAsciiStringOrClassId(reader); // 'rationalPoint'
|
|
3251
|
-
var length_4 = (0, psdReader_1.readInt32)(reader);
|
|
3252
|
-
var items = [];
|
|
3253
|
-
for (var i = 0; i < length_4; i++) {
|
|
3254
|
-
var type1 = readAsciiStringOrClassId(reader); // type Hrzn | Vrtc
|
|
3255
|
-
(0, psdReader_1.readSignature)(reader); // UnFl
|
|
3256
|
-
(0, psdReader_1.readSignature)(reader); // units ? '#Pxl'
|
|
3257
|
-
var valuesCount = (0, psdReader_1.readInt32)(reader);
|
|
3258
|
-
var values = [];
|
|
3259
|
-
for (var j = 0; j < valuesCount; j++) {
|
|
3260
|
-
values.push((0, psdReader_1.readFloat64)(reader));
|
|
3261
|
-
}
|
|
3262
|
-
items.push({ type: type1, values: values });
|
|
3263
|
-
}
|
|
3264
|
-
return items;
|
|
3265
|
-
}
|
|
3266
|
-
case 'Pth ': { // File path
|
|
3267
|
-
/*const length =*/ (0, psdReader_1.readInt32)(reader);
|
|
3268
|
-
var sig = (0, psdReader_1.readSignature)(reader);
|
|
3269
|
-
/*const pathSize =*/ (0, psdReader_1.readInt32LE)(reader);
|
|
3270
|
-
var charsCount = (0, psdReader_1.readInt32LE)(reader);
|
|
3271
|
-
var path = (0, psdReader_1.readUnicodeStringWithLength)(reader, charsCount);
|
|
3272
|
-
return { sig: sig, path: path };
|
|
3273
|
-
}
|
|
3274
|
-
default:
|
|
3275
|
-
throw new Error("Invalid TySh descriptor OSType: ".concat(type, " at ").concat(reader.offset.toString(16)));
|
|
3642
|
+
return {
|
|
3643
|
+
GrdF: 'GrdF.ClNs',
|
|
3644
|
+
'Nm ': grad.name || '',
|
|
3645
|
+
ShTr: !!grad.addTransparency,
|
|
3646
|
+
VctC: !!grad.restrictColors,
|
|
3647
|
+
ClrS: exports.ClrS.encode(grad.colorModel),
|
|
3648
|
+
RndS: grad.randomSeed || 0,
|
|
3649
|
+
Smth: Math.round(((_b = grad.roughness) !== null && _b !== void 0 ? _b : 1) * 4096),
|
|
3650
|
+
'Mnm ': (grad.min || [0, 0, 0, 0]).map(function (x) { return x * 100; }),
|
|
3651
|
+
'Mxm ': (grad.max || [1, 1, 1, 1]).map(function (x) { return x * 100; }),
|
|
3652
|
+
};
|
|
3276
3653
|
}
|
|
3277
3654
|
}
|
|
3278
|
-
|
|
3279
|
-
|
|
3280
|
-
|
|
3281
|
-
|
|
3282
|
-
|
|
3283
|
-
|
|
3284
|
-
|
|
3285
|
-
|
|
3286
|
-
|
|
3287
|
-
|
|
3288
|
-
|
|
3289
|
-
|
|
3290
|
-
|
|
3291
|
-
|
|
3292
|
-
|
|
3293
|
-
|
|
3294
|
-
|
|
3295
|
-
|
|
3296
|
-
for (var i = 0; i < value.length; i++) {
|
|
3297
|
-
var type_3 = fieldToArrayType[key];
|
|
3298
|
-
(0, psdWriter_1.writeSignature)(writer, type_3 || 'long');
|
|
3299
|
-
writeOSType(writer, type_3 || 'long', value[i], '', fieldToArrayExtType[key], root);
|
|
3300
|
-
if (logErrors && !type_3)
|
|
3301
|
-
console.log("Missing descriptor array type for: '".concat(key, "' in"), value);
|
|
3302
|
-
}
|
|
3303
|
-
break;
|
|
3304
|
-
case 'doub': // Double
|
|
3305
|
-
(0, psdWriter_1.writeFloat64)(writer, value);
|
|
3306
|
-
break;
|
|
3307
|
-
case 'UntF': // Unit double
|
|
3308
|
-
if (!unitsMapRev[value.units])
|
|
3309
|
-
throw new Error("Invalid units: ".concat(value.units, " in ").concat(key));
|
|
3310
|
-
(0, psdWriter_1.writeSignature)(writer, unitsMapRev[value.units]);
|
|
3311
|
-
(0, psdWriter_1.writeFloat64)(writer, value.value);
|
|
3312
|
-
break;
|
|
3313
|
-
case 'UnFl': // Unit float
|
|
3314
|
-
if (!unitsMapRev[value.units])
|
|
3315
|
-
throw new Error("Invalid units: ".concat(value.units, " in ").concat(key));
|
|
3316
|
-
(0, psdWriter_1.writeSignature)(writer, unitsMapRev[value.units]);
|
|
3317
|
-
(0, psdWriter_1.writeFloat32)(writer, value.value);
|
|
3318
|
-
break;
|
|
3319
|
-
case 'TEXT': // String
|
|
3320
|
-
(0, psdWriter_1.writeUnicodeStringWithPadding)(writer, value);
|
|
3321
|
-
break;
|
|
3322
|
-
case 'enum': { // Enumerated
|
|
3323
|
-
var _a = value.split('.'), _type = _a[0], val = _a[1];
|
|
3324
|
-
writeAsciiStringOrClassId(writer, _type);
|
|
3325
|
-
writeAsciiStringOrClassId(writer, val);
|
|
3326
|
-
break;
|
|
3327
|
-
}
|
|
3328
|
-
case 'long': // Integer
|
|
3329
|
-
(0, psdWriter_1.writeInt32)(writer, value);
|
|
3330
|
-
break;
|
|
3331
|
-
// case 'comp': // Large Integer
|
|
3332
|
-
// writeLargeInteger(reader);
|
|
3333
|
-
case 'bool': // Boolean
|
|
3334
|
-
(0, psdWriter_1.writeUint8)(writer, value ? 1 : 0);
|
|
3335
|
-
break;
|
|
3336
|
-
// case 'type': // Class
|
|
3337
|
-
// case 'GlbC': // Class
|
|
3338
|
-
// writeClassStructure(reader);
|
|
3339
|
-
// case 'alis': // Alias
|
|
3340
|
-
// writeAliasStructure(reader);
|
|
3341
|
-
case 'tdta': // Raw Data
|
|
3342
|
-
(0, psdWriter_1.writeInt32)(writer, value.byteLength);
|
|
3343
|
-
(0, psdWriter_1.writeBytes)(writer, value);
|
|
3344
|
-
break;
|
|
3345
|
-
case 'ObAr': { // Object array
|
|
3346
|
-
(0, psdWriter_1.writeInt32)(writer, 16); // version
|
|
3347
|
-
(0, psdWriter_1.writeUnicodeStringWithPadding)(writer, ''); // name
|
|
3348
|
-
var type_4 = ObArTypes[key];
|
|
3349
|
-
if (!type_4)
|
|
3350
|
-
throw new Error("Not implemented ObArType for: ".concat(key));
|
|
3351
|
-
writeAsciiStringOrClassId(writer, type_4);
|
|
3352
|
-
(0, psdWriter_1.writeInt32)(writer, value.length);
|
|
3353
|
-
for (var i = 0; i < value.length; i++) {
|
|
3354
|
-
writeAsciiStringOrClassId(writer, value[i].type); // Hrzn | Vrtc
|
|
3355
|
-
(0, psdWriter_1.writeSignature)(writer, 'UnFl');
|
|
3356
|
-
(0, psdWriter_1.writeSignature)(writer, '#Pxl');
|
|
3357
|
-
(0, psdWriter_1.writeInt32)(writer, value[i].values.length);
|
|
3358
|
-
for (var j = 0; j < value[i].values.length; j++) {
|
|
3359
|
-
(0, psdWriter_1.writeFloat64)(writer, value[i].values[j]);
|
|
3360
|
-
}
|
|
3361
|
-
}
|
|
3362
|
-
break;
|
|
3363
|
-
}
|
|
3364
|
-
// case 'Pth ': // File path
|
|
3365
|
-
// writeFilePath(reader);
|
|
3366
|
-
default:
|
|
3367
|
-
throw new Error("Not implemented descriptor OSType: ".concat(type));
|
|
3655
|
+
function parseGradientContent(descriptor) {
|
|
3656
|
+
var result = parseGradient(descriptor.Grad);
|
|
3657
|
+
result.style = exports.GrdT.decode(descriptor.Type);
|
|
3658
|
+
if (descriptor.Dthr !== undefined)
|
|
3659
|
+
result.dither = descriptor.Dthr;
|
|
3660
|
+
if (descriptor.Rvrs !== undefined)
|
|
3661
|
+
result.reverse = descriptor.Rvrs;
|
|
3662
|
+
if (descriptor.Angl !== undefined)
|
|
3663
|
+
result.angle = parseAngle(descriptor.Angl);
|
|
3664
|
+
if (descriptor['Scl '] !== undefined)
|
|
3665
|
+
result.scale = parsePercent(descriptor['Scl ']);
|
|
3666
|
+
if (descriptor.Algn !== undefined)
|
|
3667
|
+
result.align = descriptor.Algn;
|
|
3668
|
+
if (descriptor.Ofst !== undefined) {
|
|
3669
|
+
result.offset = {
|
|
3670
|
+
x: parsePercent(descriptor.Ofst.Hrzn),
|
|
3671
|
+
y: parsePercent(descriptor.Ofst.Vrtc)
|
|
3672
|
+
};
|
|
3368
3673
|
}
|
|
3674
|
+
return result;
|
|
3369
3675
|
}
|
|
3370
|
-
function
|
|
3371
|
-
var
|
|
3372
|
-
|
|
3373
|
-
|
|
3374
|
-
|
|
3375
|
-
|
|
3376
|
-
|
|
3377
|
-
|
|
3378
|
-
|
|
3379
|
-
|
|
3380
|
-
|
|
3381
|
-
|
|
3382
|
-
|
|
3383
|
-
|
|
3384
|
-
|
|
3385
|
-
|
|
3386
|
-
|
|
3387
|
-
|
|
3388
|
-
|
|
3389
|
-
|
|
3390
|
-
|
|
3391
|
-
|
|
3392
|
-
|
|
3393
|
-
// const { name, classID } =
|
|
3394
|
-
readClassStructure(reader);
|
|
3395
|
-
items.push((0, psdReader_1.readUint32)(reader));
|
|
3396
|
-
break;
|
|
3397
|
-
}
|
|
3398
|
-
case 'Idnt': // Identifier
|
|
3399
|
-
items.push((0, psdReader_1.readInt32)(reader));
|
|
3400
|
-
break;
|
|
3401
|
-
case 'indx': // Index
|
|
3402
|
-
items.push((0, psdReader_1.readInt32)(reader));
|
|
3403
|
-
break;
|
|
3404
|
-
case 'name': { // Name
|
|
3405
|
-
readClassStructure(reader);
|
|
3406
|
-
items.push((0, psdReader_1.readUnicodeString)(reader));
|
|
3407
|
-
break;
|
|
3408
|
-
}
|
|
3409
|
-
default:
|
|
3410
|
-
throw new Error("Invalid descriptor reference type: ".concat(type));
|
|
3411
|
-
}
|
|
3676
|
+
function parsePatternContent(descriptor) {
|
|
3677
|
+
var result = {
|
|
3678
|
+
name: descriptor.Ptrn['Nm '],
|
|
3679
|
+
id: descriptor.Ptrn.Idnt,
|
|
3680
|
+
};
|
|
3681
|
+
if (descriptor.Lnkd !== undefined)
|
|
3682
|
+
result.linked = descriptor.Lnkd;
|
|
3683
|
+
if (descriptor.phase !== undefined)
|
|
3684
|
+
result.phase = { x: descriptor.phase.Hrzn, y: descriptor.phase.Vrtc };
|
|
3685
|
+
return result;
|
|
3686
|
+
}
|
|
3687
|
+
function parseVectorContent(descriptor) {
|
|
3688
|
+
if ('Grad' in descriptor) {
|
|
3689
|
+
return parseGradientContent(descriptor);
|
|
3690
|
+
}
|
|
3691
|
+
else if ('Ptrn' in descriptor) {
|
|
3692
|
+
return __assign({ type: 'pattern' }, parsePatternContent(descriptor));
|
|
3693
|
+
}
|
|
3694
|
+
else if ('Clr ' in descriptor) {
|
|
3695
|
+
return { type: 'color', color: parseColor(descriptor['Clr ']) };
|
|
3696
|
+
}
|
|
3697
|
+
else {
|
|
3698
|
+
throw new Error('Invalid vector content');
|
|
3412
3699
|
}
|
|
3413
|
-
return items;
|
|
3414
3700
|
}
|
|
3415
|
-
|
|
3416
|
-
|
|
3417
|
-
|
|
3418
|
-
|
|
3419
|
-
|
|
3420
|
-
|
|
3421
|
-
|
|
3422
|
-
|
|
3423
|
-
|
|
3424
|
-
|
|
3425
|
-
|
|
3426
|
-
|
|
3427
|
-
|
|
3428
|
-
(
|
|
3429
|
-
|
|
3430
|
-
|
|
3431
|
-
|
|
3432
|
-
|
|
3433
|
-
|
|
3434
|
-
writeClassStructure(writer, '\0', typeID);
|
|
3435
|
-
writeAsciiStringOrClassId(writer, typeID);
|
|
3436
|
-
writeAsciiStringOrClassId(writer, enumValue);
|
|
3437
|
-
break;
|
|
3438
|
-
}
|
|
3439
|
-
// case 'rele': // Offset
|
|
3440
|
-
// case 'Idnt': // Identifier
|
|
3441
|
-
// case 'indx': // Index
|
|
3442
|
-
case 'name': { // Name
|
|
3443
|
-
writeClassStructure(writer, '\0', 'Lyr ');
|
|
3444
|
-
(0, psdWriter_1.writeUnicodeString)(writer, value + '\0');
|
|
3445
|
-
break;
|
|
3446
|
-
}
|
|
3447
|
-
default:
|
|
3448
|
-
throw new Error("Invalid descriptor reference type: ".concat(type));
|
|
3449
|
-
}
|
|
3701
|
+
exports.parseVectorContent = parseVectorContent;
|
|
3702
|
+
function serializeGradientContent(content) {
|
|
3703
|
+
var result = {};
|
|
3704
|
+
if (content.dither !== undefined)
|
|
3705
|
+
result.Dthr = content.dither;
|
|
3706
|
+
if (content.reverse !== undefined)
|
|
3707
|
+
result.Rvrs = content.reverse;
|
|
3708
|
+
if (content.angle !== undefined)
|
|
3709
|
+
result.Angl = unitsAngle(content.angle);
|
|
3710
|
+
result.Type = exports.GrdT.encode(content.style);
|
|
3711
|
+
if (content.align !== undefined)
|
|
3712
|
+
result.Algn = content.align;
|
|
3713
|
+
if (content.scale !== undefined)
|
|
3714
|
+
result['Scl '] = unitsPercent(content.scale);
|
|
3715
|
+
if (content.offset) {
|
|
3716
|
+
result.Ofst = {
|
|
3717
|
+
Hrzn: unitsPercent(content.offset.x),
|
|
3718
|
+
Vrtc: unitsPercent(content.offset.y),
|
|
3719
|
+
};
|
|
3450
3720
|
}
|
|
3451
|
-
|
|
3721
|
+
result.Grad = serializeGradient(content);
|
|
3722
|
+
return result;
|
|
3452
3723
|
}
|
|
3453
|
-
function
|
|
3454
|
-
var
|
|
3455
|
-
|
|
3456
|
-
|
|
3457
|
-
|
|
3724
|
+
function serializePatternContent(content) {
|
|
3725
|
+
var result = {
|
|
3726
|
+
Ptrn: {
|
|
3727
|
+
'Nm ': content.name || '',
|
|
3728
|
+
Idnt: content.id || '',
|
|
3729
|
+
}
|
|
3730
|
+
};
|
|
3731
|
+
if (content.linked !== undefined)
|
|
3732
|
+
result.Lnkd = !!content.linked;
|
|
3733
|
+
if (content.phase !== undefined)
|
|
3734
|
+
result.phase = { Hrzn: content.phase.x, Vrtc: content.phase.y };
|
|
3735
|
+
return result;
|
|
3458
3736
|
}
|
|
3459
|
-
function
|
|
3460
|
-
(
|
|
3461
|
-
|
|
3737
|
+
function serializeVectorContent(content) {
|
|
3738
|
+
if (content.type === 'color') {
|
|
3739
|
+
return { key: 'SoCo', descriptor: { 'Clr ': serializeColor(content.color) } };
|
|
3740
|
+
}
|
|
3741
|
+
else if (content.type === 'pattern') {
|
|
3742
|
+
return { key: 'PtFl', descriptor: serializePatternContent(content) };
|
|
3743
|
+
}
|
|
3744
|
+
else {
|
|
3745
|
+
return { key: 'GdFl', descriptor: serializeGradientContent(content) };
|
|
3746
|
+
}
|
|
3462
3747
|
}
|
|
3463
|
-
|
|
3464
|
-
|
|
3465
|
-
if (
|
|
3466
|
-
|
|
3467
|
-
|
|
3468
|
-
|
|
3469
|
-
|
|
3748
|
+
exports.serializeVectorContent = serializeVectorContent;
|
|
3749
|
+
function parseColor(color) {
|
|
3750
|
+
if ('H ' in color) {
|
|
3751
|
+
return { h: parsePercentOrAngle(color['H ']), s: color.Strt, b: color.Brgh };
|
|
3752
|
+
}
|
|
3753
|
+
else if ('Rd ' in color) {
|
|
3754
|
+
return { r: color['Rd '], g: color['Grn '], b: color['Bl '] };
|
|
3755
|
+
}
|
|
3756
|
+
else if ('Cyn ' in color) {
|
|
3757
|
+
return { c: color['Cyn '], m: color.Mgnt, y: color['Ylw '], k: color.Blck };
|
|
3758
|
+
}
|
|
3759
|
+
else if ('Gry ' in color) {
|
|
3760
|
+
return { k: color['Gry '] };
|
|
3761
|
+
}
|
|
3762
|
+
else if ('Lmnc' in color) {
|
|
3763
|
+
return { l: color.Lmnc, a: color['A '], b: color['B '] };
|
|
3764
|
+
}
|
|
3765
|
+
else {
|
|
3766
|
+
throw new Error('Unsupported color descriptor');
|
|
3767
|
+
}
|
|
3470
3768
|
}
|
|
3471
|
-
exports.
|
|
3472
|
-
function
|
|
3473
|
-
if (
|
|
3474
|
-
|
|
3475
|
-
|
|
3769
|
+
exports.parseColor = parseColor;
|
|
3770
|
+
function serializeColor(color) {
|
|
3771
|
+
if (!color) {
|
|
3772
|
+
return { 'Rd ': 0, 'Grn ': 0, 'Bl ': 0 };
|
|
3773
|
+
}
|
|
3774
|
+
else if ('r' in color) {
|
|
3775
|
+
return { 'Rd ': color.r || 0, 'Grn ': color.g || 0, 'Bl ': color.b || 0 };
|
|
3776
|
+
}
|
|
3777
|
+
else if ('h' in color) {
|
|
3778
|
+
return { 'H ': unitsAngle(color.h * 360), Strt: color.s || 0, Brgh: color.b || 0 };
|
|
3779
|
+
}
|
|
3780
|
+
else if ('c' in color) {
|
|
3781
|
+
return { 'Cyn ': color.c || 0, Mgnt: color.m || 0, 'Ylw ': color.y || 0, Blck: color.k || 0 };
|
|
3782
|
+
}
|
|
3783
|
+
else if ('l' in color) {
|
|
3784
|
+
return { Lmnc: color.l || 0, 'A ': color.a || 0, 'B ': color.b || 0 };
|
|
3785
|
+
}
|
|
3786
|
+
else if ('k' in color) {
|
|
3787
|
+
return { 'Gry ': color.k };
|
|
3788
|
+
}
|
|
3789
|
+
else {
|
|
3790
|
+
throw new Error('Invalid color value');
|
|
3791
|
+
}
|
|
3476
3792
|
}
|
|
3477
|
-
exports.
|
|
3793
|
+
exports.serializeColor = serializeColor;
|
|
3478
3794
|
function parseAngle(x) {
|
|
3479
3795
|
if (x === undefined)
|
|
3480
3796
|
return 0;
|
|
@@ -3647,6 +3963,17 @@ exports.GrdT = (0, helpers_1.createEnum)('GrdT', 'linear', {
|
|
|
3647
3963
|
reflected: 'Rflc',
|
|
3648
3964
|
diamond: 'Dmnd',
|
|
3649
3965
|
});
|
|
3966
|
+
exports.animInterpStyleEnum = (0, helpers_1.createEnum)('animInterpStyle', 'linear', {
|
|
3967
|
+
linear: 'Lnr ',
|
|
3968
|
+
hold: 'hold',
|
|
3969
|
+
});
|
|
3970
|
+
exports.stdTrackID = (0, helpers_1.createEnum)('stdTrackID', 'opacity', {
|
|
3971
|
+
opacity: 'opacityTrack',
|
|
3972
|
+
style: 'styleTrack',
|
|
3973
|
+
sheetTransform: 'sheetTransformTrack',
|
|
3974
|
+
sheetPosition: 'sheetPositionTrack',
|
|
3975
|
+
globalLighting: 'globalLightingTrack',
|
|
3976
|
+
});
|
|
3650
3977
|
exports.gradientInterpolationMethodType = (0, helpers_1.createEnum)('gradientInterpolationMethodType', 'perceptual', {
|
|
3651
3978
|
perceptual: 'Perc',
|
|
3652
3979
|
linear: 'Lnr',
|
|
@@ -5003,6 +5330,163 @@ addHandler(1032, function (target) { return target.gridAndGuidesInformation !==
|
|
|
5003
5330
|
(0, psdWriter_1.writeUint8)(writer, g.direction === 'horizontal' ? 1 : 0);
|
|
5004
5331
|
}
|
|
5005
5332
|
});
|
|
5333
|
+
// 0 - normal, 7 - multiply, 8 - screen, 23 - difference
|
|
5334
|
+
var onionSkinsBlendModes = [
|
|
5335
|
+
'normal', undefined, undefined, undefined, undefined, undefined, undefined, 'multiply',
|
|
5336
|
+
'screen', undefined, undefined, undefined, undefined, undefined, undefined, undefined,
|
|
5337
|
+
undefined, undefined, undefined, undefined, undefined, undefined, undefined, 'difference',
|
|
5338
|
+
];
|
|
5339
|
+
addHandler(1078, // Onion Skins
|
|
5340
|
+
function (// Onion Skins
|
|
5341
|
+
target) { return target.onionSkins !== undefined; }, function (reader, target) {
|
|
5342
|
+
var desc = (0, descriptor_1.readVersionAndDescriptor)(reader);
|
|
5343
|
+
// console.log('1078', require('util').inspect(desc, false, 99, true));
|
|
5344
|
+
target.onionSkins = {
|
|
5345
|
+
enabled: desc.enab,
|
|
5346
|
+
framesBefore: desc.numBefore,
|
|
5347
|
+
framesAfter: desc.numAfter,
|
|
5348
|
+
frameSpacing: desc.Spcn,
|
|
5349
|
+
minOpacity: desc.minOpacity / 100,
|
|
5350
|
+
maxOpacity: desc.maxOpacity / 100,
|
|
5351
|
+
blendMode: onionSkinsBlendModes[desc.BlnM] || 'normal',
|
|
5352
|
+
};
|
|
5353
|
+
}, function (writer, target) {
|
|
5354
|
+
var onionSkins = target.onionSkins;
|
|
5355
|
+
var desc = {
|
|
5356
|
+
Vrsn: 1,
|
|
5357
|
+
enab: onionSkins.enabled,
|
|
5358
|
+
numBefore: onionSkins.framesBefore,
|
|
5359
|
+
numAfter: onionSkins.framesAfter,
|
|
5360
|
+
Spcn: onionSkins.frameSpacing,
|
|
5361
|
+
minOpacity: (onionSkins.minOpacity * 100) | 0,
|
|
5362
|
+
maxOpacity: (onionSkins.maxOpacity * 100) | 0,
|
|
5363
|
+
BlnM: Math.max(0, onionSkinsBlendModes.indexOf(onionSkins.blendMode)),
|
|
5364
|
+
};
|
|
5365
|
+
(0, descriptor_1.writeVersionAndDescriptor)(writer, '', 'null', desc);
|
|
5366
|
+
});
|
|
5367
|
+
addHandler(1075, // Timeline Information
|
|
5368
|
+
function (// Timeline Information
|
|
5369
|
+
target) { return target.timelineInformation !== undefined; }, function (reader, target, _, options) {
|
|
5370
|
+
var _a, _b;
|
|
5371
|
+
var desc = (0, descriptor_1.readVersionAndDescriptor)(reader);
|
|
5372
|
+
// console.log('1075', require('util').inspect(desc, false, 99, true));
|
|
5373
|
+
target.timelineInformation = {
|
|
5374
|
+
enabled: desc.enab,
|
|
5375
|
+
frameStep: desc.frameStep,
|
|
5376
|
+
frameRate: desc.frameRate,
|
|
5377
|
+
time: desc.time,
|
|
5378
|
+
duration: desc.duration,
|
|
5379
|
+
workInTime: desc.workInTime,
|
|
5380
|
+
workOutTime: desc.workOutTime,
|
|
5381
|
+
repeats: desc.LCnt,
|
|
5382
|
+
hasMotion: desc.hasMotion,
|
|
5383
|
+
globalTracks: (0, descriptor_1.parseTrackList)(desc.globalTrackList, !!options.logMissingFeatures),
|
|
5384
|
+
};
|
|
5385
|
+
if ((_b = (_a = desc.audioClipGroupList) === null || _a === void 0 ? void 0 : _a.audioClipGroupList) === null || _b === void 0 ? void 0 : _b.length) {
|
|
5386
|
+
target.timelineInformation.audioClipGroups = desc.audioClipGroupList.audioClipGroupList.map(function (g) { return ({
|
|
5387
|
+
id: g.groupID,
|
|
5388
|
+
muted: g.muted,
|
|
5389
|
+
audioClips: g.audioClipList.map(function (_a) {
|
|
5390
|
+
var clipID = _a.clipID, timeScope = _a.timeScope, muted = _a.muted, audioLevel = _a.audioLevel, frameReader = _a.frameReader;
|
|
5391
|
+
return ({
|
|
5392
|
+
id: clipID,
|
|
5393
|
+
start: timeScope.Strt,
|
|
5394
|
+
duration: timeScope.duration,
|
|
5395
|
+
inTime: timeScope.inTime,
|
|
5396
|
+
outTime: timeScope.outTime,
|
|
5397
|
+
muted: muted,
|
|
5398
|
+
audioLevel: audioLevel,
|
|
5399
|
+
frameReader: {
|
|
5400
|
+
type: frameReader.frameReaderType,
|
|
5401
|
+
mediaDescriptor: frameReader.mediaDescriptor,
|
|
5402
|
+
link: {
|
|
5403
|
+
name: frameReader['Lnk ']['Nm '],
|
|
5404
|
+
fullPath: frameReader['Lnk '].fullPath,
|
|
5405
|
+
relativePath: frameReader['Lnk '].relPath,
|
|
5406
|
+
},
|
|
5407
|
+
},
|
|
5408
|
+
});
|
|
5409
|
+
}),
|
|
5410
|
+
}); });
|
|
5411
|
+
}
|
|
5412
|
+
}, function (writer, target) {
|
|
5413
|
+
var _a;
|
|
5414
|
+
var timeline = target.timelineInformation;
|
|
5415
|
+
var desc = {
|
|
5416
|
+
Vrsn: 1,
|
|
5417
|
+
enab: timeline.enabled,
|
|
5418
|
+
frameStep: timeline.frameStep,
|
|
5419
|
+
frameRate: timeline.frameRate,
|
|
5420
|
+
time: timeline.time,
|
|
5421
|
+
duration: timeline.duration,
|
|
5422
|
+
workInTime: timeline.workInTime,
|
|
5423
|
+
workOutTime: timeline.workOutTime,
|
|
5424
|
+
LCnt: timeline.repeats,
|
|
5425
|
+
globalTrackList: (0, descriptor_1.serializeTrackList)(timeline.globalTracks),
|
|
5426
|
+
audioClipGroupList: {
|
|
5427
|
+
audioClipGroupList: (_a = timeline.audioClipGroups) === null || _a === void 0 ? void 0 : _a.map(function (a) { return ({
|
|
5428
|
+
groupID: a.id,
|
|
5429
|
+
muted: a.muted,
|
|
5430
|
+
audioClipList: a.audioClips.map(function (c) { return ({
|
|
5431
|
+
clipID: c.id,
|
|
5432
|
+
timeScope: {
|
|
5433
|
+
Vrsn: 1,
|
|
5434
|
+
Strt: c.start,
|
|
5435
|
+
duration: c.duration,
|
|
5436
|
+
inTime: c.inTime,
|
|
5437
|
+
outTime: c.outTime,
|
|
5438
|
+
},
|
|
5439
|
+
frameReader: {
|
|
5440
|
+
frameReaderType: c.frameReader.type,
|
|
5441
|
+
descVersion: 1,
|
|
5442
|
+
'Lnk ': {
|
|
5443
|
+
descVersion: 1,
|
|
5444
|
+
'Nm ': c.frameReader.link.name,
|
|
5445
|
+
fullPath: c.frameReader.link.fullPath,
|
|
5446
|
+
relPath: c.frameReader.link.relativePath,
|
|
5447
|
+
},
|
|
5448
|
+
mediaDescriptor: c.frameReader.mediaDescriptor,
|
|
5449
|
+
},
|
|
5450
|
+
muted: c.muted,
|
|
5451
|
+
audioLevel: c.audioLevel,
|
|
5452
|
+
}); }),
|
|
5453
|
+
}); }),
|
|
5454
|
+
},
|
|
5455
|
+
hasMotion: timeline.hasMotion,
|
|
5456
|
+
};
|
|
5457
|
+
// console.log('WRITE:1075', require('util').inspect(desc, false, 99, true));
|
|
5458
|
+
(0, descriptor_1.writeVersionAndDescriptor)(writer, '', 'null', desc, 'anim');
|
|
5459
|
+
});
|
|
5460
|
+
addHandler(1076, // Sheet Disclosure
|
|
5461
|
+
function (// Sheet Disclosure
|
|
5462
|
+
target) { return target.sheetDisclosure !== undefined; }, function (reader, target) {
|
|
5463
|
+
var desc = (0, descriptor_1.readVersionAndDescriptor)(reader);
|
|
5464
|
+
// console.log('1076', require('util').inspect(desc, false, 99, true));
|
|
5465
|
+
target.sheetDisclosure = {};
|
|
5466
|
+
if (desc.sheetTimelineOptions) {
|
|
5467
|
+
target.sheetDisclosure.sheetTimelineOptions = desc.sheetTimelineOptions.map(function (o) { return ({
|
|
5468
|
+
sheetID: o.sheetID,
|
|
5469
|
+
sheetDisclosed: o.sheetDisclosed,
|
|
5470
|
+
lightsDisclosed: o.lightsDisclosed,
|
|
5471
|
+
meshesDisclosed: o.meshesDisclosed,
|
|
5472
|
+
materialsDisclosed: o.materialsDisclosed,
|
|
5473
|
+
}); });
|
|
5474
|
+
}
|
|
5475
|
+
}, function (writer, target) {
|
|
5476
|
+
var disclosure = target.sheetDisclosure;
|
|
5477
|
+
var desc = { Vrsn: 1 };
|
|
5478
|
+
if (disclosure.sheetTimelineOptions) {
|
|
5479
|
+
desc.sheetTimelineOptions = disclosure.sheetTimelineOptions.map(function (d) { return ({
|
|
5480
|
+
Vrsn: 2,
|
|
5481
|
+
sheetID: d.sheetID,
|
|
5482
|
+
sheetDisclosed: d.sheetDisclosed,
|
|
5483
|
+
lightsDisclosed: d.lightsDisclosed,
|
|
5484
|
+
meshesDisclosed: d.meshesDisclosed,
|
|
5485
|
+
materialsDisclosed: d.materialsDisclosed,
|
|
5486
|
+
}); });
|
|
5487
|
+
}
|
|
5488
|
+
(0, descriptor_1.writeVersionAndDescriptor)(writer, '', 'null', desc);
|
|
5489
|
+
});
|
|
5006
5490
|
addHandler(1054, function (target) { return target.urlsList !== undefined; }, function (reader, target, _, options) {
|
|
5007
5491
|
var count = (0, psdReader_1.readUint32)(reader);
|
|
5008
5492
|
if (count) {
|
|
@@ -5163,16 +5647,10 @@ var FrmD = (0, helpers_1.createEnum)('FrmD', '', {
|
|
|
5163
5647
|
none: 'None',
|
|
5164
5648
|
dispose: 'Disp',
|
|
5165
5649
|
});
|
|
5166
|
-
//
|
|
5167
|
-
helpers_1.MOCK_HANDLERS && addHandler(4000, // Plug-In resource(s)
|
|
5650
|
+
addHandler(4000, // Plug-In resource(s)
|
|
5168
5651
|
function (// Plug-In resource(s)
|
|
5169
|
-
target) { return target.
|
|
5652
|
+
target) { return target.animations !== undefined; }, function (reader, target, left, _a) {
|
|
5170
5653
|
var logMissingFeatures = _a.logMissingFeatures, logDevFeatures = _a.logDevFeatures;
|
|
5171
|
-
if (helpers_1.MOCK_HANDLERS) {
|
|
5172
|
-
LOG_MOCK_HANDLERS && console.log('image resource 4000', left());
|
|
5173
|
-
target._ir4000 = (0, psdReader_1.readBytes)(reader, left());
|
|
5174
|
-
return;
|
|
5175
|
-
}
|
|
5176
5654
|
var key = (0, psdReader_1.readSignature)(reader);
|
|
5177
5655
|
if (key === 'mani') {
|
|
5178
5656
|
(0, psdReader_1.checkSignature)(reader, 'IRFR');
|
|
@@ -5183,14 +5661,11 @@ target) { return target._ir4000 !== undefined; }, function (reader, target, left
|
|
|
5183
5661
|
(0, psdReader_1.readSection)(reader, 1, function (left) {
|
|
5184
5662
|
if (key_1 === 'AnDs') {
|
|
5185
5663
|
var desc = (0, descriptor_1.readVersionAndDescriptor)(reader);
|
|
5186
|
-
|
|
5187
|
-
logDevFeatures && console.log('#4000 AnDs', desc);
|
|
5188
|
-
// logDevFeatures && console.log('#4000 AnDs', require('util').inspect(desc, false, 99, true));
|
|
5189
|
-
var result = {
|
|
5664
|
+
target.animations = {
|
|
5190
5665
|
// desc.AFSt ???
|
|
5191
5666
|
frames: desc.FrIn.map(function (x) { return ({
|
|
5192
5667
|
id: x.FrID,
|
|
5193
|
-
delay: x.FrDl / 100,
|
|
5668
|
+
delay: (x.FrDl || 0) / 100,
|
|
5194
5669
|
dispose: x.FrDs ? FrmD.decode(x.FrDs) : 'auto', // missing == auto
|
|
5195
5670
|
// x.FrGA ???
|
|
5196
5671
|
}); }),
|
|
@@ -5198,11 +5673,11 @@ target) { return target._ir4000 !== undefined; }, function (reader, target, left
|
|
|
5198
5673
|
id: x.FsID,
|
|
5199
5674
|
frames: x.FsFr,
|
|
5200
5675
|
repeats: x.LCnt,
|
|
5201
|
-
|
|
5676
|
+
activeFrame: x.AFrm || 0,
|
|
5202
5677
|
}); }),
|
|
5203
5678
|
};
|
|
5204
|
-
|
|
5205
|
-
//
|
|
5679
|
+
// console.log('#4000 AnDs', require('util').inspect(desc, false, 99, true));
|
|
5680
|
+
// console.log('#4000 AnDs:result', require('util').inspect(target.animations, false, 99, true));
|
|
5206
5681
|
}
|
|
5207
5682
|
else if (key_1 === 'Roll') {
|
|
5208
5683
|
var bytes = (0, psdReader_1.readBytes)(reader, left());
|
|
@@ -5224,10 +5699,50 @@ target) { return target._ir4000 !== undefined; }, function (reader, target, left
|
|
|
5224
5699
|
}
|
|
5225
5700
|
else {
|
|
5226
5701
|
logMissingFeatures && console.log('Unhandled key in #4000:', key);
|
|
5227
|
-
return;
|
|
5228
5702
|
}
|
|
5229
5703
|
}, function (writer, target) {
|
|
5230
|
-
|
|
5704
|
+
if (target.animations) {
|
|
5705
|
+
(0, psdWriter_1.writeSignature)(writer, 'mani');
|
|
5706
|
+
(0, psdWriter_1.writeSignature)(writer, 'IRFR');
|
|
5707
|
+
(0, psdWriter_1.writeSection)(writer, 1, function () {
|
|
5708
|
+
(0, psdWriter_1.writeSignature)(writer, '8BIM');
|
|
5709
|
+
(0, psdWriter_1.writeSignature)(writer, 'AnDs');
|
|
5710
|
+
(0, psdWriter_1.writeSection)(writer, 1, function () {
|
|
5711
|
+
var desc = {
|
|
5712
|
+
// AFSt: 0, // ???
|
|
5713
|
+
FrIn: [],
|
|
5714
|
+
FSts: [],
|
|
5715
|
+
};
|
|
5716
|
+
for (var i = 0; i < target.animations.frames.length; i++) {
|
|
5717
|
+
var f = target.animations.frames[i];
|
|
5718
|
+
var frame = {
|
|
5719
|
+
FrID: f.id,
|
|
5720
|
+
};
|
|
5721
|
+
if (f.delay)
|
|
5722
|
+
frame.FrDl = (f.delay * 100) | 0;
|
|
5723
|
+
frame.FrDs = FrmD.encode(f.dispose);
|
|
5724
|
+
// if (i === 0) frame.FrGA = 30; // ???
|
|
5725
|
+
desc.FrIn.push(frame);
|
|
5726
|
+
}
|
|
5727
|
+
for (var i = 0; i < target.animations.animations.length; i++) {
|
|
5728
|
+
var a = target.animations.animations[i];
|
|
5729
|
+
var anim = {
|
|
5730
|
+
FsID: a.id,
|
|
5731
|
+
AFrm: a.activeFrame | 0,
|
|
5732
|
+
FsFr: a.frames,
|
|
5733
|
+
LCnt: a.repeats | 0,
|
|
5734
|
+
};
|
|
5735
|
+
desc.FSts.push(anim);
|
|
5736
|
+
}
|
|
5737
|
+
(0, descriptor_1.writeVersionAndDescriptor)(writer, '', 'null', desc);
|
|
5738
|
+
});
|
|
5739
|
+
// writeSignature(writer, '8BIM');
|
|
5740
|
+
// writeSignature(writer, 'Roll');
|
|
5741
|
+
// writeSection(writer, 1, () => {
|
|
5742
|
+
// writeZeros(writer, 8);
|
|
5743
|
+
// });
|
|
5744
|
+
});
|
|
5745
|
+
}
|
|
5231
5746
|
});
|
|
5232
5747
|
// TODO: Unfinished
|
|
5233
5748
|
helpers_1.MOCK_HANDLERS && addHandler(4001, // Plug-In resource(s)
|
|
@@ -5791,6 +6306,7 @@ function readLayerChannelImageData(reader, psd, layer, channels, options) {
|
|
|
5791
6306
|
continue;
|
|
5792
6307
|
if (channel.length < 2)
|
|
5793
6308
|
throw new Error('Invalid channel length');
|
|
6309
|
+
var start = reader.offset;
|
|
5794
6310
|
var compression = readUint16(reader);
|
|
5795
6311
|
if (channel.id === -2 /* ChannelID.UserMask */) {
|
|
5796
6312
|
var mask = layer.mask;
|
|
@@ -5801,10 +6317,10 @@ function readLayerChannelImageData(reader, psd, layer, channels, options) {
|
|
|
5801
6317
|
if (maskWidth && maskHeight) {
|
|
5802
6318
|
var maskData = (0, helpers_1.createImageData)(maskWidth, maskHeight);
|
|
5803
6319
|
(0, helpers_1.resetImageData)(maskData);
|
|
5804
|
-
var
|
|
6320
|
+
var start_1 = reader.offset;
|
|
5805
6321
|
readData(reader, channel.length, maskData, compression, maskWidth, maskHeight, 0, options.large, 4);
|
|
5806
6322
|
if (helpers_1.RAW_IMAGE_DATA) {
|
|
5807
|
-
layer.maskDataRaw = new Uint8Array(reader.view.buffer, reader.view.byteOffset +
|
|
6323
|
+
layer.maskDataRaw = new Uint8Array(reader.view.buffer, reader.view.byteOffset + start_1, reader.offset - start_1);
|
|
5808
6324
|
}
|
|
5809
6325
|
setupGrayscale(maskData);
|
|
5810
6326
|
if (options.useImageData) {
|
|
@@ -5825,12 +6341,11 @@ function readLayerChannelImageData(reader, psd, layer, channels, options) {
|
|
|
5825
6341
|
throw new Error("Channel not supported: ".concat(channel.id));
|
|
5826
6342
|
}
|
|
5827
6343
|
}
|
|
5828
|
-
var start = reader.offset;
|
|
5829
6344
|
readData(reader, channel.length, targetData, compression, layerWidth, layerHeight, offset, options.large, cmyk ? 5 : 4);
|
|
5830
6345
|
if (helpers_1.RAW_IMAGE_DATA) {
|
|
5831
|
-
layer.imageDataRaw[channel.id] = new Uint8Array(reader.view.buffer, reader.view.byteOffset + start,
|
|
6346
|
+
layer.imageDataRaw[channel.id] = new Uint8Array(reader.view.buffer, reader.view.byteOffset + start + 2, channel.length - 2);
|
|
5832
6347
|
}
|
|
5833
|
-
reader.offset = start + channel.length
|
|
6348
|
+
reader.offset = start + channel.length;
|
|
5834
6349
|
if (targetData && psd.colorMode === 1 /* ColorMode.Grayscale */) {
|
|
5835
6350
|
setupGrayscale(targetData);
|
|
5836
6351
|
}
|
|
@@ -6463,7 +6978,7 @@ function writePsd(writer, psd, options) {
|
|
|
6463
6978
|
if ((psd.width > 30000 || psd.height > 30000) && !options.psb)
|
|
6464
6979
|
throw new Error('Document size is too large (max is 30000x30000, use PSB format instead)');
|
|
6465
6980
|
var imageResources = psd.imageResources || {};
|
|
6466
|
-
var opt = __assign(__assign({}, options), { layerIds:
|
|
6981
|
+
var opt = __assign(__assign({}, options), { layerIds: new Set(), layerToId: new Map() });
|
|
6467
6982
|
if (opt.generateThumbnail) {
|
|
6468
6983
|
imageResources = __assign(__assign({}, imageResources), { thumbnail: createThumbnail(psd) });
|
|
6469
6984
|
}
|