ag-psd 19.0.1 → 20.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 +5 -0
- package/README_PSD.md +6 -0
- package/TODO +5 -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 +99 -10
- package/dist/additionalInfo.js.map +1 -1
- package/dist/bundle.js +405 -142
- package/dist/descriptor.js +21 -16
- package/dist/descriptor.js.map +1 -1
- package/dist/helpers.d.ts +2 -7
- package/dist/helpers.js +33 -10
- package/dist/helpers.js.map +1 -1
- package/dist/imageResources.js +37 -0
- 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 +179 -97
- package/dist/psdReader.js.map +1 -1
- package/dist/psdWriter.js +24 -4
- package/dist/psdWriter.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 +102 -13
- 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/helpers.d.ts +2 -7
- package/dist-es/helpers.js +31 -9
- package/dist-es/helpers.js.map +1 -1
- package/dist-es/imageResources.js +37 -0
- 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 +178 -99
- package/dist-es/psdReader.js.map +1 -1
- package/dist-es/psdWriter.js +25 -5
- package/dist-es/psdWriter.js.map +1 -1
- package/package.json +1 -1
- package/src/abr.ts +4 -4
- package/src/additionalInfo.ts +142 -49
- package/src/descriptor.ts +14 -9
- package/src/helpers.ts +35 -18
- package/src/imageResources.ts +53 -0
- package/src/psd.ts +41 -5
- package/src/psdReader.ts +170 -126
- package/src/psdWriter.ts +33 -14
package/dist/bundle.js
CHANGED
|
@@ -75,21 +75,21 @@ function readAbr(buffer, options) {
|
|
|
75
75
|
var w = (0, psdReader_1.readInt32)(reader) - x;
|
|
76
76
|
if (w <= 0 || h <= 0)
|
|
77
77
|
throw new Error('Invalid bounds');
|
|
78
|
-
var
|
|
78
|
+
var bithDepth = (0, psdReader_1.readInt16)(reader);
|
|
79
79
|
var compression = (0, psdReader_1.readUint8)(reader); // 0 - raw, 1 - RLE
|
|
80
80
|
var alpha = new Uint8Array(w * h);
|
|
81
|
-
if (
|
|
81
|
+
if (bithDepth === 8) {
|
|
82
82
|
if (compression === 0) {
|
|
83
83
|
alpha.set((0, psdReader_1.readBytes)(reader, alpha.byteLength));
|
|
84
84
|
}
|
|
85
85
|
else if (compression === 1) {
|
|
86
|
-
(0, psdReader_1.readDataRLE)(reader, { width: w, height: h, data: alpha }, w, h, 1, [0], false);
|
|
86
|
+
(0, psdReader_1.readDataRLE)(reader, { width: w, height: h, data: alpha }, w, h, bithDepth, 1, [0], false);
|
|
87
87
|
}
|
|
88
88
|
else {
|
|
89
89
|
throw new Error('Invalid compression');
|
|
90
90
|
}
|
|
91
91
|
}
|
|
92
|
-
else if (
|
|
92
|
+
else if (bithDepth === 16) {
|
|
93
93
|
if (compression === 0) {
|
|
94
94
|
for (var i = 0; i < alpha.byteLength; i++) {
|
|
95
95
|
alpha[i] = (0, psdReader_1.readUint16)(reader) >> 8; // convert to 8bit values
|
|
@@ -353,9 +353,11 @@ addHandler('TySh', hasKey('text'), function (reader, target, leftBytes) {
|
|
|
353
353
|
if ((0, psdReader_1.readInt16)(reader) !== 50)
|
|
354
354
|
throw new Error("Invalid TySh text version");
|
|
355
355
|
var text = (0, descriptor_1.readVersionAndDescriptor)(reader);
|
|
356
|
+
// console.log(require('util').inspect(text, false, 99, false), 'utf8');
|
|
356
357
|
if ((0, psdReader_1.readInt16)(reader) !== 1)
|
|
357
358
|
throw new Error("Invalid TySh warp version");
|
|
358
359
|
var warp = (0, descriptor_1.readVersionAndDescriptor)(reader);
|
|
360
|
+
// console.log(require('util').inspect(warp, false, 99, false), 'utf8');
|
|
359
361
|
target.text = {
|
|
360
362
|
transform: transform,
|
|
361
363
|
left: (0, psdReader_1.readFloat32)(reader),
|
|
@@ -382,6 +384,7 @@ addHandler('TySh', hasKey('text'), function (reader, target, leftBytes) {
|
|
|
382
384
|
if (text.EngineData) {
|
|
383
385
|
var engineData = (0, engineData_1.parseEngineData)(text.EngineData);
|
|
384
386
|
var textData = (0, text_1.decodeEngineData)(engineData);
|
|
387
|
+
// console.log(require('util').inspect(engineData, false, 99, false), 'utf8');
|
|
385
388
|
// require('fs').writeFileSync(`layer-${target.name}.txt`, require('util').inspect(engineData, false, 99, false), 'utf8');
|
|
386
389
|
// const before = parseEngineData(text.EngineData);
|
|
387
390
|
// const after = encodeEngineData(engineData);
|
|
@@ -799,7 +802,7 @@ addHandler('lclr', hasKey('layerColor'), function (reader, target) {
|
|
|
799
802
|
(0, psdWriter_1.writeZeros)(writer, 6);
|
|
800
803
|
});
|
|
801
804
|
addHandler('shmd', function (target) { return target.timestamp !== undefined || target.animationFrames !== undefined ||
|
|
802
|
-
target.animationFrameFlags !== undefined || target.timeline !== undefined; }, function (reader, target, left, _, options) {
|
|
805
|
+
target.animationFrameFlags !== undefined || target.timeline !== undefined || target.comps !== undefined; }, function (reader, target, left, _, options) {
|
|
803
806
|
var count = (0, psdReader_1.readUint32)(reader);
|
|
804
807
|
var _loop_1 = function (i) {
|
|
805
808
|
(0, psdReader_1.checkSignature)(reader, '8BIM');
|
|
@@ -863,8 +866,28 @@ addHandler('shmd', function (target) { return target.timestamp !== undefined ||
|
|
|
863
866
|
target.timeline = timeline;
|
|
864
867
|
// console.log('tmln:result', target.name, target.id, require('util').inspect(timeline, false, 99, true));
|
|
865
868
|
}
|
|
869
|
+
else if (key === 'cmls') {
|
|
870
|
+
var desc = (0, descriptor_1.readVersionAndDescriptor)(reader);
|
|
871
|
+
// console.log('cmls', require('util').inspect(desc, false, 99, true));
|
|
872
|
+
target.comps = {
|
|
873
|
+
settings: [],
|
|
874
|
+
};
|
|
875
|
+
if (desc.origFXRefPoint)
|
|
876
|
+
target.comps.originalEffectsReferencePoint = { x: desc.origFXRefPoint.Hrzn, y: desc.origFXRefPoint.Vrtc };
|
|
877
|
+
for (var _i = 0, _a = desc.layerSettings; _i < _a.length; _i++) {
|
|
878
|
+
var item = _a[_i];
|
|
879
|
+
target.comps.settings.push({ compList: item.compList });
|
|
880
|
+
var t = target.comps.settings[target.comps.settings.length - 1];
|
|
881
|
+
if ('enab' in item)
|
|
882
|
+
t.enabled = item.enab;
|
|
883
|
+
if (item.Ofst)
|
|
884
|
+
t.offset = { x: item.Ofst.Hrzn, y: item.Ofst.Vrtc };
|
|
885
|
+
if (item.FXRefPoint)
|
|
886
|
+
t.effectsReferencePoint = { x: item.FXRefPoint.Hrzn, y: item.FXRefPoint.Vrtc };
|
|
887
|
+
}
|
|
888
|
+
}
|
|
866
889
|
else {
|
|
867
|
-
options.
|
|
890
|
+
options.logMissingFeatures && console.log('Unhandled "shmd" section key', key);
|
|
868
891
|
}
|
|
869
892
|
(0, psdReader_1.skipBytes)(reader, left());
|
|
870
893
|
});
|
|
@@ -874,7 +897,7 @@ addHandler('shmd', function (target) { return target.timestamp !== undefined ||
|
|
|
874
897
|
}
|
|
875
898
|
(0, psdReader_1.skipBytes)(reader, left());
|
|
876
899
|
}, function (writer, target, _, options) {
|
|
877
|
-
var animationFrames = target.animationFrames, animationFrameFlags = target.animationFrameFlags, timestamp = target.timestamp, timeline = target.timeline;
|
|
900
|
+
var animationFrames = target.animationFrames, animationFrameFlags = target.animationFrameFlags, timestamp = target.timestamp, timeline = target.timeline, comps = target.comps;
|
|
878
901
|
var count = 0;
|
|
879
902
|
if (animationFrames)
|
|
880
903
|
count++;
|
|
@@ -884,6 +907,8 @@ addHandler('shmd', function (target) { return target.timestamp !== undefined ||
|
|
|
884
907
|
count++;
|
|
885
908
|
if (timestamp !== undefined)
|
|
886
909
|
count++;
|
|
910
|
+
if (comps)
|
|
911
|
+
count++;
|
|
887
912
|
(0, psdWriter_1.writeUint32)(writer, count);
|
|
888
913
|
if (animationFrames) {
|
|
889
914
|
(0, psdWriter_1.writeSignature)(writer, '8BIM');
|
|
@@ -949,7 +974,7 @@ addHandler('shmd', function (target) { return target.timestamp !== undefined ||
|
|
|
949
974
|
if (timeline.tracks) {
|
|
950
975
|
desc.trackList = (0, descriptor_1.serializeTrackList)(timeline.tracks);
|
|
951
976
|
}
|
|
952
|
-
var id = options.layerToId.get(target) || target.id
|
|
977
|
+
var id = options.layerToId.get(target) || target.id;
|
|
953
978
|
if (!id)
|
|
954
979
|
throw new Error('You need to provide layer.id value whan writing document with animations');
|
|
955
980
|
desc.LyrI = id;
|
|
@@ -969,6 +994,37 @@ addHandler('shmd', function (target) { return target.timestamp !== undefined ||
|
|
|
969
994
|
(0, descriptor_1.writeVersionAndDescriptor)(writer, '', 'metadata', desc);
|
|
970
995
|
}, true);
|
|
971
996
|
}
|
|
997
|
+
if (comps) {
|
|
998
|
+
(0, psdWriter_1.writeSignature)(writer, '8BIM');
|
|
999
|
+
(0, psdWriter_1.writeSignature)(writer, 'cmls');
|
|
1000
|
+
(0, psdWriter_1.writeUint8)(writer, 0); // copy (always false)
|
|
1001
|
+
(0, psdWriter_1.writeZeros)(writer, 3);
|
|
1002
|
+
(0, psdWriter_1.writeSection)(writer, 2, function () {
|
|
1003
|
+
var id = options.layerToId.get(target) || target.id;
|
|
1004
|
+
if (!id)
|
|
1005
|
+
throw new Error('You need to provide layer.id value whan writing document with layer comps');
|
|
1006
|
+
var desc = {};
|
|
1007
|
+
if (comps.originalEffectsReferencePoint) {
|
|
1008
|
+
desc.origFXRefPoint = { Hrzn: comps.originalEffectsReferencePoint.x, Vrtc: comps.originalEffectsReferencePoint.y };
|
|
1009
|
+
}
|
|
1010
|
+
desc.LyrI = id;
|
|
1011
|
+
desc.layerSettings = [];
|
|
1012
|
+
for (var _i = 0, _a = comps.settings; _i < _a.length; _i++) {
|
|
1013
|
+
var item = _a[_i];
|
|
1014
|
+
var t = {};
|
|
1015
|
+
if (item.enabled !== undefined)
|
|
1016
|
+
t.enab = item.enabled;
|
|
1017
|
+
if (item.offset)
|
|
1018
|
+
t.Ofst = { Hrzn: item.offset.x, Vrtc: item.offset.y };
|
|
1019
|
+
if (item.effectsReferencePoint)
|
|
1020
|
+
t.FXRefPoint = { Hrzn: item.effectsReferencePoint.x, Vrtc: item.effectsReferencePoint.y };
|
|
1021
|
+
t.compList = item.compList;
|
|
1022
|
+
desc.layerSettings.push(t);
|
|
1023
|
+
}
|
|
1024
|
+
// console.log('cmls', require('util').inspect(desc, false, 99, true));
|
|
1025
|
+
(0, descriptor_1.writeVersionAndDescriptor)(writer, '', 'null', desc);
|
|
1026
|
+
}, true);
|
|
1027
|
+
}
|
|
972
1028
|
});
|
|
973
1029
|
addHandler('vstk', hasKey('vectorStroke'), function (reader, target, left) {
|
|
974
1030
|
var desc = (0, descriptor_1.readVersionAndDescriptor)(reader);
|
|
@@ -2145,6 +2201,38 @@ addHandler('fxrp', hasKey('referencePoint'), function (reader, target) {
|
|
|
2145
2201
|
(0, psdWriter_1.writeFloat64)(writer, target.referencePoint.x);
|
|
2146
2202
|
(0, psdWriter_1.writeFloat64)(writer, target.referencePoint.y);
|
|
2147
2203
|
});
|
|
2204
|
+
addHandler('Lr16', function () { return false; }, function (reader, _target, _left, psd, options) {
|
|
2205
|
+
(0, psdReader_1.readLayerInfo)(reader, psd, options);
|
|
2206
|
+
}, function (_writer, _target) {
|
|
2207
|
+
});
|
|
2208
|
+
addHandler('LMsk', hasKey('userMask'), function (reader, target) {
|
|
2209
|
+
target.userMask = {
|
|
2210
|
+
colorSpace: (0, psdReader_1.readColor)(reader),
|
|
2211
|
+
opacity: (0, psdReader_1.readUint16)(reader) / 0xff,
|
|
2212
|
+
};
|
|
2213
|
+
var flag = (0, psdReader_1.readUint8)(reader);
|
|
2214
|
+
if (flag !== 128)
|
|
2215
|
+
throw new Error('Invalid flag value');
|
|
2216
|
+
(0, psdReader_1.skipBytes)(reader, 1);
|
|
2217
|
+
}, function (writer, target) {
|
|
2218
|
+
var userMask = target.userMask;
|
|
2219
|
+
(0, psdWriter_1.writeColor)(writer, userMask.colorSpace);
|
|
2220
|
+
(0, psdWriter_1.writeUint16)(writer, (0, helpers_1.clamp)(userMask.opacity, 0, 1) * 0xff);
|
|
2221
|
+
(0, psdWriter_1.writeUint8)(writer, 128);
|
|
2222
|
+
(0, psdWriter_1.writeZeros)(writer, 1);
|
|
2223
|
+
});
|
|
2224
|
+
if (helpers_1.MOCK_HANDLERS) {
|
|
2225
|
+
addHandler('vowv', // appears with Lr16 section ?
|
|
2226
|
+
function (// appears with Lr16 section ?
|
|
2227
|
+
_) { return false; }, function (reader, target, left) {
|
|
2228
|
+
var value = (0, psdReader_1.readUint32)(reader); // 2 ????
|
|
2229
|
+
reader;
|
|
2230
|
+
target;
|
|
2231
|
+
console.log('vowv', { value: value }, left());
|
|
2232
|
+
}, function (_writer, _target) {
|
|
2233
|
+
// TODO: write
|
|
2234
|
+
});
|
|
2235
|
+
}
|
|
2148
2236
|
if (helpers_1.MOCK_HANDLERS) {
|
|
2149
2237
|
addHandler('Patt', function (target) { return target._Patt !== undefined; }, function (reader, target, left) {
|
|
2150
2238
|
// console.log('additional info: Patt');
|
|
@@ -2437,15 +2525,16 @@ addHandlerAlias('lnkD', 'lnk2');
|
|
|
2437
2525
|
addHandlerAlias('lnk3', 'lnk2');
|
|
2438
2526
|
addHandlerAlias('lnkE', 'lnk2');
|
|
2439
2527
|
addHandler('pths', hasKey('pathList'), function (reader, target) {
|
|
2440
|
-
var
|
|
2441
|
-
|
|
2442
|
-
|
|
2443
|
-
|
|
2528
|
+
var desc = (0, descriptor_1.readVersionAndDescriptor)(reader, true);
|
|
2529
|
+
// console.log(require('util').inspect(desc, false, 99, true));
|
|
2530
|
+
// if (options.throwForMissingFeatures && desc?.pathList?.length) throw new Error('non-empty pathList in `pths`');
|
|
2531
|
+
desc;
|
|
2532
|
+
target.pathList = []; // TODO: read paths
|
|
2444
2533
|
}, function (writer, _target) {
|
|
2445
|
-
var
|
|
2534
|
+
var desc = {
|
|
2446
2535
|
pathList: [], // TODO: write paths
|
|
2447
2536
|
};
|
|
2448
|
-
(0, descriptor_1.writeVersionAndDescriptor)(writer, '', 'pathsDataClass',
|
|
2537
|
+
(0, descriptor_1.writeVersionAndDescriptor)(writer, '', 'pathsDataClass', desc);
|
|
2449
2538
|
});
|
|
2450
2539
|
addHandler('lyvr', hasKey('version'), function (reader, target) { return target.version = (0, psdReader_1.readUint32)(reader); }, function (writer, target) { return (0, psdWriter_1.writeUint32)(writer, target.version); });
|
|
2451
2540
|
function adjustmentType(type) {
|
|
@@ -3550,6 +3639,8 @@ var fieldToExtType = {
|
|
|
3550
3639
|
sdwM: makeType('Parameters', 'adaptCorrectTones'),
|
|
3551
3640
|
hglM: makeType('Parameters', 'adaptCorrectTones'),
|
|
3552
3641
|
customShape: makeType('', 'customShape'),
|
|
3642
|
+
origFXRefPoint: nullType,
|
|
3643
|
+
FXRefPoint: nullType,
|
|
3553
3644
|
};
|
|
3554
3645
|
var fieldToArrayExtType = {
|
|
3555
3646
|
'Crv ': makeType('', 'CrPt'),
|
|
@@ -3580,13 +3671,15 @@ var fieldToArrayExtType = {
|
|
|
3580
3671
|
puppetShapeList: makeType('', 'puppetShape'),
|
|
3581
3672
|
channelDenoise: makeType('', 'channelDenoiseParams'),
|
|
3582
3673
|
ShrP: makeType('', 'Pnt '),
|
|
3674
|
+
layerSettings: nullType,
|
|
3675
|
+
list: nullType,
|
|
3583
3676
|
};
|
|
3584
3677
|
var typeToField = {
|
|
3585
3678
|
'TEXT': [
|
|
3586
3679
|
'Txt ', 'printerName', 'Nm ', 'Idnt', 'blackAndWhitePresetFileName', 'LUT3DFileName',
|
|
3587
3680
|
'presetFileName', 'curvesPresetFileName', 'mixerPresetFileName', 'placed', 'description', 'reason',
|
|
3588
3681
|
'artboardPresetName', 'json', 'clipID', 'relPath', 'fullPath', 'mediaDescriptor', 'Msge',
|
|
3589
|
-
'altTag', 'url', 'cellText', 'preset', 'KnNm', 'FPth',
|
|
3682
|
+
'altTag', 'url', 'cellText', 'preset', 'KnNm', 'FPth', 'comment',
|
|
3590
3683
|
],
|
|
3591
3684
|
'tdta': [
|
|
3592
3685
|
'EngineData', 'LUT3DFileData', 'indexArray', 'originalVertexArray', 'deformedVertexArray',
|
|
@@ -3604,7 +3697,7 @@ var typeToField = {
|
|
|
3604
3697
|
'topOutset', 'leftOutset', 'bottomOutset', 'rightOutset', 'filterID', 'meshQuality',
|
|
3605
3698
|
'meshExpansion', 'meshRigidity', 'VrsM', 'VrsN', 'NmbG', 'WLMn', 'WLMx', 'AmMn', 'AmMx', 'SclH', 'SclV',
|
|
3606
3699
|
'Lvl ', 'TlNm', 'TlOf', 'FlRs', 'Thsh', 'ShrS', 'ShrE', 'FlRs', 'Vrnc', 'Strg', 'ExtS', 'ExtD',
|
|
3607
|
-
'HrzS', 'VrtS', 'NmbR', 'EdgF', 'Ang1', 'Ang2', 'Ang3', 'Ang4',
|
|
3700
|
+
'HrzS', 'VrtS', 'NmbR', 'EdgF', 'Ang1', 'Ang2', 'Ang3', 'Ang4', 'lastAppliedComp', 'capturedInfo',
|
|
3608
3701
|
],
|
|
3609
3702
|
'enum': [
|
|
3610
3703
|
'textGridding', 'Ornt', 'warpStyle', 'warpRotate', 'Inte', 'Bltn', 'ClrS', 'BlrQ',
|
|
@@ -3649,7 +3742,7 @@ var typeToField = {
|
|
|
3649
3742
|
'sheetTimelineOptions', 'audioClipList', 'trackList', 'globalTrackList', 'keyList', 'audioClipList',
|
|
3650
3743
|
'warpValues', 'selectedPin', 'Pts ', 'SbpL', 'pathComponents', 'pinOffsets', 'posFinalPins',
|
|
3651
3744
|
'pinVertexIndices', 'PinP', 'PnRt', 'PnOv', 'PnDp', 'filterFXList', 'puppetShapeList', 'ShrP',
|
|
3652
|
-
'channelDenoise', 'Mtrx',
|
|
3745
|
+
'channelDenoise', 'Mtrx', 'layerSettings', 'list', 'compList',
|
|
3653
3746
|
],
|
|
3654
3747
|
'ObAr': ['meshPoints', 'quiltSliceX', 'quiltSliceY'],
|
|
3655
3748
|
'obj ': ['null', 'Chnl'],
|
|
@@ -3695,6 +3788,7 @@ var fieldToArrayType = {
|
|
|
3695
3788
|
ShrP: 'Objc',
|
|
3696
3789
|
channelDenoise: 'Objc',
|
|
3697
3790
|
Mtrx: 'long',
|
|
3791
|
+
compList: 'long',
|
|
3698
3792
|
};
|
|
3699
3793
|
var fieldToType = {};
|
|
3700
3794
|
for (var _i = 0, _a = Object.keys(typeToField); _i < _a.length; _i++) {
|
|
@@ -3756,7 +3850,7 @@ function readAsciiStringOrClassId(reader) {
|
|
|
3756
3850
|
}
|
|
3757
3851
|
exports.readAsciiStringOrClassId = readAsciiStringOrClassId;
|
|
3758
3852
|
function writeAsciiStringOrClassId(writer, value) {
|
|
3759
|
-
if (value.length === 4 && value !== 'warp' && value !== 'time' && value !== 'hold') {
|
|
3853
|
+
if (value.length === 4 && value !== 'warp' && value !== 'time' && value !== 'hold' && value !== 'list') {
|
|
3760
3854
|
// write classId
|
|
3761
3855
|
(0, psdWriter_1.writeInt32)(writer, 0);
|
|
3762
3856
|
(0, psdWriter_1.writeSignature)(writer, value);
|
|
@@ -3913,9 +4007,9 @@ function readOSType(reader, type, includeClass) {
|
|
|
3913
4007
|
var length_1 = (0, psdReader_1.readInt32)(reader);
|
|
3914
4008
|
var items = [];
|
|
3915
4009
|
for (var i = 0; i < length_1; i++) {
|
|
3916
|
-
var
|
|
3917
|
-
// console.log(' >',
|
|
3918
|
-
items.push(readOSType(reader,
|
|
4010
|
+
var itemType = (0, psdReader_1.readSignature)(reader);
|
|
4011
|
+
// console.log(' >', itemType);
|
|
4012
|
+
items.push(readOSType(reader, itemType, includeClass));
|
|
3919
4013
|
}
|
|
3920
4014
|
return items;
|
|
3921
4015
|
}
|
|
@@ -3938,9 +4032,9 @@ function readOSType(reader, type, includeClass) {
|
|
|
3938
4032
|
case 'TEXT': // String
|
|
3939
4033
|
return (0, psdReader_1.readUnicodeString)(reader);
|
|
3940
4034
|
case 'enum': { // Enumerated
|
|
3941
|
-
var
|
|
4035
|
+
var enumType = readAsciiStringOrClassId(reader);
|
|
3942
4036
|
var value = readAsciiStringOrClassId(reader);
|
|
3943
|
-
return "".concat(
|
|
4037
|
+
return "".concat(enumType, ".").concat(value);
|
|
3944
4038
|
}
|
|
3945
4039
|
case 'long': // Integer
|
|
3946
4040
|
return (0, psdReader_1.readInt32)(reader);
|
|
@@ -4019,10 +4113,10 @@ function writeOSType(writer, type, value, key, extType, root) {
|
|
|
4019
4113
|
throw new Error("Invalid list value: ".concat(JSON.stringify(value), ", key: ").concat(key));
|
|
4020
4114
|
(0, psdWriter_1.writeInt32)(writer, value.length);
|
|
4021
4115
|
for (var i = 0; i < value.length; i++) {
|
|
4022
|
-
var
|
|
4023
|
-
(0, psdWriter_1.writeSignature)(writer,
|
|
4024
|
-
writeOSType(writer,
|
|
4025
|
-
if (logErrors && !
|
|
4116
|
+
var type_1 = fieldToArrayType[key];
|
|
4117
|
+
(0, psdWriter_1.writeSignature)(writer, type_1 || 'long');
|
|
4118
|
+
writeOSType(writer, type_1 || 'long', value[i], "".concat(key, "[]"), fieldToArrayExtType[key], root);
|
|
4119
|
+
if (logErrors && !type_1)
|
|
4026
4120
|
console.log("Missing descriptor array type for: '".concat(key, "' in"), value);
|
|
4027
4121
|
}
|
|
4028
4122
|
break;
|
|
@@ -4078,10 +4172,10 @@ function writeOSType(writer, type, value, key, extType, root) {
|
|
|
4078
4172
|
case 'ObAr': { // Object array
|
|
4079
4173
|
(0, psdWriter_1.writeInt32)(writer, 16); // version
|
|
4080
4174
|
(0, psdWriter_1.writeUnicodeStringWithPadding)(writer, ''); // name
|
|
4081
|
-
var
|
|
4082
|
-
if (!
|
|
4175
|
+
var type_2 = ObArTypes[key];
|
|
4176
|
+
if (!type_2)
|
|
4083
4177
|
throw new Error("Not implemented ObArType for: ".concat(key));
|
|
4084
|
-
writeAsciiStringOrClassId(writer,
|
|
4178
|
+
writeAsciiStringOrClassId(writer, type_2);
|
|
4085
4179
|
(0, psdWriter_1.writeInt32)(writer, value.length);
|
|
4086
4180
|
for (var i = 0; i < value.length; i++) {
|
|
4087
4181
|
writeAsciiStringOrClassId(writer, value[i].type); // Hrzn | Vrtc
|
|
@@ -6063,7 +6157,7 @@ exports.serializeEngineData = serializeEngineData;
|
|
|
6063
6157
|
},{}],7:[function(require,module,exports){
|
|
6064
6158
|
"use strict";
|
|
6065
6159
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6066
|
-
exports.initializeCanvas = exports.createImageData = exports.createCanvasFromData = exports.createCanvas = exports.writeDataZipWithoutPrediction = exports.writeDataRLE = exports.writeDataRaw = exports.decodeBitmap = exports.resetImageData = exports.hasAlpha = exports.clamp = exports.offsetForChannel = exports.Compression = exports.ChannelID = exports.MaskParams = exports.LayerMaskFlags = exports.ColorSpace = exports.createEnum = exports.revMap = exports.largeAdditionalInfoKeys = exports.layerColors = exports.toBlendMode = exports.fromBlendMode = exports.RAW_IMAGE_DATA = exports.MOCK_HANDLERS = void 0;
|
|
6160
|
+
exports.initializeCanvas = exports.createImageData = exports.createCanvasFromData = exports.createCanvas = exports.writeDataZipWithoutPrediction = exports.writeDataRLE = exports.writeDataRaw = exports.decodeBitmap = exports.imageDataToCanvas = exports.resetImageData = exports.hasAlpha = exports.clamp = exports.offsetForChannel = exports.Compression = exports.ChannelID = exports.MaskParams = exports.LayerMaskFlags = exports.ColorSpace = exports.createEnum = exports.revMap = exports.largeAdditionalInfoKeys = exports.layerColors = exports.toBlendMode = exports.fromBlendMode = exports.RAW_IMAGE_DATA = exports.MOCK_HANDLERS = void 0;
|
|
6067
6161
|
var base64_js_1 = require("base64-js");
|
|
6068
6162
|
var pako_1 = require("pako");
|
|
6069
6163
|
exports.MOCK_HANDLERS = false;
|
|
@@ -6198,24 +6292,47 @@ function hasAlpha(data) {
|
|
|
6198
6292
|
exports.hasAlpha = hasAlpha;
|
|
6199
6293
|
function resetImageData(_a) {
|
|
6200
6294
|
var data = _a.data;
|
|
6201
|
-
var
|
|
6202
|
-
var size =
|
|
6203
|
-
|
|
6204
|
-
|
|
6295
|
+
var alpha = (data instanceof Uint32Array) ? (0xffffffff >>> 0) : ((data instanceof Uint16Array) ? 0xffff : 0xff);
|
|
6296
|
+
for (var p = 0, size = data.length | 0; p < size; p = (p + 4) | 0) {
|
|
6297
|
+
data[p + 0] = 0;
|
|
6298
|
+
data[p + 1] = 0;
|
|
6299
|
+
data[p + 2] = 0;
|
|
6300
|
+
data[p + 3] = alpha;
|
|
6205
6301
|
}
|
|
6206
6302
|
}
|
|
6207
6303
|
exports.resetImageData = resetImageData;
|
|
6304
|
+
function imageDataToCanvas(pixelData) {
|
|
6305
|
+
var canvas = (0, exports.createCanvas)(pixelData.width, pixelData.height);
|
|
6306
|
+
var imageData;
|
|
6307
|
+
if (pixelData.data instanceof Uint8ClampedArray) {
|
|
6308
|
+
imageData = pixelData;
|
|
6309
|
+
}
|
|
6310
|
+
else {
|
|
6311
|
+
imageData = (0, exports.createImageData)(pixelData.width, pixelData.height);
|
|
6312
|
+
var src = pixelData.data;
|
|
6313
|
+
var dst = imageData.data;
|
|
6314
|
+
var shift = (src instanceof Uint32Array) ? 24 : ((src instanceof Uint16Array) ? 8 : 0);
|
|
6315
|
+
for (var i = 0, size = src.length; i < size; i++) {
|
|
6316
|
+
dst[i] = src[i] >>> shift;
|
|
6317
|
+
}
|
|
6318
|
+
}
|
|
6319
|
+
canvas.getContext('2d').putImageData(imageData, 0, 0);
|
|
6320
|
+
return canvas;
|
|
6321
|
+
}
|
|
6322
|
+
exports.imageDataToCanvas = imageDataToCanvas;
|
|
6208
6323
|
function decodeBitmap(input, output, width, height) {
|
|
6324
|
+
if (input instanceof Uint32Array || input instanceof Uint16Array)
|
|
6325
|
+
throw new Error('Invalid bit depth');
|
|
6209
6326
|
for (var y = 0, p = 0, o = 0; y < height; y++) {
|
|
6210
6327
|
for (var x = 0; x < width;) {
|
|
6211
6328
|
var b = input[o++];
|
|
6212
|
-
for (var i = 0; i < 8 && x < width; i++, x
|
|
6329
|
+
for (var i = 0; i < 8 && x < width; i++, x++, p += 4) {
|
|
6213
6330
|
var v = b & 0x80 ? 0 : 255;
|
|
6214
6331
|
b = b << 1;
|
|
6215
|
-
output[p
|
|
6216
|
-
output[p
|
|
6217
|
-
output[p
|
|
6218
|
-
output[p
|
|
6332
|
+
output[p + 0] = v;
|
|
6333
|
+
output[p + 1] = v;
|
|
6334
|
+
output[p + 2] = v;
|
|
6335
|
+
output[p + 3] = 255;
|
|
6219
6336
|
}
|
|
6220
6337
|
}
|
|
6221
6338
|
}
|
|
@@ -6767,6 +6884,43 @@ addHandler(1032, function (target) { return target.gridAndGuidesInformation !==
|
|
|
6767
6884
|
(0, psdWriter_1.writeUint8)(writer, g.direction === 'horizontal' ? 1 : 0);
|
|
6768
6885
|
}
|
|
6769
6886
|
});
|
|
6887
|
+
addHandler(1065, // Layer Comps
|
|
6888
|
+
function (// Layer Comps
|
|
6889
|
+
target) { return target.layerComps !== undefined; }, function (reader, target) {
|
|
6890
|
+
var desc = (0, descriptor_1.readVersionAndDescriptor)(reader, true);
|
|
6891
|
+
// console.log('CompList', require('util').inspect(desc, false, 99, true));
|
|
6892
|
+
target.layerComps = { list: [] };
|
|
6893
|
+
for (var _i = 0, _a = desc.list; _i < _a.length; _i++) {
|
|
6894
|
+
var item = _a[_i];
|
|
6895
|
+
target.layerComps.list.push({
|
|
6896
|
+
id: item.compID,
|
|
6897
|
+
name: item['Nm '],
|
|
6898
|
+
capturedInfo: item.capturedInfo,
|
|
6899
|
+
});
|
|
6900
|
+
if ('comment' in item)
|
|
6901
|
+
target.layerComps.list[target.layerComps.list.length - 1].comment = item.comment;
|
|
6902
|
+
}
|
|
6903
|
+
if ('lastAppliedComp' in desc)
|
|
6904
|
+
target.layerComps.lastApplied = desc.lastAppliedComp;
|
|
6905
|
+
}, function (writer, target) {
|
|
6906
|
+
var layerComps = target.layerComps;
|
|
6907
|
+
var desc = { list: [] };
|
|
6908
|
+
for (var _i = 0, _a = layerComps.list; _i < _a.length; _i++) {
|
|
6909
|
+
var item = _a[_i];
|
|
6910
|
+
var t = {};
|
|
6911
|
+
t._classID = 'Comp';
|
|
6912
|
+
t['Nm '] = item.name;
|
|
6913
|
+
if ('comment' in item)
|
|
6914
|
+
t.comment = item.comment;
|
|
6915
|
+
t.compID = item.id;
|
|
6916
|
+
t.capturedInfo = item.capturedInfo;
|
|
6917
|
+
desc.list.push(t);
|
|
6918
|
+
}
|
|
6919
|
+
if ('lastApplied' in layerComps)
|
|
6920
|
+
desc.lastAppliedComp = layerComps.lastApplied;
|
|
6921
|
+
// console.log('CompList', require('util').inspect(desc, false, 99, true));
|
|
6922
|
+
(0, descriptor_1.writeVersionAndDescriptor)(writer, '', 'CompList', desc);
|
|
6923
|
+
});
|
|
6770
6924
|
helpers_1.MOCK_HANDLERS && addHandler(1092, // ???
|
|
6771
6925
|
function (// ???
|
|
6772
6926
|
target) { return target._ir1092 !== undefined; }, function (reader, target, left) {
|
|
@@ -7461,7 +7615,7 @@ exports.writePsdBuffer = writePsdBuffer;
|
|
|
7461
7615
|
},{"./abr":1,"./csh":3,"./helpers":7,"./psd":10,"./psdReader":11,"./psdWriter":12,"base64-js":15,"buffer":16}],10:[function(require,module,exports){
|
|
7462
7616
|
"use strict";
|
|
7463
7617
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7464
|
-
exports.SectionDividerType = exports.ColorMode = void 0;
|
|
7618
|
+
exports.LayerCompCapturedInfo = exports.SectionDividerType = exports.ColorMode = void 0;
|
|
7465
7619
|
var ColorMode;
|
|
7466
7620
|
(function (ColorMode) {
|
|
7467
7621
|
ColorMode[ColorMode["Bitmap"] = 0] = "Bitmap";
|
|
@@ -7480,6 +7634,13 @@ var SectionDividerType;
|
|
|
7480
7634
|
SectionDividerType[SectionDividerType["ClosedFolder"] = 2] = "ClosedFolder";
|
|
7481
7635
|
SectionDividerType[SectionDividerType["BoundingSectionDivider"] = 3] = "BoundingSectionDivider";
|
|
7482
7636
|
})(SectionDividerType = exports.SectionDividerType || (exports.SectionDividerType = {}));
|
|
7637
|
+
var LayerCompCapturedInfo;
|
|
7638
|
+
(function (LayerCompCapturedInfo) {
|
|
7639
|
+
LayerCompCapturedInfo[LayerCompCapturedInfo["None"] = 0] = "None";
|
|
7640
|
+
LayerCompCapturedInfo[LayerCompCapturedInfo["Visibility"] = 1] = "Visibility";
|
|
7641
|
+
LayerCompCapturedInfo[LayerCompCapturedInfo["Position"] = 2] = "Position";
|
|
7642
|
+
LayerCompCapturedInfo[LayerCompCapturedInfo["Appearance"] = 4] = "Appearance";
|
|
7643
|
+
})(LayerCompCapturedInfo = exports.LayerCompCapturedInfo || (exports.LayerCompCapturedInfo = {}));
|
|
7483
7644
|
|
|
7484
7645
|
},{}],11:[function(require,module,exports){
|
|
7485
7646
|
"use strict";
|
|
@@ -7495,7 +7656,7 @@ var __assign = (this && this.__assign) || function () {
|
|
|
7495
7656
|
return __assign.apply(this, arguments);
|
|
7496
7657
|
};
|
|
7497
7658
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7498
|
-
exports.readPattern = exports.readColor = exports.readSection = exports.readDataRLE = exports.
|
|
7659
|
+
exports.readPattern = exports.readColor = exports.readSection = exports.readDataRLE = exports.readDataZip = exports.readAdditionalLayerInfo = exports.readGlobalLayerMaskInfo = exports.readLayerInfo = exports.readPsd = exports.checkSignature = exports.skipBytes = exports.readAsciiString = exports.readUnicodeStringWithLengthLE = exports.readUnicodeStringWithLength = exports.readUnicodeString = exports.readPascalString = exports.readSignature = exports.readBytes = exports.readFixedPointPath32 = exports.readFixedPoint32 = exports.readFloat64 = exports.readFloat32 = exports.readUint32 = exports.readInt32LE = exports.readInt32 = exports.readUint16LE = exports.readUint16 = exports.readInt16 = exports.peekUint8 = exports.readUint8 = exports.warnOrThrow = exports.createReader = exports.supportedColorModes = void 0;
|
|
7499
7660
|
var pako_1 = require("pako");
|
|
7500
7661
|
var helpers_1 = require("./helpers");
|
|
7501
7662
|
var additionalInfo_1 = require("./additionalInfo");
|
|
@@ -7670,9 +7831,9 @@ function readShortString(reader, length) {
|
|
|
7670
7831
|
function isValidSignature(sig) {
|
|
7671
7832
|
return sig === '8BIM' || sig === 'MeSa' || sig === 'AgHg' || sig === 'PHUT' || sig === 'DCSR';
|
|
7672
7833
|
}
|
|
7673
|
-
function readPsd(reader,
|
|
7834
|
+
function readPsd(reader, readOptions) {
|
|
7674
7835
|
var _a;
|
|
7675
|
-
if (
|
|
7836
|
+
if (readOptions === void 0) { readOptions = {}; }
|
|
7676
7837
|
// header
|
|
7677
7838
|
checkSignature(reader, '8BPS');
|
|
7678
7839
|
var version = readUint16(reader);
|
|
@@ -7686,19 +7847,19 @@ function readPsd(reader, options) {
|
|
|
7686
7847
|
var colorMode = readUint16(reader);
|
|
7687
7848
|
var maxSize = version === 1 ? 30000 : 300000;
|
|
7688
7849
|
if (width > maxSize || height > maxSize)
|
|
7689
|
-
throw new Error("Invalid size");
|
|
7850
|
+
throw new Error("Invalid size: ".concat(width, "x").concat(height));
|
|
7690
7851
|
if (channels > 16)
|
|
7691
|
-
throw new Error("Invalid channel count");
|
|
7692
|
-
if (
|
|
7693
|
-
throw new Error("Invalid bitsPerChannel
|
|
7852
|
+
throw new Error("Invalid channel count: ".concat(channels));
|
|
7853
|
+
if (![1, 8, 16, 32].includes(bitsPerChannel))
|
|
7854
|
+
throw new Error("Invalid bitsPerChannel: ".concat(bitsPerChannel));
|
|
7694
7855
|
if (exports.supportedColorModes.indexOf(colorMode) === -1)
|
|
7695
7856
|
throw new Error("Color mode not supported: ".concat((_a = colorModes[colorMode]) !== null && _a !== void 0 ? _a : colorMode));
|
|
7696
7857
|
var psd = { width: width, height: height, channels: channels, bitsPerChannel: bitsPerChannel, colorMode: colorMode };
|
|
7697
|
-
var
|
|
7858
|
+
var options = __assign(__assign({}, readOptions), { large: version === 2, globalAlpha: false });
|
|
7698
7859
|
var fixOffsets = [0, 1, -1, 2, -2, 3, -3, 4, -4];
|
|
7699
7860
|
// color mode data
|
|
7700
7861
|
readSection(reader, 1, function (left) {
|
|
7701
|
-
if (
|
|
7862
|
+
if (options.throwForMissingFeatures)
|
|
7702
7863
|
throw new Error('Color mode data not supported');
|
|
7703
7864
|
skipBytes(reader, left());
|
|
7704
7865
|
});
|
|
@@ -7725,22 +7886,22 @@ function readPsd(reader, options) {
|
|
|
7725
7886
|
readPascalString(reader, 2); // name
|
|
7726
7887
|
readSection(reader, 2, function (left) {
|
|
7727
7888
|
var handler = imageResources_1.resourceHandlersMap[id];
|
|
7728
|
-
var skip = id === 1036 && !!
|
|
7889
|
+
var skip = id === 1036 && !!options.skipThumbnail;
|
|
7729
7890
|
if (!psd.imageResources) {
|
|
7730
7891
|
psd.imageResources = {};
|
|
7731
7892
|
}
|
|
7732
7893
|
if (handler && !skip) {
|
|
7733
7894
|
try {
|
|
7734
|
-
handler.read(reader, psd.imageResources, left,
|
|
7895
|
+
handler.read(reader, psd.imageResources, left, options);
|
|
7735
7896
|
}
|
|
7736
7897
|
catch (e) {
|
|
7737
|
-
if (
|
|
7898
|
+
if (options.throwForMissingFeatures)
|
|
7738
7899
|
throw e;
|
|
7739
7900
|
skipBytes(reader, left());
|
|
7740
7901
|
}
|
|
7741
7902
|
}
|
|
7742
7903
|
else {
|
|
7743
|
-
// options.logMissingFeatures && console.log(`Unhandled image resource: ${id}`);
|
|
7904
|
+
// options.logMissingFeatures && console.log(`Unhandled image resource: ${id} (${left()})`);
|
|
7744
7905
|
skipBytes(reader, left());
|
|
7745
7906
|
}
|
|
7746
7907
|
});
|
|
@@ -7750,9 +7911,11 @@ function readPsd(reader, options) {
|
|
|
7750
7911
|
}
|
|
7751
7912
|
});
|
|
7752
7913
|
// layer and mask info
|
|
7753
|
-
var globalAlpha = false;
|
|
7754
7914
|
readSection(reader, 1, function (left) {
|
|
7755
|
-
|
|
7915
|
+
readSection(reader, 2, function (left) {
|
|
7916
|
+
readLayerInfo(reader, psd, options);
|
|
7917
|
+
skipBytes(reader, left());
|
|
7918
|
+
}, undefined, options.large);
|
|
7756
7919
|
// SAI does not include this section
|
|
7757
7920
|
if (left() > 0) {
|
|
7758
7921
|
var globalLayerMaskInfo = readGlobalLayerMaskInfo(reader);
|
|
@@ -7771,18 +7934,18 @@ function readPsd(reader, options) {
|
|
|
7771
7934
|
skipBytes(reader, 1);
|
|
7772
7935
|
}
|
|
7773
7936
|
if (left() >= 12) {
|
|
7774
|
-
readAdditionalLayerInfo(reader, psd, psd,
|
|
7937
|
+
readAdditionalLayerInfo(reader, psd, psd, options);
|
|
7775
7938
|
}
|
|
7776
7939
|
else {
|
|
7777
7940
|
// opt.logMissingFeatures && console.log('skipping leftover bytes', left());
|
|
7778
7941
|
skipBytes(reader, left());
|
|
7779
7942
|
}
|
|
7780
7943
|
}
|
|
7781
|
-
}, undefined,
|
|
7944
|
+
}, undefined, options.large);
|
|
7782
7945
|
var hasChildren = psd.children && psd.children.length;
|
|
7783
|
-
var skipComposite =
|
|
7946
|
+
var skipComposite = options.skipCompositeImageData && (options.skipLayerImageData || hasChildren);
|
|
7784
7947
|
if (!skipComposite) {
|
|
7785
|
-
readImageData(reader, psd,
|
|
7948
|
+
readImageData(reader, psd, options);
|
|
7786
7949
|
}
|
|
7787
7950
|
// TODO: show converted color mode instead of original PSD file color mode
|
|
7788
7951
|
// but add option to preserve file color mode (need to return image data instead of canvas in that case)
|
|
@@ -7791,52 +7954,48 @@ function readPsd(reader, options) {
|
|
|
7791
7954
|
}
|
|
7792
7955
|
exports.readPsd = readPsd;
|
|
7793
7956
|
function readLayerInfo(reader, psd, options) {
|
|
7794
|
-
var
|
|
7795
|
-
|
|
7796
|
-
|
|
7797
|
-
|
|
7798
|
-
|
|
7799
|
-
|
|
7800
|
-
|
|
7801
|
-
|
|
7802
|
-
var
|
|
7957
|
+
var layerCount = readInt16(reader);
|
|
7958
|
+
if (layerCount < 0) {
|
|
7959
|
+
options.globalAlpha = true;
|
|
7960
|
+
layerCount = -layerCount;
|
|
7961
|
+
}
|
|
7962
|
+
var layers = [];
|
|
7963
|
+
var layerChannels = [];
|
|
7964
|
+
for (var i = 0; i < layerCount; i++) {
|
|
7965
|
+
var _a = readLayerRecord(reader, psd, options), layer = _a.layer, channels = _a.channels;
|
|
7966
|
+
layers.push(layer);
|
|
7967
|
+
layerChannels.push(channels);
|
|
7968
|
+
}
|
|
7969
|
+
if (!options.skipLayerImageData) {
|
|
7803
7970
|
for (var i = 0; i < layerCount; i++) {
|
|
7804
|
-
|
|
7805
|
-
layers.push(layer);
|
|
7806
|
-
layerChannels.push(channels);
|
|
7971
|
+
readLayerChannelImageData(reader, psd, layers[i], layerChannels[i], options);
|
|
7807
7972
|
}
|
|
7808
|
-
|
|
7809
|
-
|
|
7810
|
-
|
|
7811
|
-
|
|
7973
|
+
}
|
|
7974
|
+
if (!psd.children)
|
|
7975
|
+
psd.children = [];
|
|
7976
|
+
var stack = [psd];
|
|
7977
|
+
for (var i = layers.length - 1; i >= 0; i--) {
|
|
7978
|
+
var l = layers[i];
|
|
7979
|
+
var type = l.sectionDivider ? l.sectionDivider.type : 0 /* SectionDividerType.Other */;
|
|
7980
|
+
if (type === 1 /* SectionDividerType.OpenFolder */ || type === 2 /* SectionDividerType.ClosedFolder */) {
|
|
7981
|
+
l.opened = type === 1 /* SectionDividerType.OpenFolder */;
|
|
7982
|
+
l.children = [];
|
|
7983
|
+
stack[stack.length - 1].children.unshift(l);
|
|
7984
|
+
stack.push(l);
|
|
7812
7985
|
}
|
|
7813
|
-
|
|
7814
|
-
|
|
7815
|
-
|
|
7816
|
-
|
|
7817
|
-
|
|
7818
|
-
|
|
7819
|
-
var type = l.sectionDivider ? l.sectionDivider.type : 0 /* SectionDividerType.Other */;
|
|
7820
|
-
if (type === 1 /* SectionDividerType.OpenFolder */ || type === 2 /* SectionDividerType.ClosedFolder */) {
|
|
7821
|
-
l.opened = type === 1 /* SectionDividerType.OpenFolder */;
|
|
7822
|
-
l.children = [];
|
|
7823
|
-
stack[stack.length - 1].children.unshift(l);
|
|
7824
|
-
stack.push(l);
|
|
7825
|
-
}
|
|
7826
|
-
else if (type === 3 /* SectionDividerType.BoundingSectionDivider */) {
|
|
7827
|
-
stack.pop();
|
|
7828
|
-
// this was workaround because I didn't know what `lsdk` section was, now it's probably not needed anymore
|
|
7829
|
-
// } else if (l.name === '</Layer group>' && !l.sectionDivider && !l.top && !l.left && !l.bottom && !l.right) {
|
|
7830
|
-
// // sometimes layer group terminator doesn't have sectionDivider, so we just guess here (PS bug ?)
|
|
7831
|
-
// stack.pop();
|
|
7832
|
-
}
|
|
7833
|
-
else {
|
|
7834
|
-
stack[stack.length - 1].children.unshift(l);
|
|
7835
|
-
}
|
|
7986
|
+
else if (type === 3 /* SectionDividerType.BoundingSectionDivider */) {
|
|
7987
|
+
stack.pop();
|
|
7988
|
+
// this was workaround because I didn't know what `lsdk` section was, now it's probably not needed anymore
|
|
7989
|
+
// } else if (l.name === '</Layer group>' && !l.sectionDivider && !l.top && !l.left && !l.bottom && !l.right) {
|
|
7990
|
+
// // sometimes layer group terminator doesn't have sectionDivider, so we just guess here (PS bug ?)
|
|
7991
|
+
// stack.pop();
|
|
7836
7992
|
}
|
|
7837
|
-
|
|
7838
|
-
|
|
7993
|
+
else {
|
|
7994
|
+
stack[stack.length - 1].children.unshift(l);
|
|
7995
|
+
}
|
|
7996
|
+
}
|
|
7839
7997
|
}
|
|
7998
|
+
exports.readLayerInfo = readLayerInfo;
|
|
7840
7999
|
function readLayerRecord(reader, psd, options) {
|
|
7841
8000
|
var layer = {};
|
|
7842
8001
|
layer.top = readInt32(reader);
|
|
@@ -7937,18 +8096,21 @@ function readLayerBlendingRanges(reader) {
|
|
|
7937
8096
|
});
|
|
7938
8097
|
}
|
|
7939
8098
|
function readLayerChannelImageData(reader, psd, layer, channels, options) {
|
|
8099
|
+
var _a, _b, _c, _d;
|
|
7940
8100
|
var layerWidth = (layer.right || 0) - (layer.left || 0);
|
|
7941
8101
|
var layerHeight = (layer.bottom || 0) - (layer.top || 0);
|
|
7942
8102
|
var cmyk = psd.colorMode === 4 /* ColorMode.CMYK */;
|
|
7943
8103
|
var imageData;
|
|
7944
8104
|
if (layerWidth && layerHeight) {
|
|
7945
8105
|
if (cmyk) {
|
|
8106
|
+
if (psd.bitsPerChannel !== 8)
|
|
8107
|
+
throw new Error('bitsPerChannel Not supproted');
|
|
7946
8108
|
imageData = { width: layerWidth, height: layerHeight, data: new Uint8ClampedArray(layerWidth * layerHeight * 5) };
|
|
7947
8109
|
for (var p = 4; p < imageData.data.byteLength; p += 5)
|
|
7948
8110
|
imageData.data[p] = 255;
|
|
7949
8111
|
}
|
|
7950
8112
|
else {
|
|
7951
|
-
imageData = (
|
|
8113
|
+
imageData = createImageDataBitDepth(layerWidth, layerHeight, (_a = psd.bitsPerChannel) !== null && _a !== void 0 ? _a : 8);
|
|
7952
8114
|
(0, helpers_1.resetImageData)(imageData);
|
|
7953
8115
|
}
|
|
7954
8116
|
}
|
|
@@ -7981,10 +8143,10 @@ function readLayerChannelImageData(reader, psd, layer, channels, options) {
|
|
|
7981
8143
|
var maskWidth = (mask.right || 0) - (mask.left || 0);
|
|
7982
8144
|
var maskHeight = (mask.bottom || 0) - (mask.top || 0);
|
|
7983
8145
|
if (maskWidth && maskHeight) {
|
|
7984
|
-
var maskData = (
|
|
8146
|
+
var maskData = createImageDataBitDepth(maskWidth, maskHeight, (_b = psd.bitsPerChannel) !== null && _b !== void 0 ? _b : 8);
|
|
7985
8147
|
(0, helpers_1.resetImageData)(maskData);
|
|
7986
8148
|
var start_1 = reader.offset;
|
|
7987
|
-
readData(reader, channel.length, maskData, compression, maskWidth, maskHeight, 0, options.large, 4);
|
|
8149
|
+
readData(reader, channel.length, maskData, compression, maskWidth, maskHeight, (_c = psd.bitsPerChannel) !== null && _c !== void 0 ? _c : 8, 0, options.large, 4);
|
|
7988
8150
|
if (helpers_1.RAW_IMAGE_DATA) {
|
|
7989
8151
|
layer.maskDataRaw = new Uint8Array(reader.view.buffer, reader.view.byteOffset + start_1, reader.offset - start_1);
|
|
7990
8152
|
}
|
|
@@ -7993,8 +8155,7 @@ function readLayerChannelImageData(reader, psd, layer, channels, options) {
|
|
|
7993
8155
|
mask.imageData = maskData;
|
|
7994
8156
|
}
|
|
7995
8157
|
else {
|
|
7996
|
-
mask.canvas = (0, helpers_1.
|
|
7997
|
-
mask.canvas.getContext('2d').putImageData(maskData, 0, 0);
|
|
8158
|
+
mask.canvas = (0, helpers_1.imageDataToCanvas)(maskData);
|
|
7998
8159
|
}
|
|
7999
8160
|
}
|
|
8000
8161
|
}
|
|
@@ -8007,7 +8168,7 @@ function readLayerChannelImageData(reader, psd, layer, channels, options) {
|
|
|
8007
8168
|
throw new Error("Channel not supported: ".concat(channel.id));
|
|
8008
8169
|
}
|
|
8009
8170
|
}
|
|
8010
|
-
readData(reader, channel.length, targetData, compression, layerWidth, layerHeight, offset, options.large, cmyk ? 5 : 4);
|
|
8171
|
+
readData(reader, channel.length, targetData, compression, layerWidth, layerHeight, (_d = psd.bitsPerChannel) !== null && _d !== void 0 ? _d : 8, offset, options.large, cmyk ? 5 : 4);
|
|
8011
8172
|
if (helpers_1.RAW_IMAGE_DATA) {
|
|
8012
8173
|
layer.imageDataRaw[channel.id] = new Uint8Array(reader.view.buffer, reader.view.byteOffset + start + 2, channel.length - 2);
|
|
8013
8174
|
}
|
|
@@ -8027,23 +8188,22 @@ function readLayerChannelImageData(reader, psd, layer, channels, options) {
|
|
|
8027
8188
|
layer.imageData = imageData;
|
|
8028
8189
|
}
|
|
8029
8190
|
else {
|
|
8030
|
-
layer.canvas = (0, helpers_1.
|
|
8031
|
-
layer.canvas.getContext('2d').putImageData(imageData, 0, 0);
|
|
8191
|
+
layer.canvas = (0, helpers_1.imageDataToCanvas)(imageData);
|
|
8032
8192
|
}
|
|
8033
8193
|
}
|
|
8034
8194
|
}
|
|
8035
|
-
function readData(reader, length, data, compression, width, height, offset, large, step) {
|
|
8195
|
+
function readData(reader, length, data, compression, width, height, bitDepth, offset, large, step) {
|
|
8036
8196
|
if (compression === 0 /* Compression.RawData */) {
|
|
8037
|
-
readDataRaw(reader, data, width, height, step, offset);
|
|
8197
|
+
readDataRaw(reader, data, width, height, bitDepth, step, offset);
|
|
8038
8198
|
}
|
|
8039
8199
|
else if (compression === 1 /* Compression.RleCompressed */) {
|
|
8040
|
-
readDataRLE(reader, data, width, height, step, [offset], large);
|
|
8200
|
+
readDataRLE(reader, data, width, height, bitDepth, step, [offset], large);
|
|
8041
8201
|
}
|
|
8042
8202
|
else if (compression === 2 /* Compression.ZipWithoutPrediction */) {
|
|
8043
|
-
|
|
8203
|
+
readDataZip(reader, length, data, width, height, bitDepth, step, offset, false);
|
|
8044
8204
|
}
|
|
8045
8205
|
else if (compression === 3 /* Compression.ZipWithPrediction */) {
|
|
8046
|
-
|
|
8206
|
+
readDataZip(reader, length, data, width, height, bitDepth, step, offset, true);
|
|
8047
8207
|
}
|
|
8048
8208
|
else {
|
|
8049
8209
|
throw new Error("Invalid Compression type: ".concat(compression));
|
|
@@ -8064,6 +8224,7 @@ function readGlobalLayerMaskInfo(reader) {
|
|
|
8064
8224
|
return { overlayColorSpace: overlayColorSpace, colorSpace1: colorSpace1, colorSpace2: colorSpace2, colorSpace3: colorSpace3, colorSpace4: colorSpace4, opacity: opacity, kind: kind };
|
|
8065
8225
|
});
|
|
8066
8226
|
}
|
|
8227
|
+
exports.readGlobalLayerMaskInfo = readGlobalLayerMaskInfo;
|
|
8067
8228
|
function readAdditionalLayerInfo(reader, target, psd, options) {
|
|
8068
8229
|
var sig = readSignature(reader);
|
|
8069
8230
|
if (sig !== '8BIM' && sig !== '8B64')
|
|
@@ -8092,13 +8253,30 @@ function readAdditionalLayerInfo(reader, target, psd, options) {
|
|
|
8092
8253
|
}
|
|
8093
8254
|
}, false, u64);
|
|
8094
8255
|
}
|
|
8095
|
-
|
|
8256
|
+
exports.readAdditionalLayerInfo = readAdditionalLayerInfo;
|
|
8257
|
+
function createImageDataBitDepth(width, height, bitDepth) {
|
|
8258
|
+
if (bitDepth === 1 || bitDepth === 8) {
|
|
8259
|
+
return (0, helpers_1.createImageData)(width, height);
|
|
8260
|
+
}
|
|
8261
|
+
else if (bitDepth === 16) {
|
|
8262
|
+
return { width: width, height: height, data: new Uint16Array(width * height * 4) };
|
|
8263
|
+
}
|
|
8264
|
+
else if (bitDepth === 32) {
|
|
8265
|
+
return { width: width, height: height, data: new Uint32Array(width * height * 4) };
|
|
8266
|
+
}
|
|
8267
|
+
else {
|
|
8268
|
+
throw new Error("Invalid bitDepth (".concat(bitDepth, ")"));
|
|
8269
|
+
}
|
|
8270
|
+
}
|
|
8271
|
+
function readImageData(reader, psd, options) {
|
|
8272
|
+
var _a, _b;
|
|
8096
8273
|
var compression = readUint16(reader);
|
|
8274
|
+
var bitsPerChannel = (_a = psd.bitsPerChannel) !== null && _a !== void 0 ? _a : 8;
|
|
8097
8275
|
if (exports.supportedColorModes.indexOf(psd.colorMode) === -1)
|
|
8098
8276
|
throw new Error("Color mode not supported: ".concat(psd.colorMode));
|
|
8099
8277
|
if (compression !== 0 /* Compression.RawData */ && compression !== 1 /* Compression.RleCompressed */)
|
|
8100
8278
|
throw new Error("Compression type not supported: ".concat(compression));
|
|
8101
|
-
var imageData = (
|
|
8279
|
+
var imageData = createImageDataBitDepth(psd.width, psd.height, bitsPerChannel);
|
|
8102
8280
|
(0, helpers_1.resetImageData)(imageData);
|
|
8103
8281
|
switch (psd.colorMode) {
|
|
8104
8282
|
case 0 /* ColorMode.Bitmap */: {
|
|
@@ -8108,7 +8286,7 @@ function readImageData(reader, psd, globalAlpha, options) {
|
|
|
8108
8286
|
}
|
|
8109
8287
|
else if (compression === 1 /* Compression.RleCompressed */) {
|
|
8110
8288
|
bytes = new Uint8Array(psd.width * psd.height);
|
|
8111
|
-
readDataRLE(reader, { data: bytes, width: psd.width, height: psd.height }, psd.width, psd.height, 1, [0], options.large);
|
|
8289
|
+
readDataRLE(reader, { data: bytes, width: psd.width, height: psd.height }, psd.width, psd.height, bitsPerChannel, 1, [0], options.large);
|
|
8112
8290
|
}
|
|
8113
8291
|
else {
|
|
8114
8292
|
throw new Error("Bitmap compression not supported: ".concat(compression));
|
|
@@ -8125,17 +8303,17 @@ function readImageData(reader, psd, globalAlpha, options) {
|
|
|
8125
8303
|
channels.push(i);
|
|
8126
8304
|
}
|
|
8127
8305
|
}
|
|
8128
|
-
else if (globalAlpha) {
|
|
8306
|
+
else if (options.globalAlpha) {
|
|
8129
8307
|
channels.push(3);
|
|
8130
8308
|
}
|
|
8131
8309
|
if (compression === 0 /* Compression.RawData */) {
|
|
8132
8310
|
for (var i = 0; i < channels.length; i++) {
|
|
8133
|
-
readDataRaw(reader, imageData, psd.width, psd.height, 4, channels[i]);
|
|
8311
|
+
readDataRaw(reader, imageData, psd.width, psd.height, bitsPerChannel, 4, channels[i]);
|
|
8134
8312
|
}
|
|
8135
8313
|
}
|
|
8136
8314
|
else if (compression === 1 /* Compression.RleCompressed */) {
|
|
8137
8315
|
var start = reader.offset;
|
|
8138
|
-
readDataRLE(reader, imageData, psd.width, psd.height, 4, channels, options.large);
|
|
8316
|
+
readDataRLE(reader, imageData, psd.width, psd.height, bitsPerChannel, 4, channels, options.large);
|
|
8139
8317
|
if (helpers_1.RAW_IMAGE_DATA)
|
|
8140
8318
|
psd.imageDataRaw = new Uint8Array(reader.view.buffer, reader.view.byteOffset + start, reader.offset - start);
|
|
8141
8319
|
}
|
|
@@ -8145,10 +8323,12 @@ function readImageData(reader, psd, globalAlpha, options) {
|
|
|
8145
8323
|
break;
|
|
8146
8324
|
}
|
|
8147
8325
|
case 4 /* ColorMode.CMYK */: {
|
|
8326
|
+
if (psd.bitsPerChannel !== 8)
|
|
8327
|
+
throw new Error('bitsPerChannel Not supproted');
|
|
8148
8328
|
if (psd.channels !== 4)
|
|
8149
8329
|
throw new Error("Invalid channel count");
|
|
8150
8330
|
var channels = [0, 1, 2, 3];
|
|
8151
|
-
if (globalAlpha)
|
|
8331
|
+
if (options.globalAlpha)
|
|
8152
8332
|
channels.push(4);
|
|
8153
8333
|
if (compression === 0 /* Compression.RawData */) {
|
|
8154
8334
|
throw new Error("Not implemented");
|
|
@@ -8164,7 +8344,7 @@ function readImageData(reader, psd, globalAlpha, options) {
|
|
|
8164
8344
|
data: new Uint8Array(imageData.width * imageData.height * 5),
|
|
8165
8345
|
};
|
|
8166
8346
|
var start = reader.offset;
|
|
8167
|
-
readDataRLE(reader, cmykImageData, psd.width, psd.height, 5, channels, options.large);
|
|
8347
|
+
readDataRLE(reader, cmykImageData, psd.width, psd.height, (_b = psd.bitsPerChannel) !== null && _b !== void 0 ? _b : 8, 5, channels, options.large);
|
|
8168
8348
|
cmykToRgb(cmykImageData, imageData, true);
|
|
8169
8349
|
if (helpers_1.RAW_IMAGE_DATA)
|
|
8170
8350
|
psd.imageDataRaw = new Uint8Array(reader.view.buffer, reader.view.byteOffset + start, reader.offset - start);
|
|
@@ -8174,7 +8354,9 @@ function readImageData(reader, psd, globalAlpha, options) {
|
|
|
8174
8354
|
default: throw new Error("Color mode not supported: ".concat(psd.colorMode));
|
|
8175
8355
|
}
|
|
8176
8356
|
// remove weird white matte
|
|
8177
|
-
if (globalAlpha) {
|
|
8357
|
+
if (options.globalAlpha) {
|
|
8358
|
+
if (psd.bitsPerChannel !== 8)
|
|
8359
|
+
throw new Error('bitsPerChannel Not supproted');
|
|
8178
8360
|
var p = imageData.data;
|
|
8179
8361
|
var size = imageData.width * imageData.height * 4;
|
|
8180
8362
|
for (var i = 0; i < size; i += 4) {
|
|
@@ -8193,8 +8375,7 @@ function readImageData(reader, psd, globalAlpha, options) {
|
|
|
8193
8375
|
psd.imageData = imageData;
|
|
8194
8376
|
}
|
|
8195
8377
|
else {
|
|
8196
|
-
psd.canvas = (0, helpers_1.
|
|
8197
|
-
psd.canvas.getContext('2d').putImageData(imageData, 0, 0);
|
|
8378
|
+
psd.canvas = (0, helpers_1.imageDataToCanvas)(imageData);
|
|
8198
8379
|
}
|
|
8199
8380
|
}
|
|
8200
8381
|
function cmykToRgb(cmyk, rgb, reverseAlpha) {
|
|
@@ -8222,29 +8403,89 @@ function cmykToRgb(cmyk, rgb, reverseAlpha) {
|
|
|
8222
8403
|
// dstData[dst + 3] = reverseAlpha ? 255 - srcData[src + 4] : srcData[src + 4];
|
|
8223
8404
|
// }
|
|
8224
8405
|
}
|
|
8225
|
-
function
|
|
8226
|
-
|
|
8227
|
-
|
|
8406
|
+
function verifyCompatible(a, b) {
|
|
8407
|
+
if ((a.byteLength / a.length) !== (b.byteLength / b.length)) {
|
|
8408
|
+
throw new Error('Invalid array types');
|
|
8409
|
+
}
|
|
8410
|
+
}
|
|
8411
|
+
function bytesToArray(bytes, bitDepth) {
|
|
8412
|
+
if (bitDepth === 8) {
|
|
8413
|
+
return bytes;
|
|
8414
|
+
}
|
|
8415
|
+
else if (bitDepth === 16) {
|
|
8416
|
+
if (bytes.byteOffset % 2) {
|
|
8417
|
+
var result = new Uint16Array(bytes.byteLength / 2);
|
|
8418
|
+
new Uint8Array(result.buffer, result.byteOffset, result.byteLength).set(bytes);
|
|
8419
|
+
return result;
|
|
8420
|
+
}
|
|
8421
|
+
else {
|
|
8422
|
+
return new Uint16Array(bytes.buffer, bytes.byteOffset, bytes.byteLength / 2);
|
|
8423
|
+
}
|
|
8424
|
+
}
|
|
8425
|
+
else if (bitDepth === 32) {
|
|
8426
|
+
if (bytes.byteOffset % 4) {
|
|
8427
|
+
var result = new Uint32Array(bytes.byteLength / 4);
|
|
8428
|
+
new Uint8Array(result.buffer, result.byteOffset, result.byteLength).set(bytes);
|
|
8429
|
+
return result;
|
|
8430
|
+
}
|
|
8431
|
+
else {
|
|
8432
|
+
return new Uint32Array(bytes.buffer, bytes.byteOffset, bytes.byteLength / 4);
|
|
8433
|
+
}
|
|
8434
|
+
}
|
|
8435
|
+
else {
|
|
8436
|
+
throw new Error("Invalid bitDepth (".concat(bitDepth, ")"));
|
|
8437
|
+
}
|
|
8438
|
+
}
|
|
8439
|
+
function copyChannelToPixelData(pixelData, channel, offset, step) {
|
|
8440
|
+
verifyCompatible(pixelData.data, channel);
|
|
8441
|
+
var size = pixelData.width * pixelData.height;
|
|
8442
|
+
var data = pixelData.data;
|
|
8443
|
+
for (var i = 0, p = offset | 0; i < size; i++, p = (p + step) | 0) {
|
|
8444
|
+
data[p] = channel[i];
|
|
8445
|
+
}
|
|
8446
|
+
}
|
|
8447
|
+
function readDataRaw(reader, pixelData, width, height, bitDepth, step, offset) {
|
|
8448
|
+
var buffer = readBytes(reader, width * height * Math.floor(bitDepth / 8));
|
|
8449
|
+
var array = bytesToArray(buffer, bitDepth);
|
|
8228
8450
|
if (pixelData && offset < step) {
|
|
8229
|
-
|
|
8230
|
-
|
|
8231
|
-
|
|
8451
|
+
copyChannelToPixelData(pixelData, array, offset, step);
|
|
8452
|
+
}
|
|
8453
|
+
}
|
|
8454
|
+
function decodePredicted(data, width, height, mod) {
|
|
8455
|
+
for (var y = 0; y < height; y++) {
|
|
8456
|
+
var offset = y * width;
|
|
8457
|
+
for (var x = 1, o = offset + 1; x < width; x++, o++) {
|
|
8458
|
+
data[o] = (data[o - 1] + data[o]) % mod;
|
|
8232
8459
|
}
|
|
8233
8460
|
}
|
|
8234
8461
|
}
|
|
8235
|
-
function
|
|
8462
|
+
function readDataZip(reader, length, pixelData, width, height, bitDepth, step, offset, prediction) {
|
|
8236
8463
|
var compressed = readBytes(reader, length);
|
|
8237
8464
|
var decompressed = (0, pako_1.inflate)(compressed);
|
|
8238
|
-
var size = width * height;
|
|
8239
8465
|
if (pixelData && offset < step) {
|
|
8240
|
-
var
|
|
8241
|
-
|
|
8242
|
-
|
|
8466
|
+
var array = bytesToArray(decompressed, bitDepth);
|
|
8467
|
+
if (bitDepth === 8) {
|
|
8468
|
+
if (prediction)
|
|
8469
|
+
decodePredicted(decompressed, width, height, 0x100);
|
|
8470
|
+
copyChannelToPixelData(pixelData, decompressed, offset, step);
|
|
8471
|
+
}
|
|
8472
|
+
else if (bitDepth === 16) {
|
|
8473
|
+
if (prediction)
|
|
8474
|
+
decodePredicted(array, width, height, 0x10000);
|
|
8475
|
+
copyChannelToPixelData(pixelData, array, offset, step);
|
|
8476
|
+
}
|
|
8477
|
+
else if (bitDepth === 32) {
|
|
8478
|
+
if (prediction)
|
|
8479
|
+
decodePredicted(decompressed, width, height, 0x100);
|
|
8480
|
+
copyChannelToPixelData(pixelData, array, offset, step);
|
|
8481
|
+
}
|
|
8482
|
+
else {
|
|
8483
|
+
throw new Error('Invalid bitDepth');
|
|
8243
8484
|
}
|
|
8244
8485
|
}
|
|
8245
8486
|
}
|
|
8246
|
-
exports.
|
|
8247
|
-
function readDataRLE(reader, pixelData, _width, height, step, offsets, large) {
|
|
8487
|
+
exports.readDataZip = readDataZip;
|
|
8488
|
+
function readDataRLE(reader, pixelData, _width, height, bitDepth, step, offsets, large) {
|
|
8248
8489
|
var data = pixelData && pixelData.data;
|
|
8249
8490
|
var lengths;
|
|
8250
8491
|
if (large) {
|
|
@@ -8263,6 +8504,8 @@ function readDataRLE(reader, pixelData, _width, height, step, offsets, large) {
|
|
|
8263
8504
|
}
|
|
8264
8505
|
}
|
|
8265
8506
|
}
|
|
8507
|
+
if (bitDepth !== 1 && bitDepth !== 8)
|
|
8508
|
+
throw new Error("Invalid bit depth (".concat(bitDepth, ")"));
|
|
8266
8509
|
var extraLimit = (step - 1) | 0; // 3 for rgb, 4 for cmyk
|
|
8267
8510
|
for (var c = 0, li = 0; c < offsets.length; c++) {
|
|
8268
8511
|
var offset = offsets[c] | 0;
|
|
@@ -8672,12 +8915,31 @@ function writeSection(writer, round, func, writeTotalLength, large) {
|
|
|
8672
8915
|
writer.view.setUint32(offset, length, false);
|
|
8673
8916
|
}
|
|
8674
8917
|
exports.writeSection = writeSection;
|
|
8918
|
+
function verifyBitCount(target) {
|
|
8919
|
+
var _a;
|
|
8920
|
+
(_a = target.children) === null || _a === void 0 ? void 0 : _a.forEach(verifyBitCount);
|
|
8921
|
+
var data = target.imageData;
|
|
8922
|
+
if (data && (data.data instanceof Uint32Array || data.data instanceof Uint16Array)) {
|
|
8923
|
+
throw new Error('imageData has incorrect bitDepth');
|
|
8924
|
+
}
|
|
8925
|
+
if ('mask' in target && target.mask) {
|
|
8926
|
+
var data_1 = target.mask.imageData;
|
|
8927
|
+
if (data_1 && (data_1.data instanceof Uint32Array || data_1.data instanceof Uint16Array)) {
|
|
8928
|
+
throw new Error('mask imageData has incorrect bitDepth');
|
|
8929
|
+
}
|
|
8930
|
+
}
|
|
8931
|
+
}
|
|
8675
8932
|
function writePsd(writer, psd, options) {
|
|
8933
|
+
var _a;
|
|
8676
8934
|
if (options === void 0) { options = {}; }
|
|
8677
8935
|
if (!(+psd.width > 0 && +psd.height > 0))
|
|
8678
8936
|
throw new Error('Invalid document size');
|
|
8679
8937
|
if ((psd.width > 30000 || psd.height > 30000) && !options.psb)
|
|
8680
8938
|
throw new Error('Document size is too large (max is 30000x30000, use PSB format instead)');
|
|
8939
|
+
var bitsPerChannel = (_a = psd.bitsPerChannel) !== null && _a !== void 0 ? _a : 8;
|
|
8940
|
+
if (bitsPerChannel !== 8)
|
|
8941
|
+
throw new Error('bitsPerChannel other than 8 are not supported for writing');
|
|
8942
|
+
verifyBitCount(psd);
|
|
8681
8943
|
var imageResources = psd.imageResources || {};
|
|
8682
8944
|
var opt = __assign(__assign({}, options), { layerIds: new Set(), layerToId: new Map() });
|
|
8683
8945
|
if (opt.generateThumbnail) {
|
|
@@ -8699,7 +8961,7 @@ function writePsd(writer, psd, options) {
|
|
|
8699
8961
|
writeUint16(writer, globalAlpha ? 4 : 3); // channels
|
|
8700
8962
|
writeUint32(writer, psd.height);
|
|
8701
8963
|
writeUint32(writer, psd.width);
|
|
8702
|
-
writeUint16(writer,
|
|
8964
|
+
writeUint16(writer, bitsPerChannel); // bits per channel
|
|
8703
8965
|
writeUint16(writer, 3 /* ColorMode.RGB */); // we only support saving RGB right now
|
|
8704
8966
|
// color mode data
|
|
8705
8967
|
writeSection(writer, 1, function () {
|
|
@@ -8996,9 +9258,7 @@ function createThumbnail(psd) {
|
|
|
8996
9258
|
var context = canvas.getContext('2d');
|
|
8997
9259
|
context.scale(scale, scale);
|
|
8998
9260
|
if (psd.imageData) {
|
|
8999
|
-
|
|
9000
|
-
temp.getContext('2d').putImageData(psd.imageData, 0, 0);
|
|
9001
|
-
context.drawImage(temp, 0, 0);
|
|
9261
|
+
context.drawImage((0, helpers_1.imageDataToCanvas)(psd.imageData), 0, 0);
|
|
9002
9262
|
}
|
|
9003
9263
|
else if (psd.canvas) {
|
|
9004
9264
|
context.drawImage(psd.canvas, 0, 0);
|
|
@@ -9053,6 +9313,9 @@ function getLayerDimentions(_a) {
|
|
|
9053
9313
|
return imageData || canvas || { width: 0, height: 0 };
|
|
9054
9314
|
}
|
|
9055
9315
|
function cropImageData(data, left, top, width, height) {
|
|
9316
|
+
if (data.data instanceof Uint32Array || data.data instanceof Uint16Array) {
|
|
9317
|
+
throw new Error('imageData has incorrect bit depth');
|
|
9318
|
+
}
|
|
9056
9319
|
var croppedData = (0, helpers_1.createImageData)(width, height);
|
|
9057
9320
|
var srcData = data.data;
|
|
9058
9321
|
var dstData = croppedData.data;
|