ag-psd 19.0.1 → 20.1.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 +10 -0
- package/README_PSD.md +20 -2
- package/TODO +7 -0
- package/dist/abr.js +4 -4
- package/dist/abr.js.map +1 -1
- package/dist/additionalInfo.d.ts +3 -3
- package/dist/additionalInfo.js +107 -12
- package/dist/additionalInfo.js.map +1 -1
- package/dist/bundle.js +15305 -7643
- package/dist/descriptor.js +21 -16
- package/dist/descriptor.js.map +1 -1
- package/dist/engineData2.d.ts +1 -0
- package/dist/engineData2.js +349 -0
- package/dist/engineData2.js.map +1 -0
- package/dist/helpers.d.ts +2 -7
- package/dist/helpers.js +45 -12
- package/dist/helpers.js.map +1 -1
- package/dist/imageResources.js +42 -1
- package/dist/imageResources.js.map +1 -1
- package/dist/psd.d.ts +46 -3
- package/dist/psd.js +8 -1
- package/dist/psd.js.map +1 -1
- package/dist/psdReader.d.ts +11 -5
- package/dist/psdReader.js +213 -100
- package/dist/psdReader.js.map +1 -1
- package/dist/psdWriter.js +24 -4
- package/dist/psdWriter.js.map +1 -1
- package/dist/utf8.js +10 -4
- package/dist/utf8.js.map +1 -1
- package/dist-es/abr.js +4 -4
- package/dist-es/abr.js.map +1 -1
- package/dist-es/additionalInfo.d.ts +3 -3
- package/dist-es/additionalInfo.js +110 -15
- package/dist-es/additionalInfo.js.map +1 -1
- package/dist-es/descriptor.js +21 -16
- package/dist-es/descriptor.js.map +1 -1
- package/dist-es/engineData2.d.ts +1 -0
- package/dist-es/engineData2.js +345 -0
- package/dist-es/engineData2.js.map +1 -0
- package/dist-es/helpers.d.ts +2 -7
- package/dist-es/helpers.js +43 -11
- package/dist-es/helpers.js.map +1 -1
- package/dist-es/imageResources.js +42 -1
- package/dist-es/imageResources.js.map +1 -1
- package/dist-es/psd.d.ts +46 -3
- package/dist-es/psd.js +7 -0
- package/dist-es/psd.js.map +1 -1
- package/dist-es/psdReader.d.ts +11 -5
- package/dist-es/psdReader.js +212 -102
- package/dist-es/psdReader.js.map +1 -1
- package/dist-es/psdWriter.js +25 -5
- package/dist-es/psdWriter.js.map +1 -1
- package/dist-es/utf8.js +10 -4
- package/dist-es/utf8.js.map +1 -1
- package/package.json +6 -7
- package/src/abr.ts +4 -4
- package/src/additionalInfo.ts +156 -51
- package/src/descriptor.ts +14 -9
- package/src/engineData2.ts +367 -0
- package/src/helpers.ts +47 -20
- package/src/imageResources.ts +59 -2
- package/src/psd.ts +41 -5
- package/src/psdReader.ts +210 -128
- package/src/psdWriter.ts +33 -14
- package/src/utf8.ts +12 -4
package/src/additionalInfo.ts
CHANGED
|
@@ -1,37 +1,10 @@
|
|
|
1
1
|
import { fromByteArray, toByteArray } from 'base64-js';
|
|
2
2
|
import { readEffects, writeEffects } from './effectsHelpers';
|
|
3
3
|
import { clamp, createEnum, layerColors, MOCK_HANDLERS } from './helpers';
|
|
4
|
-
import {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
SelectiveColorAdjustment, ColorLookupAdjustment, LevelsAdjustmentChannel, LevelsAdjustment,
|
|
9
|
-
CurvesAdjustment, CurvesAdjustmentChannel, HueSaturationAdjustment, HueSaturationAdjustmentChannel,
|
|
10
|
-
PresetInfo, Color, ColorBalanceValues, WriteOptions, LinkedFile, PlacedLayerType, Warp, KeyDescriptorItem,
|
|
11
|
-
BooleanOperation, LayerEffectsInfo, Annotation, LayerVectorMask, AnimationFrame, Timeline, PlacedLayerFilter,
|
|
12
|
-
UnitsValue, Filter, PlacedLayer,
|
|
13
|
-
} from './psd';
|
|
14
|
-
import {
|
|
15
|
-
PsdReader, readSignature, readUnicodeString, skipBytes, readUint32, readUint8, readFloat64, readUint16,
|
|
16
|
-
readBytes, readInt16, checkSignature, readFloat32, readFixedPointPath32, readSection, readColor, readInt32,
|
|
17
|
-
readPascalString, readUnicodeStringWithLength, readAsciiString, readPattern,
|
|
18
|
-
} from './psdReader';
|
|
19
|
-
import {
|
|
20
|
-
PsdWriter, writeZeros, writeSignature, writeBytes, writeUint32, writeUint16, writeFloat64, writeUint8,
|
|
21
|
-
writeInt16, writeFloat32, writeFixedPointPath32, writeUnicodeString, writeSection, writeUnicodeStringWithPadding,
|
|
22
|
-
writeColor, writePascalString, writeInt32,
|
|
23
|
-
} from './psdWriter';
|
|
24
|
-
import {
|
|
25
|
-
Annt, BlnM, DescriptorColor, DescriptorUnitsValue, parsePercent, parseUnits, parseUnitsOrNumber, QuiltWarpDescriptor,
|
|
26
|
-
strokeStyleLineAlignment, strokeStyleLineCapType, strokeStyleLineJoinType, TextDescriptor, textGridding,
|
|
27
|
-
unitsPercent, unitsValue, WarpDescriptor, warpStyle, writeVersionAndDescriptor,
|
|
28
|
-
readVersionAndDescriptor, StrokeDescriptor, Ornt, horzVrtcToXY, LmfxDescriptor, Lfx2Descriptor,
|
|
29
|
-
FrameListDescriptor, TimelineDescriptor, FrameDescriptor, xyToHorzVrtc, serializeEffects,
|
|
30
|
-
parseEffects, parseColor, serializeColor, serializeVectorContent, parseVectorContent, parseTrackList,
|
|
31
|
-
serializeTrackList, FractionDescriptor, BlrM, BlrQ, SmBQ, SmBM, DspM, UndA, Cnvr, RplS, SphM, Wvtp, ZZTy,
|
|
32
|
-
Dstr, Chnl, MztT, Lns, blurType, DfsM, ExtT, ExtR, FlCl, CntE, WndM, Drct, IntE, IntC, FlMd,
|
|
33
|
-
unitsPercentF, frac, ClrS, descBoundsToBounds, boundsToDescBounds,
|
|
34
|
-
} from './descriptor';
|
|
4
|
+
import { LayerAdditionalInfo, BezierPath, Psd, BrightnessAdjustment, ExposureAdjustment, VibranceAdjustment, ColorBalanceAdjustment, BlackAndWhiteAdjustment, PhotoFilterAdjustment, ChannelMixerChannel, ChannelMixerAdjustment, PosterizeAdjustment, ThresholdAdjustment, GradientMapAdjustment, CMYK, SelectiveColorAdjustment, ColorLookupAdjustment, LevelsAdjustmentChannel, LevelsAdjustment, CurvesAdjustment, CurvesAdjustmentChannel, HueSaturationAdjustment, HueSaturationAdjustmentChannel, PresetInfo, Color, ColorBalanceValues, WriteOptions, LinkedFile, PlacedLayerType, Warp, KeyDescriptorItem, BooleanOperation, LayerEffectsInfo, Annotation, LayerVectorMask, AnimationFrame, Timeline, PlacedLayerFilter, UnitsValue, Filter, PlacedLayer } from './psd';
|
|
5
|
+
import { PsdReader, readSignature, readUnicodeString, skipBytes, readUint32, readUint8, readFloat64, readUint16, readBytes, readInt16, checkSignature, readFloat32, readFixedPointPath32, readSection, readColor, readInt32, readPascalString, readUnicodeStringWithLength, readAsciiString, readPattern, readLayerInfo, ReadOptionsExt } from './psdReader';
|
|
6
|
+
import { PsdWriter, writeZeros, writeSignature, writeBytes, writeUint32, writeUint16, writeFloat64, writeUint8, writeInt16, writeFloat32, writeFixedPointPath32, writeUnicodeString, writeSection, writeUnicodeStringWithPadding, writeColor, writePascalString, writeInt32 } from './psdWriter';
|
|
7
|
+
import { Annt, BlnM, DescriptorColor, DescriptorUnitsValue, parsePercent, parseUnits, parseUnitsOrNumber, QuiltWarpDescriptor, strokeStyleLineAlignment, strokeStyleLineCapType, strokeStyleLineJoinType, TextDescriptor, textGridding, unitsPercent, unitsValue, WarpDescriptor, warpStyle, writeVersionAndDescriptor, readVersionAndDescriptor, StrokeDescriptor, Ornt, horzVrtcToXY, LmfxDescriptor, Lfx2Descriptor, FrameListDescriptor, TimelineDescriptor, FrameDescriptor, xyToHorzVrtc, serializeEffects, parseEffects, parseColor, serializeColor, serializeVectorContent, parseVectorContent, parseTrackList, serializeTrackList, FractionDescriptor, BlrM, BlrQ, SmBQ, SmBM, DspM, UndA, Cnvr, RplS, SphM, Wvtp, ZZTy, Dstr, Chnl, MztT, Lns, blurType, DfsM, ExtT, ExtR, FlCl, CntE, WndM, Drct, IntE, IntC, FlMd, unitsPercentF, frac, ClrS, descBoundsToBounds, boundsToDescBounds } from './descriptor';
|
|
35
8
|
import { serializeEngineData, parseEngineData } from './engineData';
|
|
36
9
|
import { encodeEngineData, decodeEngineData } from './text';
|
|
37
10
|
|
|
@@ -41,7 +14,7 @@ export interface ExtendedWriteOptions extends WriteOptions {
|
|
|
41
14
|
}
|
|
42
15
|
|
|
43
16
|
type HasMethod = (target: LayerAdditionalInfo) => boolean;
|
|
44
|
-
type ReadMethod = (reader: PsdReader, target: LayerAdditionalInfo, left: () => number, psd: Psd, options:
|
|
17
|
+
type ReadMethod = (reader: PsdReader, target: LayerAdditionalInfo, left: () => number, psd: Psd, options: ReadOptionsExt) => void;
|
|
45
18
|
type WriteMethod = (writer: PsdWriter, target: LayerAdditionalInfo, psd: Psd, options: ExtendedWriteOptions) => void;
|
|
46
19
|
|
|
47
20
|
export interface InfoHandler {
|
|
@@ -90,9 +63,11 @@ addHandler(
|
|
|
90
63
|
|
|
91
64
|
if (readInt16(reader) !== 50) throw new Error(`Invalid TySh text version`);
|
|
92
65
|
const text: TextDescriptor = readVersionAndDescriptor(reader);
|
|
66
|
+
// console.log(require('util').inspect(text, false, 99, false), 'utf8');
|
|
93
67
|
|
|
94
68
|
if (readInt16(reader) !== 1) throw new Error(`Invalid TySh warp version`);
|
|
95
69
|
const warp: WarpDescriptor = readVersionAndDescriptor(reader);
|
|
70
|
+
// console.log(require('util').inspect(warp, false, 99, false), 'utf8');
|
|
96
71
|
|
|
97
72
|
target.text = {
|
|
98
73
|
transform,
|
|
@@ -120,6 +95,7 @@ addHandler(
|
|
|
120
95
|
if (text.EngineData) {
|
|
121
96
|
const engineData = parseEngineData(text.EngineData);
|
|
122
97
|
const textData = decodeEngineData(engineData);
|
|
98
|
+
// console.log(require('util').inspect(engineData, false, 99, false), 'utf8');
|
|
123
99
|
|
|
124
100
|
// require('fs').writeFileSync(`layer-${target.name}.txt`, require('util').inspect(engineData, false, 99, false), 'utf8');
|
|
125
101
|
// const before = parseEngineData(text.EngineData);
|
|
@@ -732,10 +708,21 @@ interface CustomDescriptor {
|
|
|
732
708
|
layerTime?: number;
|
|
733
709
|
}
|
|
734
710
|
|
|
711
|
+
interface CmlsDescriptor {
|
|
712
|
+
origFXRefPoint?: { Hrzn: number; Vrtc: number; };
|
|
713
|
+
LyrI: number;
|
|
714
|
+
layerSettings: {
|
|
715
|
+
enab?: boolean;
|
|
716
|
+
Ofst?: { Hrzn: number; Vrtc: number; };
|
|
717
|
+
FXRefPoint?: { Hrzn: number; Vrtc: number; };
|
|
718
|
+
compList: number[];
|
|
719
|
+
}[];
|
|
720
|
+
}
|
|
721
|
+
|
|
735
722
|
addHandler(
|
|
736
723
|
'shmd',
|
|
737
724
|
target => target.timestamp !== undefined || target.animationFrames !== undefined ||
|
|
738
|
-
target.animationFrameFlags !== undefined || target.timeline !== undefined,
|
|
725
|
+
target.animationFrameFlags !== undefined || target.timeline !== undefined || target.comps !== undefined,
|
|
739
726
|
(reader, target, left, _, options) => {
|
|
740
727
|
const count = readUint32(reader);
|
|
741
728
|
|
|
@@ -798,8 +785,25 @@ addHandler(
|
|
|
798
785
|
|
|
799
786
|
target.timeline = timeline;
|
|
800
787
|
// console.log('tmln:result', target.name, target.id, require('util').inspect(timeline, false, 99, true));
|
|
788
|
+
} else if (key === 'cmls') {
|
|
789
|
+
const desc = readVersionAndDescriptor(reader) as CmlsDescriptor;
|
|
790
|
+
// console.log('cmls', require('util').inspect(desc, false, 99, true));
|
|
791
|
+
|
|
792
|
+
target.comps = {
|
|
793
|
+
settings: [],
|
|
794
|
+
};
|
|
795
|
+
|
|
796
|
+
if (desc.origFXRefPoint) target.comps.originalEffectsReferencePoint = { x: desc.origFXRefPoint.Hrzn, y: desc.origFXRefPoint.Vrtc };
|
|
797
|
+
|
|
798
|
+
for (const item of desc.layerSettings) {
|
|
799
|
+
target.comps.settings.push({ compList: item.compList });
|
|
800
|
+
const t = target.comps.settings[target.comps.settings.length - 1];
|
|
801
|
+
if ('enab' in item) t.enabled = item.enab;
|
|
802
|
+
if (item.Ofst) t.offset = { x: item.Ofst.Hrzn, y: item.Ofst.Vrtc };
|
|
803
|
+
if (item.FXRefPoint) t.effectsReferencePoint = { x: item.FXRefPoint.Hrzn, y: item.FXRefPoint.Vrtc };
|
|
804
|
+
}
|
|
801
805
|
} else {
|
|
802
|
-
options.
|
|
806
|
+
options.logMissingFeatures && console.log('Unhandled "shmd" section key', key);
|
|
803
807
|
}
|
|
804
808
|
|
|
805
809
|
skipBytes(reader, left());
|
|
@@ -809,13 +813,14 @@ addHandler(
|
|
|
809
813
|
skipBytes(reader, left());
|
|
810
814
|
},
|
|
811
815
|
(writer, target, _, options) => {
|
|
812
|
-
const { animationFrames, animationFrameFlags, timestamp, timeline } = target;
|
|
816
|
+
const { animationFrames, animationFrameFlags, timestamp, timeline, comps } = target;
|
|
813
817
|
|
|
814
818
|
let count = 0;
|
|
815
819
|
if (animationFrames) count++;
|
|
816
820
|
if (animationFrameFlags) count++;
|
|
817
821
|
if (timeline) count++;
|
|
818
822
|
if (timestamp !== undefined) count++;
|
|
823
|
+
if (comps) count++;
|
|
819
824
|
writeUint32(writer, count);
|
|
820
825
|
|
|
821
826
|
if (animationFrames) {
|
|
@@ -883,7 +888,7 @@ addHandler(
|
|
|
883
888
|
desc.trackList = serializeTrackList(timeline.tracks);
|
|
884
889
|
}
|
|
885
890
|
|
|
886
|
-
const id = options.layerToId.get(target) || target.id
|
|
891
|
+
const id = options.layerToId.get(target) || target.id;
|
|
887
892
|
if (!id) throw new Error('You need to provide layer.id value whan writing document with animations');
|
|
888
893
|
desc.LyrI = id;
|
|
889
894
|
|
|
@@ -904,6 +909,38 @@ addHandler(
|
|
|
904
909
|
writeVersionAndDescriptor(writer, '', 'metadata', desc);
|
|
905
910
|
}, true);
|
|
906
911
|
}
|
|
912
|
+
|
|
913
|
+
if (comps) {
|
|
914
|
+
writeSignature(writer, '8BIM');
|
|
915
|
+
writeSignature(writer, 'cmls');
|
|
916
|
+
writeUint8(writer, 0); // copy (always false)
|
|
917
|
+
writeZeros(writer, 3);
|
|
918
|
+
writeSection(writer, 2, () => {
|
|
919
|
+
const id = options.layerToId.get(target) || target.id;
|
|
920
|
+
if (!id) throw new Error('You need to provide layer.id value whan writing document with layer comps');
|
|
921
|
+
|
|
922
|
+
const desc: CmlsDescriptor = {} as any;
|
|
923
|
+
|
|
924
|
+
if (comps.originalEffectsReferencePoint) {
|
|
925
|
+
desc.origFXRefPoint = { Hrzn: comps.originalEffectsReferencePoint.x, Vrtc: comps.originalEffectsReferencePoint.y };
|
|
926
|
+
}
|
|
927
|
+
|
|
928
|
+
desc.LyrI = id;
|
|
929
|
+
desc.layerSettings = [];
|
|
930
|
+
|
|
931
|
+
for (const item of comps.settings) {
|
|
932
|
+
const t: CmlsDescriptor['layerSettings'][0] = {} as any;
|
|
933
|
+
if (item.enabled !== undefined) t.enab = item.enabled;
|
|
934
|
+
if (item.offset) t.Ofst = { Hrzn: item.offset.x, Vrtc: item.offset.y };
|
|
935
|
+
if (item.effectsReferencePoint) t.FXRefPoint = { Hrzn: item.effectsReferencePoint.x, Vrtc: item.effectsReferencePoint.y };
|
|
936
|
+
t.compList = item.compList;
|
|
937
|
+
desc.layerSettings.push(t);
|
|
938
|
+
}
|
|
939
|
+
|
|
940
|
+
// console.log('cmls', require('util').inspect(desc, false, 99, true));
|
|
941
|
+
writeVersionAndDescriptor(writer, '', 'null', desc);
|
|
942
|
+
}, true);
|
|
943
|
+
}
|
|
907
944
|
},
|
|
908
945
|
);
|
|
909
946
|
|
|
@@ -3304,6 +3341,62 @@ addHandler(
|
|
|
3304
3341
|
},
|
|
3305
3342
|
);
|
|
3306
3343
|
|
|
3344
|
+
addHandler(
|
|
3345
|
+
'Lr16',
|
|
3346
|
+
() => false,
|
|
3347
|
+
(reader, _target, _left, psd, options) => {
|
|
3348
|
+
readLayerInfo(reader, psd, options);
|
|
3349
|
+
},
|
|
3350
|
+
(_writer, _target) => {
|
|
3351
|
+
},
|
|
3352
|
+
);
|
|
3353
|
+
|
|
3354
|
+
addHandler(
|
|
3355
|
+
'Lr32',
|
|
3356
|
+
() => false,
|
|
3357
|
+
(reader, _target, _left, psd, options) => {
|
|
3358
|
+
readLayerInfo(reader, psd, options);
|
|
3359
|
+
},
|
|
3360
|
+
(_writer, _target) => {
|
|
3361
|
+
},
|
|
3362
|
+
);
|
|
3363
|
+
|
|
3364
|
+
addHandler(
|
|
3365
|
+
'LMsk',
|
|
3366
|
+
hasKey('userMask'),
|
|
3367
|
+
(reader, target) => {
|
|
3368
|
+
target.userMask = {
|
|
3369
|
+
colorSpace: readColor(reader),
|
|
3370
|
+
opacity: readUint16(reader) / 0xff,
|
|
3371
|
+
};
|
|
3372
|
+
const flag = readUint8(reader);
|
|
3373
|
+
if (flag !== 128) throw new Error('Invalid flag value');
|
|
3374
|
+
skipBytes(reader, 1);
|
|
3375
|
+
},
|
|
3376
|
+
(writer, target) => {
|
|
3377
|
+
const userMask = target.userMask!;
|
|
3378
|
+
writeColor(writer, userMask.colorSpace);
|
|
3379
|
+
writeUint16(writer, clamp(userMask.opacity, 0, 1) * 0xff);
|
|
3380
|
+
writeUint8(writer, 128);
|
|
3381
|
+
writeZeros(writer, 1);
|
|
3382
|
+
},
|
|
3383
|
+
);
|
|
3384
|
+
|
|
3385
|
+
if (MOCK_HANDLERS) {
|
|
3386
|
+
addHandler(
|
|
3387
|
+
'vowv', // appears with Lr16 section ?
|
|
3388
|
+
_ => false,
|
|
3389
|
+
(reader, target, left) => {
|
|
3390
|
+
const value = readUint32(reader); // 2 ????
|
|
3391
|
+
reader; target;
|
|
3392
|
+
console.log('vowv', { value }, left());
|
|
3393
|
+
},
|
|
3394
|
+
(_writer, _target) => {
|
|
3395
|
+
// TODO: write
|
|
3396
|
+
},
|
|
3397
|
+
);
|
|
3398
|
+
}
|
|
3399
|
+
|
|
3307
3400
|
if (MOCK_HANDLERS) {
|
|
3308
3401
|
addHandler(
|
|
3309
3402
|
'Patt',
|
|
@@ -3614,30 +3707,33 @@ addHandlerAlias('lnkD', 'lnk2');
|
|
|
3614
3707
|
addHandlerAlias('lnk3', 'lnk2');
|
|
3615
3708
|
addHandlerAlias('lnkE', 'lnk2');
|
|
3616
3709
|
|
|
3617
|
-
interface
|
|
3618
|
-
|
|
3619
|
-
|
|
3620
|
-
|
|
3621
|
-
|
|
3710
|
+
interface PthsDescriptor {
|
|
3711
|
+
pathList: {
|
|
3712
|
+
_classID: 'pathInfoClass';
|
|
3713
|
+
pathUnicodeName: string;
|
|
3714
|
+
pathSymmetryClass: {
|
|
3715
|
+
_classID: 'pathSymmetryClass';
|
|
3716
|
+
pathSymmetryMode: string; // 'pathSymmetryModeEnum.pathSymmetryModeBasicPath'
|
|
3717
|
+
};
|
|
3718
|
+
}[];
|
|
3622
3719
|
}
|
|
3623
3720
|
|
|
3624
3721
|
addHandler(
|
|
3625
3722
|
'pths',
|
|
3626
3723
|
hasKey('pathList'),
|
|
3627
3724
|
(reader, target) => {
|
|
3628
|
-
const
|
|
3629
|
-
|
|
3630
|
-
|
|
3631
|
-
|
|
3632
|
-
|
|
3633
|
-
// console.log('pths', descriptor); // TODO: remove this
|
|
3725
|
+
const desc = readVersionAndDescriptor(reader, true) as PthsDescriptor;
|
|
3726
|
+
// console.log(require('util').inspect(desc, false, 99, true));
|
|
3727
|
+
// if (options.throwForMissingFeatures && desc?.pathList?.length) throw new Error('non-empty pathList in `pths`');
|
|
3728
|
+
desc;
|
|
3729
|
+
target.pathList = []; // TODO: read paths
|
|
3634
3730
|
},
|
|
3635
3731
|
(writer, _target) => {
|
|
3636
|
-
const
|
|
3732
|
+
const desc: PthsDescriptor = {
|
|
3637
3733
|
pathList: [], // TODO: write paths
|
|
3638
3734
|
};
|
|
3639
3735
|
|
|
3640
|
-
writeVersionAndDescriptor(writer, '', 'pathsDataClass',
|
|
3736
|
+
writeVersionAndDescriptor(writer, '', 'pathsDataClass', desc);
|
|
3641
3737
|
},
|
|
3642
3738
|
);
|
|
3643
3739
|
|
|
@@ -4548,9 +4644,11 @@ addHandler(
|
|
|
4548
4644
|
const data = readBytes(reader, left());
|
|
4549
4645
|
target.engineData = fromByteArray(data);
|
|
4550
4646
|
// const engineData = parseEngineData(data);
|
|
4647
|
+
// const engineData2 = decodeEngineData2(engineData);
|
|
4551
4648
|
// console.log(require('util').inspect(engineData, false, 99, true));
|
|
4552
|
-
// require('fs').writeFileSync('
|
|
4553
|
-
// require('fs').writeFileSync('test_data.
|
|
4649
|
+
// require('fs').writeFileSync('test_data.bin', data);
|
|
4650
|
+
// require('fs').writeFileSync('test_data.txt', require('util').inspect(engineData, false, 99, false), 'utf8');
|
|
4651
|
+
// require('fs').writeFileSync('test_data.json', JSON.stringify(engineData2, null, 2), 'utf8');
|
|
4554
4652
|
},
|
|
4555
4653
|
(writer, target) => {
|
|
4556
4654
|
const buffer = toByteArray(target.engineData!);
|
|
@@ -4804,6 +4902,13 @@ addHandler(
|
|
|
4804
4902
|
},
|
|
4805
4903
|
);
|
|
4806
4904
|
|
|
4905
|
+
interface ExtensionDesc {
|
|
4906
|
+
generatorSettings: {
|
|
4907
|
+
generator_45_assets: { json: string; };
|
|
4908
|
+
layerTime: number;
|
|
4909
|
+
};
|
|
4910
|
+
}
|
|
4911
|
+
|
|
4807
4912
|
// extension settings ?, ignore it
|
|
4808
4913
|
addHandler(
|
|
4809
4914
|
'extn',
|
package/src/descriptor.ts
CHANGED
|
@@ -136,6 +136,8 @@ const fieldToExtType: ExtTypeDict = {
|
|
|
136
136
|
sdwM: makeType('Parameters', 'adaptCorrectTones'),
|
|
137
137
|
hglM: makeType('Parameters', 'adaptCorrectTones'),
|
|
138
138
|
customShape: makeType('', 'customShape'),
|
|
139
|
+
origFXRefPoint: nullType,
|
|
140
|
+
FXRefPoint: nullType,
|
|
139
141
|
};
|
|
140
142
|
|
|
141
143
|
const fieldToArrayExtType: ExtTypeDict = {
|
|
@@ -167,6 +169,8 @@ const fieldToArrayExtType: ExtTypeDict = {
|
|
|
167
169
|
puppetShapeList: makeType('', 'puppetShape'),
|
|
168
170
|
channelDenoise: makeType('', 'channelDenoiseParams'),
|
|
169
171
|
ShrP: makeType('', 'Pnt '),
|
|
172
|
+
layerSettings: nullType,
|
|
173
|
+
list: nullType,
|
|
170
174
|
};
|
|
171
175
|
|
|
172
176
|
const typeToField: { [key: string]: string[]; } = {
|
|
@@ -174,7 +178,7 @@ const typeToField: { [key: string]: string[]; } = {
|
|
|
174
178
|
'Txt ', 'printerName', 'Nm ', 'Idnt', 'blackAndWhitePresetFileName', 'LUT3DFileName',
|
|
175
179
|
'presetFileName', 'curvesPresetFileName', 'mixerPresetFileName', 'placed', 'description', 'reason',
|
|
176
180
|
'artboardPresetName', 'json', 'clipID', 'relPath', 'fullPath', 'mediaDescriptor', 'Msge',
|
|
177
|
-
'altTag', 'url', 'cellText', 'preset', 'KnNm', 'FPth',
|
|
181
|
+
'altTag', 'url', 'cellText', 'preset', 'KnNm', 'FPth', 'comment',
|
|
178
182
|
],
|
|
179
183
|
'tdta': [
|
|
180
184
|
'EngineData', 'LUT3DFileData', 'indexArray', 'originalVertexArray', 'deformedVertexArray',
|
|
@@ -192,7 +196,7 @@ const typeToField: { [key: string]: string[]; } = {
|
|
|
192
196
|
'topOutset', 'leftOutset', 'bottomOutset', 'rightOutset', 'filterID', 'meshQuality',
|
|
193
197
|
'meshExpansion', 'meshRigidity', 'VrsM', 'VrsN', 'NmbG', 'WLMn', 'WLMx', 'AmMn', 'AmMx', 'SclH', 'SclV',
|
|
194
198
|
'Lvl ', 'TlNm', 'TlOf', 'FlRs', 'Thsh', 'ShrS', 'ShrE', 'FlRs', 'Vrnc', 'Strg', 'ExtS', 'ExtD',
|
|
195
|
-
'HrzS', 'VrtS', 'NmbR', 'EdgF', 'Ang1', 'Ang2', 'Ang3', 'Ang4',
|
|
199
|
+
'HrzS', 'VrtS', 'NmbR', 'EdgF', 'Ang1', 'Ang2', 'Ang3', 'Ang4', 'lastAppliedComp', 'capturedInfo',
|
|
196
200
|
],
|
|
197
201
|
'enum': [
|
|
198
202
|
'textGridding', 'Ornt', 'warpStyle', 'warpRotate', 'Inte', 'Bltn', 'ClrS', 'BlrQ',
|
|
@@ -237,7 +241,7 @@ const typeToField: { [key: string]: string[]; } = {
|
|
|
237
241
|
'sheetTimelineOptions', 'audioClipList', 'trackList', 'globalTrackList', 'keyList', 'audioClipList',
|
|
238
242
|
'warpValues', 'selectedPin', 'Pts ', 'SbpL', 'pathComponents', 'pinOffsets', 'posFinalPins',
|
|
239
243
|
'pinVertexIndices', 'PinP', 'PnRt', 'PnOv', 'PnDp', 'filterFXList', 'puppetShapeList', 'ShrP',
|
|
240
|
-
'channelDenoise', 'Mtrx',
|
|
244
|
+
'channelDenoise', 'Mtrx', 'layerSettings', 'list', 'compList',
|
|
241
245
|
],
|
|
242
246
|
'ObAr': ['meshPoints', 'quiltSliceX', 'quiltSliceY'],
|
|
243
247
|
'obj ': ['null', 'Chnl'],
|
|
@@ -285,6 +289,7 @@ const fieldToArrayType: Dict = {
|
|
|
285
289
|
ShrP: 'Objc',
|
|
286
290
|
channelDenoise: 'Objc',
|
|
287
291
|
Mtrx: 'long',
|
|
292
|
+
compList: 'long',
|
|
288
293
|
};
|
|
289
294
|
|
|
290
295
|
const fieldToType: Dict = {};
|
|
@@ -336,7 +341,7 @@ export function readAsciiStringOrClassId(reader: PsdReader) {
|
|
|
336
341
|
}
|
|
337
342
|
|
|
338
343
|
function writeAsciiStringOrClassId(writer: PsdWriter, value: string) {
|
|
339
|
-
if (value.length === 4 && value !== 'warp' && value !== 'time' && value !== 'hold') {
|
|
344
|
+
if (value.length === 4 && value !== 'warp' && value !== 'time' && value !== 'hold' && value !== 'list') {
|
|
340
345
|
// write classId
|
|
341
346
|
writeInt32(writer, 0);
|
|
342
347
|
writeSignature(writer, value);
|
|
@@ -473,9 +478,9 @@ function readOSType(reader: PsdReader, type: string, includeClass: boolean) {
|
|
|
473
478
|
const items: any[] = [];
|
|
474
479
|
|
|
475
480
|
for (let i = 0; i < length; i++) {
|
|
476
|
-
const
|
|
477
|
-
// console.log(' >',
|
|
478
|
-
items.push(readOSType(reader,
|
|
481
|
+
const itemType = readSignature(reader);
|
|
482
|
+
// console.log(' >', itemType);
|
|
483
|
+
items.push(readOSType(reader, itemType, includeClass));
|
|
479
484
|
}
|
|
480
485
|
|
|
481
486
|
return items;
|
|
@@ -497,9 +502,9 @@ function readOSType(reader: PsdReader, type: string, includeClass: boolean) {
|
|
|
497
502
|
case 'TEXT': // String
|
|
498
503
|
return readUnicodeString(reader);
|
|
499
504
|
case 'enum': { // Enumerated
|
|
500
|
-
const
|
|
505
|
+
const enumType = readAsciiStringOrClassId(reader);
|
|
501
506
|
const value = readAsciiStringOrClassId(reader);
|
|
502
|
-
return `${
|
|
507
|
+
return `${enumType}.${value}`;
|
|
503
508
|
}
|
|
504
509
|
case 'long': // Integer
|
|
505
510
|
return readInt32(reader);
|