ag-psd 25.0.0 → 26.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/.v8-cache/v22.13.1-x64-00250a7c/4511bacf +0 -0
- package/.v8-cache/v22.13.1-x64-00250a7c/acc36e66 +0 -0
- package/.v8-cache/v22.13.1-x64-00250a7c/b3c2fab7 +0 -0
- package/.v8-cache/v22.13.1-x64-00250a7c/c314aece +0 -0
- package/.v8-cache/v22.13.1-x64-00250a7c/cfc49f4f +0 -0
- package/.v8-cache/v22.13.1-x64-00250a7c/e03e2acd +0 -0
- package/CHANGELOG.md +3 -0
- package/{TODO → TODO.md} +46 -0
- package/dist/additionalInfo.js +55 -51
- package/dist/additionalInfo.js.map +1 -1
- package/dist/bundle.js +207 -159
- package/dist/descriptor.js +4 -4
- package/dist/descriptor.js.map +1 -1
- package/dist/helpers.d.ts +1 -0
- package/dist/helpers.js.map +1 -1
- package/dist/imageResources.js +39 -5
- package/dist/imageResources.js.map +1 -1
- package/dist/psd.d.ts +1 -0
- package/dist/psd.js.map +1 -1
- package/dist/psdReader.js +29 -31
- package/dist/psdReader.js.map +1 -1
- package/dist/psdWriter.js +79 -67
- package/dist/psdWriter.js.map +1 -1
- package/dist-es/additionalInfo.js +55 -51
- package/dist-es/additionalInfo.js.map +1 -1
- package/dist-es/descriptor.js +4 -4
- package/dist-es/descriptor.js.map +1 -1
- package/dist-es/helpers.d.ts +1 -0
- package/dist-es/helpers.js.map +1 -1
- package/dist-es/imageResources.js +41 -7
- package/dist-es/imageResources.js.map +1 -1
- package/dist-es/psd.d.ts +1 -0
- package/dist-es/psd.js.map +1 -1
- package/dist-es/psdReader.js +29 -31
- package/dist-es/psdReader.js.map +1 -1
- package/dist-es/psdWriter.js +79 -67
- package/dist-es/psdWriter.js.map +1 -1
- package/package.json +1 -1
- package/src/additionalInfo.ts +55 -51
- package/src/descriptor.ts +5 -4
- package/src/helpers.ts +1 -0
- package/src/imageResources.ts +46 -20
- package/src/psd.ts +1 -0
- package/src/psdReader.ts +32 -34
- package/src/psdWriter.ts +75 -69
package/dist/bundle.js
CHANGED
|
@@ -640,58 +640,55 @@ addHandler('vogk', hasKey('vectorOrigination'), function (reader, target, left)
|
|
|
640
640
|
var desc = { keyDescriptorList: [] };
|
|
641
641
|
for (var i = 0; i < orig.keyDescriptorList.length; i++) {
|
|
642
642
|
var item = orig.keyDescriptorList[i];
|
|
643
|
-
|
|
644
|
-
|
|
643
|
+
desc.keyDescriptorList.push({}); // we're adding keyOriginIndex at the end
|
|
644
|
+
var out = desc.keyDescriptorList[desc.keyDescriptorList.length - 1];
|
|
645
|
+
if (item.keyOriginType != null)
|
|
646
|
+
out.keyOriginType = item.keyOriginType;
|
|
647
|
+
if (item.keyOriginResolution != null)
|
|
648
|
+
out.keyOriginResolution = item.keyOriginResolution;
|
|
649
|
+
var radii = item.keyOriginRRectRadii;
|
|
650
|
+
if (radii) {
|
|
651
|
+
out.keyOriginRRectRadii = {
|
|
652
|
+
unitValueQuadVersion: 1,
|
|
653
|
+
topRight: (0, descriptor_1.unitsValue)(radii.topRight, 'topRight'),
|
|
654
|
+
topLeft: (0, descriptor_1.unitsValue)(radii.topLeft, 'topLeft'),
|
|
655
|
+
bottomLeft: (0, descriptor_1.unitsValue)(radii.bottomLeft, 'bottomLeft'),
|
|
656
|
+
bottomRight: (0, descriptor_1.unitsValue)(radii.bottomRight, 'bottomRight'),
|
|
657
|
+
};
|
|
645
658
|
}
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
}
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
if (box) {
|
|
665
|
-
out.keyOriginShapeBBox = {
|
|
666
|
-
unitValueQuadVersion: 1,
|
|
667
|
-
'Top ': (0, descriptor_1.unitsValue)(box.top, 'top'),
|
|
668
|
-
Left: (0, descriptor_1.unitsValue)(box.left, 'left'),
|
|
669
|
-
Btom: (0, descriptor_1.unitsValue)(box.bottom, 'bottom'),
|
|
670
|
-
Rght: (0, descriptor_1.unitsValue)(box.right, 'right'),
|
|
671
|
-
};
|
|
672
|
-
}
|
|
673
|
-
var corners = item.keyOriginBoxCorners;
|
|
674
|
-
if (corners && corners.length === 4) {
|
|
675
|
-
out.keyOriginBoxCorners = {
|
|
676
|
-
rectangleCornerA: { Hrzn: corners[0].x, Vrtc: corners[0].y },
|
|
677
|
-
rectangleCornerB: { Hrzn: corners[1].x, Vrtc: corners[1].y },
|
|
678
|
-
rectangleCornerC: { Hrzn: corners[2].x, Vrtc: corners[2].y },
|
|
679
|
-
rectangleCornerD: { Hrzn: corners[3].x, Vrtc: corners[3].y },
|
|
680
|
-
};
|
|
681
|
-
}
|
|
682
|
-
var transform = item.transform;
|
|
683
|
-
if (transform && transform.length === 6) {
|
|
684
|
-
out.Trnf = {
|
|
685
|
-
xx: transform[0],
|
|
686
|
-
xy: transform[1],
|
|
687
|
-
yx: transform[2],
|
|
688
|
-
yy: transform[3],
|
|
689
|
-
tx: transform[4],
|
|
690
|
-
ty: transform[5],
|
|
691
|
-
};
|
|
692
|
-
}
|
|
693
|
-
out.keyOriginIndex = i;
|
|
659
|
+
var box = item.keyOriginShapeBoundingBox;
|
|
660
|
+
if (box) {
|
|
661
|
+
out.keyOriginShapeBBox = {
|
|
662
|
+
unitValueQuadVersion: 1,
|
|
663
|
+
'Top ': (0, descriptor_1.unitsValue)(box.top, 'top'),
|
|
664
|
+
Left: (0, descriptor_1.unitsValue)(box.left, 'left'),
|
|
665
|
+
Btom: (0, descriptor_1.unitsValue)(box.bottom, 'bottom'),
|
|
666
|
+
Rght: (0, descriptor_1.unitsValue)(box.right, 'right'),
|
|
667
|
+
};
|
|
668
|
+
}
|
|
669
|
+
var corners = item.keyOriginBoxCorners;
|
|
670
|
+
if (corners && corners.length === 4) {
|
|
671
|
+
out.keyOriginBoxCorners = {
|
|
672
|
+
rectangleCornerA: { Hrzn: corners[0].x, Vrtc: corners[0].y },
|
|
673
|
+
rectangleCornerB: { Hrzn: corners[1].x, Vrtc: corners[1].y },
|
|
674
|
+
rectangleCornerC: { Hrzn: corners[2].x, Vrtc: corners[2].y },
|
|
675
|
+
rectangleCornerD: { Hrzn: corners[3].x, Vrtc: corners[3].y },
|
|
676
|
+
};
|
|
694
677
|
}
|
|
678
|
+
var transform = item.transform;
|
|
679
|
+
if (transform && transform.length === 6) {
|
|
680
|
+
out.Trnf = {
|
|
681
|
+
xx: transform[0],
|
|
682
|
+
xy: transform[1],
|
|
683
|
+
yx: transform[2],
|
|
684
|
+
yy: transform[3],
|
|
685
|
+
tx: transform[4],
|
|
686
|
+
ty: transform[5],
|
|
687
|
+
};
|
|
688
|
+
}
|
|
689
|
+
if (item.keyShapeInvalidated != null)
|
|
690
|
+
out.keyShapeInvalidated = item.keyShapeInvalidated;
|
|
691
|
+
out.keyOriginIndex = i;
|
|
695
692
|
}
|
|
696
693
|
(0, psdWriter_1.writeInt32)(writer, 1); // version
|
|
697
694
|
(0, descriptor_1.writeVersionAndDescriptor)(writer, '', 'null', desc);
|
|
@@ -1163,7 +1160,13 @@ function isQuiltWarp(warp) {
|
|
|
1163
1160
|
}
|
|
1164
1161
|
function encodeWarp(warp) {
|
|
1165
1162
|
var bounds = warp.bounds;
|
|
1166
|
-
var desc = __assign(__assign({ warpStyle: descriptor_1.warpStyle.encode(warp.style) }, (warp.values ? { warpValues: warp.values } : { warpValue: warp.value || 0 })), { warpPerspective: warp.perspective || 0, warpPerspectiveOther: warp.perspectiveOther || 0, warpRotate: descriptor_1.Ornt.encode(warp.rotate), bounds: {
|
|
1163
|
+
var desc = __assign(__assign({ warpStyle: descriptor_1.warpStyle.encode(warp.style) }, (warp.values ? { warpValues: warp.values } : { warpValue: warp.value || 0 })), { warpPerspective: warp.perspective || 0, warpPerspectiveOther: warp.perspectiveOther || 0, warpRotate: descriptor_1.Ornt.encode(warp.rotate), bounds: /*1 ? { // testing
|
|
1164
|
+
_classID: 'classFloatRect',
|
|
1165
|
+
'Top ': bounds && bounds.top && bounds.top.value || 0,
|
|
1166
|
+
Left: bounds && bounds.left && bounds.left.value || 0,
|
|
1167
|
+
Btom: bounds && bounds.bottom && bounds.bottom.value || 0,
|
|
1168
|
+
Rght: bounds && bounds.right && bounds.right.value || 0,
|
|
1169
|
+
} :*/ {
|
|
1167
1170
|
'Top ': (0, descriptor_1.unitsValue)(bounds && bounds.top || { units: 'Pixels', value: 0 }, 'bounds.top'),
|
|
1168
1171
|
Left: (0, descriptor_1.unitsValue)(bounds && bounds.left || { units: 'Pixels', value: 0 }, 'bounds.left'),
|
|
1169
1172
|
Btom: (0, descriptor_1.unitsValue)(bounds && bounds.bottom || { units: 'Pixels', value: 0 }, 'bounds.bottom'),
|
|
@@ -1728,6 +1731,7 @@ function serializeFilterFXItem(f) {
|
|
|
1728
1731
|
'Rds ': uvRadius(f.filter),
|
|
1729
1732
|
}, filterID: 697 });
|
|
1730
1733
|
case 'gaussian blur': return __assign(__assign({}, base), { Fltr: {
|
|
1734
|
+
// _name: '高斯模糊', // Testing
|
|
1731
1735
|
_name: 'Gaussian Blur',
|
|
1732
1736
|
_classID: 'GsnB',
|
|
1733
1737
|
'Rds ': uvRadius(f.filter),
|
|
@@ -3756,12 +3760,13 @@ function makeType(name, classID) {
|
|
|
3756
3760
|
return { name: name, classID: classID };
|
|
3757
3761
|
}
|
|
3758
3762
|
var nullType = makeType('', 'null');
|
|
3763
|
+
var USE_CHINESE = false; // Testing
|
|
3759
3764
|
var fieldToExtType = {
|
|
3760
3765
|
strokeStyleContent: makeType('', 'solidColorLayer'),
|
|
3761
|
-
|
|
3762
|
-
|
|
3766
|
+
printProofSetup: makeType(USE_CHINESE ? '校样设置' : 'Proof Setup', 'proofSetup'),
|
|
3767
|
+
Grad: makeType(USE_CHINESE ? '渐变' : 'Gradient', 'Grdn'),
|
|
3768
|
+
Trnf: makeType(USE_CHINESE ? '变换' : 'Transform', 'Trnf'),
|
|
3763
3769
|
patternFill: makeType('', 'patternFill'),
|
|
3764
|
-
Grad: makeType('Gradient', 'Grdn'),
|
|
3765
3770
|
ebbl: makeType('', 'ebbl'),
|
|
3766
3771
|
SoFi: makeType('', 'SoFi'),
|
|
3767
3772
|
GrFl: makeType('', 'GrFl'),
|
|
@@ -3803,7 +3808,6 @@ var fieldToExtType = {
|
|
|
3803
3808
|
rectangleCornerC: makeType('', 'Pnt '),
|
|
3804
3809
|
rectangleCornerD: makeType('', 'Pnt '),
|
|
3805
3810
|
compInfo: nullType,
|
|
3806
|
-
Trnf: makeType('Transform', 'Trnf'),
|
|
3807
3811
|
quiltWarp: makeType('', 'quiltWarp'),
|
|
3808
3812
|
generatorSettings: nullType,
|
|
3809
3813
|
crema: nullType,
|
|
@@ -6789,6 +6793,33 @@ function writeUtf8String(writer, value) {
|
|
|
6789
6793
|
var buffer = (0, utf8_1.encodeString)(value);
|
|
6790
6794
|
(0, psdWriter_1.writeBytes)(writer, buffer);
|
|
6791
6795
|
}
|
|
6796
|
+
function readEncodedString(reader) {
|
|
6797
|
+
var length = (0, psdReader_1.readUint8)(reader);
|
|
6798
|
+
var buffer = (0, psdReader_1.readBytes)(reader, length);
|
|
6799
|
+
var notAscii = false;
|
|
6800
|
+
for (var i = 0; i < buffer.byteLength; i++) {
|
|
6801
|
+
if (buffer[i] & 0x80) {
|
|
6802
|
+
notAscii = true;
|
|
6803
|
+
break;
|
|
6804
|
+
}
|
|
6805
|
+
}
|
|
6806
|
+
if (notAscii) {
|
|
6807
|
+
var decoder = new TextDecoder('gbk');
|
|
6808
|
+
return decoder.decode(buffer);
|
|
6809
|
+
}
|
|
6810
|
+
else {
|
|
6811
|
+
return (0, utf8_1.decodeString)(buffer);
|
|
6812
|
+
}
|
|
6813
|
+
}
|
|
6814
|
+
function writeEncodedString(writer, value) {
|
|
6815
|
+
var ascii = '';
|
|
6816
|
+
for (var i = 0, code = value.codePointAt(i++); code !== undefined; code = value.codePointAt(i++)) {
|
|
6817
|
+
ascii += code > 0x7f ? '?' : String.fromCodePoint(code);
|
|
6818
|
+
}
|
|
6819
|
+
var buffer = (0, utf8_1.encodeString)(ascii);
|
|
6820
|
+
(0, psdWriter_1.writeUint8)(writer, buffer.byteLength);
|
|
6821
|
+
(0, psdWriter_1.writeBytes)(writer, buffer);
|
|
6822
|
+
}
|
|
6792
6823
|
helpers_1.MOCK_HANDLERS && addHandler(1028, // IPTC-NAA record
|
|
6793
6824
|
function (// IPTC-NAA record
|
|
6794
6825
|
target) { return target._ir1028 !== undefined; }, function (reader, target, left) {
|
|
@@ -6936,15 +6967,22 @@ addHandler(1062, function (target) { return target.printScale !== undefined; },
|
|
|
6936
6967
|
(0, psdWriter_1.writeFloat32)(writer, scale || 0);
|
|
6937
6968
|
});
|
|
6938
6969
|
addHandler(1006, function (target) { return target.alphaChannelNames !== undefined; }, function (reader, target, left) {
|
|
6939
|
-
target.alphaChannelNames
|
|
6940
|
-
|
|
6941
|
-
|
|
6942
|
-
|
|
6970
|
+
if (!target.alphaChannelNames) { // skip if the unicode versions are already read
|
|
6971
|
+
target.alphaChannelNames = [];
|
|
6972
|
+
while (left() > 0) {
|
|
6973
|
+
var value = readEncodedString(reader);
|
|
6974
|
+
// const value = readPascalString(reader, 1);
|
|
6975
|
+
target.alphaChannelNames.push(value);
|
|
6976
|
+
}
|
|
6977
|
+
}
|
|
6978
|
+
else {
|
|
6979
|
+
(0, psdReader_1.skipBytes)(reader, left());
|
|
6943
6980
|
}
|
|
6944
6981
|
}, function (writer, target) {
|
|
6945
6982
|
for (var _i = 0, _a = target.alphaChannelNames; _i < _a.length; _i++) {
|
|
6946
6983
|
var name_1 = _a[_i];
|
|
6947
|
-
(
|
|
6984
|
+
writeEncodedString(writer, name_1);
|
|
6985
|
+
// writePascalString(writer, name, 1);
|
|
6948
6986
|
}
|
|
6949
6987
|
});
|
|
6950
6988
|
addHandler(1045, function (target) { return target.alphaChannelNames !== undefined; }, function (reader, target, left) {
|
|
@@ -8264,9 +8302,7 @@ function readLayerRecord(reader, psd) {
|
|
|
8264
8302
|
// 0x20 - effects/filters panel is expanded
|
|
8265
8303
|
skipBytes(reader, 1);
|
|
8266
8304
|
readSection(reader, 1, function (left) {
|
|
8267
|
-
|
|
8268
|
-
if (mask)
|
|
8269
|
-
layer.mask = mask;
|
|
8305
|
+
readLayerMaskData(reader, layer);
|
|
8270
8306
|
var blendingRanges = readLayerBlendingRanges(reader);
|
|
8271
8307
|
if (blendingRanges)
|
|
8272
8308
|
layer.blendingRanges = blendingRanges;
|
|
@@ -8280,11 +8316,12 @@ function readLayerRecord(reader, psd) {
|
|
|
8280
8316
|
});
|
|
8281
8317
|
return { layer: layer, channels: channels };
|
|
8282
8318
|
}
|
|
8283
|
-
function readLayerMaskData(reader) {
|
|
8319
|
+
function readLayerMaskData(reader, layer) {
|
|
8284
8320
|
return readSection(reader, 1, function (left) {
|
|
8285
8321
|
if (!left())
|
|
8286
8322
|
return undefined;
|
|
8287
8323
|
var mask = {};
|
|
8324
|
+
layer.mask = mask;
|
|
8288
8325
|
mask.top = readInt32(reader);
|
|
8289
8326
|
mask.left = readInt32(reader);
|
|
8290
8327
|
mask.bottom = readInt32(reader);
|
|
@@ -8294,6 +8331,19 @@ function readLayerMaskData(reader) {
|
|
|
8294
8331
|
mask.positionRelativeToLayer = (flags & 1 /* LayerMaskFlags.PositionRelativeToLayer */) !== 0;
|
|
8295
8332
|
mask.disabled = (flags & 2 /* LayerMaskFlags.LayerMaskDisabled */) !== 0;
|
|
8296
8333
|
mask.fromVectorData = (flags & 8 /* LayerMaskFlags.LayerMaskFromRenderingOtherData */) !== 0;
|
|
8334
|
+
if (left() >= 18) {
|
|
8335
|
+
var realMask = {};
|
|
8336
|
+
layer.realMask = realMask;
|
|
8337
|
+
var realFlags = readUint8(reader);
|
|
8338
|
+
realMask.positionRelativeToLayer = (realFlags & 1 /* LayerMaskFlags.PositionRelativeToLayer */) !== 0;
|
|
8339
|
+
realMask.disabled = (realFlags & 2 /* LayerMaskFlags.LayerMaskDisabled */) !== 0;
|
|
8340
|
+
realMask.fromVectorData = (realFlags & 8 /* LayerMaskFlags.LayerMaskFromRenderingOtherData */) !== 0;
|
|
8341
|
+
realMask.defaultColor = readUint8(reader); // Real user mask background. 0 or 255.
|
|
8342
|
+
realMask.top = readInt32(reader);
|
|
8343
|
+
realMask.left = readInt32(reader);
|
|
8344
|
+
realMask.bottom = readInt32(reader);
|
|
8345
|
+
realMask.right = readInt32(reader);
|
|
8346
|
+
}
|
|
8297
8347
|
if (flags & 16 /* LayerMaskFlags.MaskHasParametersAppliedToIt */) {
|
|
8298
8348
|
var params = readUint8(reader);
|
|
8299
8349
|
if (params & 1 /* MaskParams.UserMaskDensity */)
|
|
@@ -8305,23 +8355,7 @@ function readLayerMaskData(reader) {
|
|
|
8305
8355
|
if (params & 8 /* MaskParams.VectorMaskFeather */)
|
|
8306
8356
|
mask.vectorMaskFeather = readFloat64(reader);
|
|
8307
8357
|
}
|
|
8308
|
-
if (left() > 2) {
|
|
8309
|
-
// TODO: handle these values, this is RealUserMask
|
|
8310
|
-
/*const realFlags = readUint8(reader);
|
|
8311
|
-
const realUserMaskBackground = readUint8(reader);
|
|
8312
|
-
const top2 = readInt32(reader);
|
|
8313
|
-
const left2 = readInt32(reader);
|
|
8314
|
-
const bottom2 = readInt32(reader);
|
|
8315
|
-
const right2 = readInt32(reader);
|
|
8316
|
-
|
|
8317
|
-
// TEMP
|
|
8318
|
-
(mask as any)._real = { realFlags, realUserMaskBackground, top2, left2, bottom2, right2 };*/
|
|
8319
|
-
if (reader.logMissingFeatures) {
|
|
8320
|
-
reader.log('Unhandled extra real user mask params');
|
|
8321
|
-
}
|
|
8322
|
-
}
|
|
8323
8358
|
skipBytes(reader, left());
|
|
8324
|
-
return mask;
|
|
8325
8359
|
});
|
|
8326
8360
|
}
|
|
8327
8361
|
function readBlendingRange(reader) {
|
|
@@ -8383,20 +8417,28 @@ function readLayerChannelImageData(reader, psd, layer, channels) {
|
|
|
8383
8417
|
}
|
|
8384
8418
|
if (compression > 3)
|
|
8385
8419
|
throw new Error("Invalid compression: ".concat(compression));
|
|
8386
|
-
if (channel.id === -2 /* ChannelID.UserMask */) {
|
|
8387
|
-
var mask = layer.mask;
|
|
8420
|
+
if (channel.id === -2 /* ChannelID.UserMask */ || channel.id === -3 /* ChannelID.RealUserMask */) {
|
|
8421
|
+
var mask = channel.id === -2 /* ChannelID.UserMask */ ? layer.mask : layer.realMask;
|
|
8388
8422
|
if (!mask)
|
|
8389
|
-
throw new Error("Missing layer mask data");
|
|
8423
|
+
throw new Error("Missing layer ".concat(channel.id === -2 /* ChannelID.UserMask */ ? 'mask' : 'real mask', " data"));
|
|
8390
8424
|
var maskWidth = (mask.right || 0) - (mask.left || 0);
|
|
8391
8425
|
var maskHeight = (mask.bottom || 0) - (mask.top || 0);
|
|
8426
|
+
if (maskWidth < 0 || maskHeight < 0 || maskWidth > 30000 || maskHeight > 30000)
|
|
8427
|
+
throw new Error('Invalid mask size');
|
|
8392
8428
|
if (maskWidth && maskHeight) {
|
|
8393
8429
|
var maskData = createImageDataBitDepth(maskWidth, maskHeight, (_b = psd.bitsPerChannel) !== null && _b !== void 0 ? _b : 8);
|
|
8394
8430
|
(0, helpers_1.resetImageData)(maskData);
|
|
8395
8431
|
var start_1 = reader.offset;
|
|
8396
8432
|
readData(reader, channel.length, maskData, compression, maskWidth, maskHeight, (_c = psd.bitsPerChannel) !== null && _c !== void 0 ? _c : 8, 0, reader.large, 4);
|
|
8397
8433
|
if (helpers_1.RAW_IMAGE_DATA) {
|
|
8398
|
-
|
|
8399
|
-
|
|
8434
|
+
if (channel.id === -2 /* ChannelID.UserMask */) {
|
|
8435
|
+
layer.maskDataRawCompression = compression;
|
|
8436
|
+
layer.maskDataRaw = new Uint8Array(reader.view.buffer, reader.view.byteOffset + start_1, reader.offset - start_1);
|
|
8437
|
+
}
|
|
8438
|
+
else {
|
|
8439
|
+
layer.realMaskDataRawCompression = compression;
|
|
8440
|
+
layer.realMaskDataRaw = new Uint8Array(reader.view.buffer, reader.view.byteOffset + start_1, reader.offset - start_1);
|
|
8441
|
+
}
|
|
8400
8442
|
}
|
|
8401
8443
|
setupGrayscale(maskData);
|
|
8402
8444
|
if (reader.useImageData) {
|
|
@@ -8407,12 +8449,6 @@ function readLayerChannelImageData(reader, psd, layer, channels) {
|
|
|
8407
8449
|
}
|
|
8408
8450
|
}
|
|
8409
8451
|
}
|
|
8410
|
-
else if (channel.id === -3 /* ChannelID.RealUserMask */) {
|
|
8411
|
-
if (reader.logMissingFeatures) {
|
|
8412
|
-
reader.log("RealUserMask not supported");
|
|
8413
|
-
}
|
|
8414
|
-
reader.offset = start + channel.length;
|
|
8415
|
-
}
|
|
8416
8452
|
else {
|
|
8417
8453
|
var offset = (0, helpers_1.offsetForChannel)(channel.id, cmyk);
|
|
8418
8454
|
var targetData = imageData;
|
|
@@ -9396,7 +9432,7 @@ function writeLayerInfo(writer, psd, globalAlpha, options) {
|
|
|
9396
9432
|
flags |= 0x01;
|
|
9397
9433
|
if (layer.hidden)
|
|
9398
9434
|
flags |= 0x02;
|
|
9399
|
-
if (layer.vectorMask || (layer.sectionDivider && layer.sectionDivider.type !== 0 /* SectionDividerType.Other */)) {
|
|
9435
|
+
if (layer.vectorMask || (layer.sectionDivider && layer.sectionDivider.type !== 0 /* SectionDividerType.Other */) || layer.adjustment) {
|
|
9400
9436
|
flags |= 0x10; // pixel data irrelevant to appearance of document
|
|
9401
9437
|
}
|
|
9402
9438
|
if (layer.effectsOpen)
|
|
@@ -9429,36 +9465,52 @@ function writeLayerInfo(writer, psd, globalAlpha, options) {
|
|
|
9429
9465
|
}, true, options.psb);
|
|
9430
9466
|
}
|
|
9431
9467
|
function writeLayerMaskData(writer, _a, layerData) {
|
|
9432
|
-
var mask = _a.mask;
|
|
9468
|
+
var mask = _a.mask, realMask = _a.realMask;
|
|
9433
9469
|
writeSection(writer, 1, function () {
|
|
9434
|
-
if (!mask)
|
|
9470
|
+
if (!mask && !realMask)
|
|
9435
9471
|
return;
|
|
9472
|
+
var params = 0, flags = 0, realFlags = 0;
|
|
9473
|
+
if (mask) {
|
|
9474
|
+
if (mask.userMaskDensity !== undefined)
|
|
9475
|
+
params |= 1 /* MaskParams.UserMaskDensity */;
|
|
9476
|
+
if (mask.userMaskFeather !== undefined)
|
|
9477
|
+
params |= 2 /* MaskParams.UserMaskFeather */;
|
|
9478
|
+
if (mask.vectorMaskDensity !== undefined)
|
|
9479
|
+
params |= 4 /* MaskParams.VectorMaskDensity */;
|
|
9480
|
+
if (mask.vectorMaskFeather !== undefined)
|
|
9481
|
+
params |= 8 /* MaskParams.VectorMaskFeather */;
|
|
9482
|
+
if (mask.disabled)
|
|
9483
|
+
flags |= 2 /* LayerMaskFlags.LayerMaskDisabled */;
|
|
9484
|
+
if (mask.positionRelativeToLayer)
|
|
9485
|
+
flags |= 1 /* LayerMaskFlags.PositionRelativeToLayer */;
|
|
9486
|
+
if (mask.fromVectorData)
|
|
9487
|
+
flags |= 8 /* LayerMaskFlags.LayerMaskFromRenderingOtherData */;
|
|
9488
|
+
if (params)
|
|
9489
|
+
flags |= 16 /* LayerMaskFlags.MaskHasParametersAppliedToIt */;
|
|
9490
|
+
}
|
|
9436
9491
|
var m = layerData.mask || {};
|
|
9437
9492
|
writeInt32(writer, m.top || 0);
|
|
9438
9493
|
writeInt32(writer, m.left || 0);
|
|
9439
9494
|
writeInt32(writer, m.bottom || 0);
|
|
9440
9495
|
writeInt32(writer, m.right || 0);
|
|
9441
|
-
writeUint8(writer, mask.defaultColor || 0);
|
|
9442
|
-
var params = 0;
|
|
9443
|
-
if (mask.userMaskDensity !== undefined)
|
|
9444
|
-
params |= 1 /* MaskParams.UserMaskDensity */;
|
|
9445
|
-
if (mask.userMaskFeather !== undefined)
|
|
9446
|
-
params |= 2 /* MaskParams.UserMaskFeather */;
|
|
9447
|
-
if (mask.vectorMaskDensity !== undefined)
|
|
9448
|
-
params |= 4 /* MaskParams.VectorMaskDensity */;
|
|
9449
|
-
if (mask.vectorMaskFeather !== undefined)
|
|
9450
|
-
params |= 8 /* MaskParams.VectorMaskFeather */;
|
|
9451
|
-
var flags = 0;
|
|
9452
|
-
if (mask.disabled)
|
|
9453
|
-
flags |= 2 /* LayerMaskFlags.LayerMaskDisabled */;
|
|
9454
|
-
if (mask.positionRelativeToLayer)
|
|
9455
|
-
flags |= 1 /* LayerMaskFlags.PositionRelativeToLayer */;
|
|
9456
|
-
if (mask.fromVectorData)
|
|
9457
|
-
flags |= 8 /* LayerMaskFlags.LayerMaskFromRenderingOtherData */;
|
|
9458
|
-
if (params)
|
|
9459
|
-
flags |= 16 /* LayerMaskFlags.MaskHasParametersAppliedToIt */;
|
|
9496
|
+
writeUint8(writer, mask && mask.defaultColor || 0);
|
|
9460
9497
|
writeUint8(writer, flags);
|
|
9461
|
-
if (
|
|
9498
|
+
if (realMask) {
|
|
9499
|
+
if (realMask.disabled)
|
|
9500
|
+
realFlags |= 2 /* LayerMaskFlags.LayerMaskDisabled */;
|
|
9501
|
+
if (realMask.positionRelativeToLayer)
|
|
9502
|
+
realFlags |= 1 /* LayerMaskFlags.PositionRelativeToLayer */;
|
|
9503
|
+
if (realMask.fromVectorData)
|
|
9504
|
+
realFlags |= 8 /* LayerMaskFlags.LayerMaskFromRenderingOtherData */;
|
|
9505
|
+
var r = layerData.realMask || {};
|
|
9506
|
+
writeUint8(writer, realFlags);
|
|
9507
|
+
writeUint8(writer, realMask.defaultColor || 0);
|
|
9508
|
+
writeInt32(writer, r.top || 0);
|
|
9509
|
+
writeInt32(writer, r.left || 0);
|
|
9510
|
+
writeInt32(writer, r.bottom || 0);
|
|
9511
|
+
writeInt32(writer, r.right || 0);
|
|
9512
|
+
}
|
|
9513
|
+
if (params && mask) {
|
|
9462
9514
|
writeUint8(writer, params);
|
|
9463
9515
|
if (mask.userMaskDensity !== undefined)
|
|
9464
9516
|
writeUint8(writer, Math.round(mask.userMaskDensity * 0xff));
|
|
@@ -9469,7 +9521,6 @@ function writeLayerMaskData(writer, _a, layerData) {
|
|
|
9469
9521
|
if (mask.vectorMaskFeather !== undefined)
|
|
9470
9522
|
writeFloat64(writer, mask.vectorMaskFeather);
|
|
9471
9523
|
}
|
|
9472
|
-
// TODO: handle rest of the fields
|
|
9473
9524
|
writeZeros(writer, 2);
|
|
9474
9525
|
});
|
|
9475
9526
|
}
|
|
@@ -9535,8 +9586,8 @@ function writeAdditionalLayerInfo(writer, target, psd, options) {
|
|
|
9535
9586
|
function addChildren(layers, children) {
|
|
9536
9587
|
if (!children)
|
|
9537
9588
|
return;
|
|
9538
|
-
// const layerIds = [];
|
|
9539
|
-
// const timestamps = []
|
|
9589
|
+
// const layerIds: number[] = [2];
|
|
9590
|
+
// const timestamps: number[] = [1740120767.0230637];
|
|
9540
9591
|
for (var _i = 0, children_1 = children; _i < children_1.length; _i++) {
|
|
9541
9592
|
var c = children_1[_i];
|
|
9542
9593
|
if (c.children && c.canvas)
|
|
@@ -9549,6 +9600,7 @@ function addChildren(layers, children) {
|
|
|
9549
9600
|
sectionDivider: {
|
|
9550
9601
|
type: 3 /* SectionDividerType.BoundingSectionDivider */,
|
|
9551
9602
|
},
|
|
9603
|
+
// blendingRanges: children[0].blendingRanges,
|
|
9552
9604
|
// nameSource: 'lset',
|
|
9553
9605
|
// id: layerIds.shift(),
|
|
9554
9606
|
// protected: {
|
|
@@ -9556,12 +9608,9 @@ function addChildren(layers, children) {
|
|
|
9556
9608
|
// composite: false,
|
|
9557
9609
|
// position: false,
|
|
9558
9610
|
// },
|
|
9559
|
-
// layerColor: '
|
|
9611
|
+
// layerColor: 'red',
|
|
9560
9612
|
// timestamp: timestamps.shift(),
|
|
9561
|
-
// referencePoint: {
|
|
9562
|
-
// x: 0,
|
|
9563
|
-
// y: 0,
|
|
9564
|
-
// },
|
|
9613
|
+
// referencePoint: { x: 0, y: 0 },
|
|
9565
9614
|
});
|
|
9566
9615
|
addChildren(layers, c.children);
|
|
9567
9616
|
layers.push(__assign(__assign({}, c), { blendMode: c.blendMode === 'pass through' ? 'normal' : c.blendMode, sectionDivider: {
|
|
@@ -9620,47 +9669,46 @@ function createThumbnail(psd) {
|
|
|
9620
9669
|
}
|
|
9621
9670
|
return canvas;
|
|
9622
9671
|
}
|
|
9623
|
-
function
|
|
9624
|
-
var
|
|
9625
|
-
var
|
|
9626
|
-
|
|
9627
|
-
|
|
9628
|
-
|
|
9629
|
-
|
|
9630
|
-
|
|
9631
|
-
|
|
9632
|
-
|
|
9633
|
-
|
|
9634
|
-
|
|
9635
|
-
|
|
9636
|
-
if (width
|
|
9637
|
-
|
|
9638
|
-
|
|
9639
|
-
|
|
9640
|
-
|
|
9641
|
-
|
|
9642
|
-
|
|
9643
|
-
|
|
9644
|
-
|
|
9645
|
-
|
|
9646
|
-
|
|
9647
|
-
|
|
9648
|
-
}
|
|
9649
|
-
else if (options.compress) {
|
|
9650
|
-
buffer = (0, helpers_1.writeDataZipWithoutPrediction)(imageData, [0]);
|
|
9651
|
-
compression = 2 /* Compression.ZipWithoutPrediction */;
|
|
9652
|
-
}
|
|
9653
|
-
else {
|
|
9654
|
-
buffer = (0, helpers_1.writeDataRLE)(tempBuffer, imageData, [0], !!options.psb);
|
|
9655
|
-
compression = 1 /* Compression.RleCompressed */;
|
|
9656
|
-
}
|
|
9657
|
-
layerData.mask = { top: top_2, left: left, right: right, bottom: bottom };
|
|
9658
|
-
layerData.channels.push({ channelId: -2 /* ChannelID.UserMask */, compression: compression, buffer: buffer, length: 2 + buffer.length });
|
|
9672
|
+
function getMaskChannels(tempBuffer, layerData, layer, mask, options, realMask) {
|
|
9673
|
+
var top = mask.top | 0;
|
|
9674
|
+
var left = mask.left | 0;
|
|
9675
|
+
var right = mask.right | 0;
|
|
9676
|
+
var bottom = mask.bottom | 0;
|
|
9677
|
+
var _a = getLayerDimentions(mask), width = _a.width, height = _a.height;
|
|
9678
|
+
var imageData = mask.imageData;
|
|
9679
|
+
if (!imageData && mask.canvas && width && height) {
|
|
9680
|
+
imageData = mask.canvas.getContext('2d').getImageData(0, 0, width, height);
|
|
9681
|
+
}
|
|
9682
|
+
if (width && height && imageData) {
|
|
9683
|
+
right = left + width;
|
|
9684
|
+
bottom = top + height;
|
|
9685
|
+
if (imageData.width !== width || imageData.height !== height) {
|
|
9686
|
+
throw new Error('Invalid imageData dimentions');
|
|
9687
|
+
}
|
|
9688
|
+
var buffer = void 0;
|
|
9689
|
+
var compression = void 0;
|
|
9690
|
+
if (helpers_1.RAW_IMAGE_DATA && layer[realMask ? 'realMaskDataRaw' : 'maskDataRaw']) {
|
|
9691
|
+
buffer = layer[realMask ? 'realMaskDataRaw' : 'maskDataRaw'];
|
|
9692
|
+
compression = layer[realMask ? 'realMaskDataRawCompression' : 'maskDataRawCompression'];
|
|
9693
|
+
}
|
|
9694
|
+
else if (options.compress) {
|
|
9695
|
+
buffer = (0, helpers_1.writeDataZipWithoutPrediction)(imageData, [0]);
|
|
9696
|
+
compression = 2 /* Compression.ZipWithoutPrediction */;
|
|
9659
9697
|
}
|
|
9660
9698
|
else {
|
|
9661
|
-
|
|
9699
|
+
buffer = (0, helpers_1.writeDataRLE)(tempBuffer, imageData, [0], !!options.psb);
|
|
9700
|
+
compression = 1 /* Compression.RleCompressed */;
|
|
9662
9701
|
}
|
|
9702
|
+
layerData.channels.push({ channelId: realMask ? -3 /* ChannelID.RealUserMask */ : -2 /* ChannelID.UserMask */, compression: compression, buffer: buffer, length: 2 + buffer.length });
|
|
9663
9703
|
}
|
|
9704
|
+
layerData[realMask ? 'realMask' : 'mask'] = { top: top, left: left, right: right, bottom: bottom };
|
|
9705
|
+
}
|
|
9706
|
+
function getChannels(tempBuffer, layer, background, options) {
|
|
9707
|
+
var layerData = getLayerChannels(tempBuffer, layer, background, options);
|
|
9708
|
+
if (layer.mask)
|
|
9709
|
+
getMaskChannels(tempBuffer, layerData, layer, layer.mask, options, false);
|
|
9710
|
+
if (layer.realMask)
|
|
9711
|
+
getMaskChannels(tempBuffer, layerData, layer, layer.realMask, options, true);
|
|
9664
9712
|
return layerData;
|
|
9665
9713
|
}
|
|
9666
9714
|
function getLayerDimentions(_a) {
|
package/dist/descriptor.js
CHANGED
|
@@ -44,12 +44,13 @@ function makeType(name, classID) {
|
|
|
44
44
|
return { name: name, classID: classID };
|
|
45
45
|
}
|
|
46
46
|
var nullType = makeType('', 'null');
|
|
47
|
+
var USE_CHINESE = false; // Testing
|
|
47
48
|
var fieldToExtType = {
|
|
48
49
|
strokeStyleContent: makeType('', 'solidColorLayer'),
|
|
49
|
-
|
|
50
|
-
|
|
50
|
+
printProofSetup: makeType(USE_CHINESE ? '校样设置' : 'Proof Setup', 'proofSetup'),
|
|
51
|
+
Grad: makeType(USE_CHINESE ? '渐变' : 'Gradient', 'Grdn'),
|
|
52
|
+
Trnf: makeType(USE_CHINESE ? '变换' : 'Transform', 'Trnf'),
|
|
51
53
|
patternFill: makeType('', 'patternFill'),
|
|
52
|
-
Grad: makeType('Gradient', 'Grdn'),
|
|
53
54
|
ebbl: makeType('', 'ebbl'),
|
|
54
55
|
SoFi: makeType('', 'SoFi'),
|
|
55
56
|
GrFl: makeType('', 'GrFl'),
|
|
@@ -91,7 +92,6 @@ var fieldToExtType = {
|
|
|
91
92
|
rectangleCornerC: makeType('', 'Pnt '),
|
|
92
93
|
rectangleCornerD: makeType('', 'Pnt '),
|
|
93
94
|
compInfo: nullType,
|
|
94
|
-
Trnf: makeType('Transform', 'Trnf'),
|
|
95
95
|
quiltWarp: makeType('', 'quiltWarp'),
|
|
96
96
|
generatorSettings: nullType,
|
|
97
97
|
crema: nullType,
|