ag-psd 22.0.2 → 23.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 +6 -0
- package/dist/additionalInfo.js +182 -124
- package/dist/additionalInfo.js.map +1 -1
- package/dist/bundle.js +184 -133
- package/dist/descriptor.d.ts +6 -0
- package/dist/descriptor.js +1 -1
- package/dist/descriptor.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/psd.d.ts +22 -2
- package/dist/psd.js.map +1 -1
- package/dist/psdWriter.js +0 -7
- package/dist/psdWriter.js.map +1 -1
- package/dist-es/additionalInfo.js +182 -124
- package/dist-es/additionalInfo.js.map +1 -1
- package/dist-es/descriptor.d.ts +6 -0
- package/dist-es/descriptor.js +1 -1
- package/dist-es/descriptor.js.map +1 -1
- package/dist-es/index.d.ts +2 -2
- package/dist-es/index.js +1 -1
- package/dist-es/index.js.map +1 -1
- package/dist-es/psd.d.ts +22 -2
- package/dist-es/psd.js.map +1 -1
- package/dist-es/psdWriter.js +0 -7
- package/dist-es/psdWriter.js.map +1 -1
- package/package.json +1 -1
- package/src/additionalInfo.ts +195 -111
- package/src/descriptor.ts +8 -2
- package/src/index.ts +3 -2
- package/src/psd.ts +17 -1
- package/src/psdWriter.ts +0 -7
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## v23.1.0
|
|
4
|
+
- Added support for perspective warp filter
|
|
5
|
+
|
|
6
|
+
## v23.0.0
|
|
7
|
+
- Fixed handling externally linked files in smart object layers
|
|
8
|
+
|
|
3
9
|
## v22.0.0
|
|
4
10
|
- Fixed parsing path `smooth` gradient interpolation method
|
|
5
11
|
- Changed `PsdReader` type
|
package/dist/additionalInfo.js
CHANGED
|
@@ -1300,11 +1300,22 @@ function parseFilterFXItem(f, options) {
|
|
|
1300
1300
|
lightDirection: f.Fltr.LghD,
|
|
1301
1301
|
specularity: f.Fltr.specularity,
|
|
1302
1302
|
} });
|
|
1303
|
-
case 'LqFy':
|
|
1304
|
-
|
|
1305
|
-
|
|
1306
|
-
|
|
1307
|
-
|
|
1303
|
+
case 'LqFy':
|
|
1304
|
+
{
|
|
1305
|
+
return __assign(__assign({}, base), { type: 'liquify', filter: {
|
|
1306
|
+
liquifyMesh: f.Fltr.LqMe,
|
|
1307
|
+
} });
|
|
1308
|
+
}
|
|
1309
|
+
;
|
|
1310
|
+
case 'perspectiveWarpTransform':
|
|
1311
|
+
{
|
|
1312
|
+
return __assign(__assign({}, base), { type: 'perspective warp', filter: {
|
|
1313
|
+
vertices: f.Fltr.vertices.map(hrznVrtcToPoint),
|
|
1314
|
+
warpedVertices: f.Fltr.warpedVertices.map(hrznVrtcToPoint),
|
|
1315
|
+
quads: f.Fltr.quads.map(function (q) { return q.indices; }),
|
|
1316
|
+
} });
|
|
1317
|
+
}
|
|
1318
|
+
;
|
|
1308
1319
|
default:
|
|
1309
1320
|
if (options.throwForMissingFeatures) {
|
|
1310
1321
|
throw new Error("Unknown filter classId: ".concat(f.Fltr._classID));
|
|
@@ -1777,6 +1788,13 @@ function serializeFilterFXItem(f) {
|
|
|
1777
1788
|
_classID: 'LqFy',
|
|
1778
1789
|
LqMe: f.filter.liquifyMesh,
|
|
1779
1790
|
}, filterID: 1282492025 });
|
|
1791
|
+
case 'perspective warp': return __assign(__assign({}, base), { Fltr: {
|
|
1792
|
+
_name: 'Perspective Warp',
|
|
1793
|
+
_classID: 'perspectiveWarpTransform',
|
|
1794
|
+
vertices: f.filter.vertices.map(pointToHrznVrtc),
|
|
1795
|
+
warpedVertices: f.filter.warpedVertices.map(pointToHrznVrtc),
|
|
1796
|
+
quads: f.filter.quads.map(function (indices) { return ({ indices: indices }); }),
|
|
1797
|
+
}, filterID: 442 });
|
|
1780
1798
|
default: throw new Error("Unknow filter type: ".concat(f.type));
|
|
1781
1799
|
}
|
|
1782
1800
|
}
|
|
@@ -2131,130 +2149,170 @@ addHandler('Anno', function (target) { return target.annotations !== undefined;
|
|
|
2131
2149
|
writer.view.setUint32(dataOffset - 4, writer.offset - dataOffset, false);
|
|
2132
2150
|
}
|
|
2133
2151
|
});
|
|
2134
|
-
|
|
2135
|
-
|
|
2136
|
-
|
|
2137
|
-
|
|
2138
|
-
|
|
2139
|
-
|
|
2140
|
-
|
|
2141
|
-
|
|
2142
|
-
|
|
2143
|
-
|
|
2144
|
-
|
|
2145
|
-
|
|
2146
|
-
|
|
2147
|
-
|
|
2148
|
-
|
|
2149
|
-
|
|
2150
|
-
|
|
2151
|
-
|
|
2152
|
-
|
|
2153
|
-
|
|
2154
|
-
|
|
2155
|
-
|
|
2156
|
-
|
|
2157
|
-
|
|
2158
|
-
|
|
2159
|
-
|
|
2160
|
-
|
|
2161
|
-
|
|
2162
|
-
|
|
2163
|
-
|
|
2164
|
-
|
|
2165
|
-
|
|
2166
|
-
|
|
2167
|
-
|
|
2168
|
-
|
|
2169
|
-
|
|
2170
|
-
|
|
2171
|
-
|
|
2172
|
-
|
|
2173
|
-
|
|
2174
|
-
|
|
2175
|
-
|
|
2176
|
-
|
|
2177
|
-
|
|
2178
|
-
|
|
2179
|
-
|
|
2180
|
-
|
|
2181
|
-
|
|
2182
|
-
|
|
2183
|
-
|
|
2184
|
-
|
|
2185
|
-
|
|
2186
|
-
|
|
2187
|
-
|
|
2188
|
-
|
|
2189
|
-
|
|
2190
|
-
|
|
2191
|
-
|
|
2192
|
-
|
|
2193
|
-
|
|
2194
|
-
|
|
2195
|
-
|
|
2196
|
-
|
|
2197
|
-
|
|
2198
|
-
|
|
2199
|
-
|
|
2200
|
-
|
|
2201
|
-
|
|
2202
|
-
|
|
2203
|
-
|
|
2204
|
-
|
|
2205
|
-
|
|
2206
|
-
|
|
2207
|
-
|
|
2208
|
-
|
|
2209
|
-
|
|
2210
|
-
|
|
2211
|
-
|
|
2212
|
-
|
|
2213
|
-
var sizeOffset = writer.offset;
|
|
2214
|
-
(0, psdWriter_1.writeSignature)(writer, file.data ? 'liFD' : 'liFA');
|
|
2215
|
-
(0, psdWriter_1.writeInt32)(writer, version);
|
|
2216
|
-
if (!file.id || typeof file.id !== 'string' || !/^[0-9a-f]{8}-([0-9a-f]{4}-){3}[0-9a-f]{12}$/.test(file.id)) {
|
|
2217
|
-
throw new Error('Linked file ID must be in a GUID format (example: 20953ddb-9391-11ec-b4f1-c15674f50bc4)');
|
|
2218
|
-
}
|
|
2219
|
-
(0, psdWriter_1.writePascalString)(writer, file.id, 1);
|
|
2220
|
-
(0, psdWriter_1.writeUnicodeStringWithPadding)(writer, file.name || '');
|
|
2221
|
-
(0, psdWriter_1.writeSignature)(writer, file.type ? "".concat(file.type, " ").substring(0, 4) : ' ');
|
|
2222
|
-
(0, psdWriter_1.writeSignature)(writer, file.creator ? "".concat(file.creator, " ").substring(0, 4) : '\0\0\0\0');
|
|
2223
|
-
writeLength64(writer, file.data ? file.data.byteLength : 0);
|
|
2224
|
-
if (file.descriptor && file.descriptor.compInfo) {
|
|
2225
|
-
var desc = {
|
|
2226
|
-
compInfo: {
|
|
2227
|
-
compID: file.descriptor.compInfo.compID,
|
|
2228
|
-
originalCompID: file.descriptor.compInfo.originalCompID,
|
|
2229
|
-
}
|
|
2230
|
-
};
|
|
2231
|
-
(0, psdWriter_1.writeUint8)(writer, 1);
|
|
2232
|
-
(0, descriptor_1.writeVersionAndDescriptor)(writer, '', 'null', desc);
|
|
2233
|
-
}
|
|
2234
|
-
else {
|
|
2235
|
-
(0, psdWriter_1.writeUint8)(writer, 0);
|
|
2152
|
+
function createLnkHandler(tag) {
|
|
2153
|
+
addHandler(tag, function (target) {
|
|
2154
|
+
var psd = target;
|
|
2155
|
+
if (!psd.linkedFiles || !psd.linkedFiles.length)
|
|
2156
|
+
return false;
|
|
2157
|
+
if (tag === 'lnkE' && !psd.linkedFiles.some(function (f) { return f.linkedFile; }))
|
|
2158
|
+
return false;
|
|
2159
|
+
return true;
|
|
2160
|
+
}, function (reader, target, left, _psd) {
|
|
2161
|
+
var psd = target;
|
|
2162
|
+
psd.linkedFiles = psd.linkedFiles || [];
|
|
2163
|
+
while (left() > 8) {
|
|
2164
|
+
var size = readLength64(reader);
|
|
2165
|
+
var startOffset = reader.offset;
|
|
2166
|
+
var type = (0, psdReader_1.readSignature)(reader);
|
|
2167
|
+
// liFD - linked file data
|
|
2168
|
+
// liFE - linked file external
|
|
2169
|
+
// liFA - linked file alias
|
|
2170
|
+
var version = (0, psdReader_1.readInt32)(reader);
|
|
2171
|
+
var id = (0, psdReader_1.readPascalString)(reader, 1);
|
|
2172
|
+
var name_3 = (0, psdReader_1.readUnicodeString)(reader);
|
|
2173
|
+
var fileType = (0, psdReader_1.readSignature)(reader).trim(); // ' ' if empty
|
|
2174
|
+
var fileCreator = (0, psdReader_1.readSignature)(reader).trim(); // ' ' or '\0\0\0\0' if empty
|
|
2175
|
+
var dataSize = readLength64(reader);
|
|
2176
|
+
var hasFileOpenDescriptor = (0, psdReader_1.readUint8)(reader);
|
|
2177
|
+
var fileOpenDescriptor = hasFileOpenDescriptor ? (0, descriptor_1.readVersionAndDescriptor)(reader) : undefined;
|
|
2178
|
+
var linkedFileDescriptor = type === 'liFE' ? (0, descriptor_1.readVersionAndDescriptor)(reader) : undefined;
|
|
2179
|
+
var file = { id: id, name: name_3 };
|
|
2180
|
+
if (fileType)
|
|
2181
|
+
file.type = fileType;
|
|
2182
|
+
if (fileCreator)
|
|
2183
|
+
file.creator = fileCreator;
|
|
2184
|
+
if (fileOpenDescriptor) {
|
|
2185
|
+
file.descriptor = {
|
|
2186
|
+
compInfo: {
|
|
2187
|
+
compID: fileOpenDescriptor.compInfo.compID,
|
|
2188
|
+
originalCompID: fileOpenDescriptor.compInfo.originalCompID,
|
|
2189
|
+
}
|
|
2190
|
+
};
|
|
2191
|
+
}
|
|
2192
|
+
if (type === 'liFE' && version > 3) {
|
|
2193
|
+
var year = (0, psdReader_1.readInt32)(reader);
|
|
2194
|
+
var month = (0, psdReader_1.readUint8)(reader);
|
|
2195
|
+
var day = (0, psdReader_1.readUint8)(reader);
|
|
2196
|
+
var hour = (0, psdReader_1.readUint8)(reader);
|
|
2197
|
+
var minute = (0, psdReader_1.readUint8)(reader);
|
|
2198
|
+
var seconds = (0, psdReader_1.readFloat64)(reader);
|
|
2199
|
+
var wholeSeconds = Math.floor(seconds);
|
|
2200
|
+
var ms = (seconds - wholeSeconds) * 1000;
|
|
2201
|
+
file.time = (new Date(Date.UTC(year, month, day, hour, minute, wholeSeconds, ms))).toISOString();
|
|
2202
|
+
}
|
|
2203
|
+
var fileSize = type === 'liFE' ? readLength64(reader) : 0;
|
|
2204
|
+
if (type === 'liFA')
|
|
2205
|
+
(0, psdReader_1.skipBytes)(reader, 8);
|
|
2206
|
+
if (type === 'liFD')
|
|
2207
|
+
file.data = (0, psdReader_1.readBytes)(reader, dataSize); // seems to be a typo in docs
|
|
2208
|
+
if (version >= 5)
|
|
2209
|
+
file.childDocumentID = (0, psdReader_1.readUnicodeString)(reader);
|
|
2210
|
+
if (version >= 6)
|
|
2211
|
+
file.assetModTime = (0, psdReader_1.readFloat64)(reader);
|
|
2212
|
+
if (version >= 7)
|
|
2213
|
+
file.assetLockedState = (0, psdReader_1.readUint8)(reader);
|
|
2214
|
+
if (type === 'liFE' && version === 2)
|
|
2215
|
+
file.data = (0, psdReader_1.readBytes)(reader, fileSize);
|
|
2216
|
+
if (reader.skipLinkedFilesData)
|
|
2217
|
+
file.data = undefined;
|
|
2218
|
+
if (tag === 'lnkE') {
|
|
2219
|
+
file.linkedFile = {
|
|
2220
|
+
fileSize: fileSize,
|
|
2221
|
+
name: (linkedFileDescriptor === null || linkedFileDescriptor === void 0 ? void 0 : linkedFileDescriptor['Nm ']) || '',
|
|
2222
|
+
fullPath: (linkedFileDescriptor === null || linkedFileDescriptor === void 0 ? void 0 : linkedFileDescriptor.fullPath) || '',
|
|
2223
|
+
originalPath: (linkedFileDescriptor === null || linkedFileDescriptor === void 0 ? void 0 : linkedFileDescriptor.originalPath) || '',
|
|
2224
|
+
relativePath: (linkedFileDescriptor === null || linkedFileDescriptor === void 0 ? void 0 : linkedFileDescriptor.relPath) || '',
|
|
2225
|
+
};
|
|
2226
|
+
}
|
|
2227
|
+
psd.linkedFiles.push(file);
|
|
2228
|
+
while (size % 4)
|
|
2229
|
+
size++;
|
|
2230
|
+
reader.offset = startOffset + size;
|
|
2236
2231
|
}
|
|
2237
|
-
|
|
2238
|
-
|
|
2239
|
-
|
|
2232
|
+
(0, psdReader_1.skipBytes)(reader, left()); // ?
|
|
2233
|
+
}, function (writer, target) {
|
|
2234
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j;
|
|
2235
|
+
var psd = target;
|
|
2236
|
+
for (var _i = 0, _k = psd.linkedFiles; _i < _k.length; _i++) {
|
|
2237
|
+
var file = _k[_i];
|
|
2238
|
+
if ((tag === 'lnkE') !== !!file.linkedFile)
|
|
2239
|
+
continue;
|
|
2240
|
+
var version = 2;
|
|
2241
|
+
if (file.assetLockedState != null)
|
|
2242
|
+
version = 7;
|
|
2243
|
+
else if (file.assetModTime != null)
|
|
2244
|
+
version = 6;
|
|
2245
|
+
else if (file.childDocumentID != null)
|
|
2246
|
+
version = 5;
|
|
2247
|
+
else if (tag == 'lnkE')
|
|
2248
|
+
version = 3;
|
|
2240
2249
|
writeLength64(writer, 0);
|
|
2241
|
-
|
|
2242
|
-
(0, psdWriter_1.
|
|
2243
|
-
|
|
2244
|
-
(
|
|
2245
|
-
|
|
2246
|
-
|
|
2247
|
-
|
|
2248
|
-
|
|
2249
|
-
|
|
2250
|
-
|
|
2251
|
-
(
|
|
2250
|
+
var sizeOffset = writer.offset;
|
|
2251
|
+
(0, psdWriter_1.writeSignature)(writer, (tag === 'lnkE') ? 'liFE' : (file.data ? 'liFD' : 'liFA'));
|
|
2252
|
+
(0, psdWriter_1.writeInt32)(writer, version);
|
|
2253
|
+
if (!file.id || typeof file.id !== 'string' || !/^[0-9a-f]{8}-([0-9a-f]{4}-){3}[0-9a-f]{12}$/.test(file.id)) {
|
|
2254
|
+
throw new Error('Linked file ID must be in a GUID format (example: 20953ddb-9391-11ec-b4f1-c15674f50bc4)');
|
|
2255
|
+
}
|
|
2256
|
+
(0, psdWriter_1.writePascalString)(writer, file.id, 1);
|
|
2257
|
+
(0, psdWriter_1.writeUnicodeStringWithPadding)(writer, file.name || '');
|
|
2258
|
+
(0, psdWriter_1.writeSignature)(writer, file.type ? "".concat(file.type, " ").substring(0, 4) : ' ');
|
|
2259
|
+
(0, psdWriter_1.writeSignature)(writer, file.creator ? "".concat(file.creator, " ").substring(0, 4) : '\0\0\0\0');
|
|
2260
|
+
writeLength64(writer, file.data ? file.data.byteLength : 0);
|
|
2261
|
+
if (file.descriptor && file.descriptor.compInfo) {
|
|
2262
|
+
var desc = {
|
|
2263
|
+
compInfo: {
|
|
2264
|
+
compID: file.descriptor.compInfo.compID,
|
|
2265
|
+
originalCompID: file.descriptor.compInfo.originalCompID,
|
|
2266
|
+
},
|
|
2267
|
+
};
|
|
2268
|
+
(0, psdWriter_1.writeUint8)(writer, 1);
|
|
2269
|
+
(0, descriptor_1.writeVersionAndDescriptor)(writer, '', 'null', desc);
|
|
2270
|
+
}
|
|
2271
|
+
else {
|
|
2272
|
+
(0, psdWriter_1.writeUint8)(writer, 0);
|
|
2273
|
+
}
|
|
2274
|
+
if (tag === 'lnkE') {
|
|
2275
|
+
var desc = {
|
|
2276
|
+
descVersion: 2,
|
|
2277
|
+
'Nm ': (_b = (_a = file.linkedFile) === null || _a === void 0 ? void 0 : _a.name) !== null && _b !== void 0 ? _b : '',
|
|
2278
|
+
fullPath: (_d = (_c = file.linkedFile) === null || _c === void 0 ? void 0 : _c.fullPath) !== null && _d !== void 0 ? _d : '',
|
|
2279
|
+
originalPath: (_f = (_e = file.linkedFile) === null || _e === void 0 ? void 0 : _e.originalPath) !== null && _f !== void 0 ? _f : '',
|
|
2280
|
+
relPath: (_h = (_g = file.linkedFile) === null || _g === void 0 ? void 0 : _g.relativePath) !== null && _h !== void 0 ? _h : '',
|
|
2281
|
+
};
|
|
2282
|
+
(0, descriptor_1.writeVersionAndDescriptor)(writer, '', 'ExternalFileLink', desc);
|
|
2283
|
+
var time = file.time ? new Date(file.time) : new Date();
|
|
2284
|
+
(0, psdWriter_1.writeInt32)(writer, time.getUTCFullYear());
|
|
2285
|
+
(0, psdWriter_1.writeUint8)(writer, time.getUTCMonth());
|
|
2286
|
+
(0, psdWriter_1.writeUint8)(writer, time.getUTCDate());
|
|
2287
|
+
(0, psdWriter_1.writeUint8)(writer, time.getUTCHours());
|
|
2288
|
+
(0, psdWriter_1.writeUint8)(writer, time.getUTCMinutes());
|
|
2289
|
+
(0, psdWriter_1.writeFloat64)(writer, time.getUTCSeconds() + time.getUTCMilliseconds() / 1000);
|
|
2290
|
+
}
|
|
2291
|
+
if (file.data) {
|
|
2292
|
+
(0, psdWriter_1.writeBytes)(writer, file.data);
|
|
2293
|
+
}
|
|
2294
|
+
else {
|
|
2295
|
+
writeLength64(writer, ((_j = file.linkedFile) === null || _j === void 0 ? void 0 : _j.fileSize) || 0);
|
|
2296
|
+
}
|
|
2297
|
+
if (version >= 5)
|
|
2298
|
+
(0, psdWriter_1.writeUnicodeStringWithPadding)(writer, file.childDocumentID || '');
|
|
2299
|
+
if (version >= 6)
|
|
2300
|
+
(0, psdWriter_1.writeFloat64)(writer, file.assetModTime || 0);
|
|
2301
|
+
if (version >= 7)
|
|
2302
|
+
(0, psdWriter_1.writeUint8)(writer, file.assetLockedState || 0);
|
|
2303
|
+
var size = writer.offset - sizeOffset;
|
|
2304
|
+
writer.view.setUint32(sizeOffset - 4, size, false); // write size
|
|
2305
|
+
while (size % 4) {
|
|
2306
|
+
size++;
|
|
2307
|
+
(0, psdWriter_1.writeUint8)(writer, 0);
|
|
2308
|
+
}
|
|
2252
2309
|
}
|
|
2253
|
-
}
|
|
2254
|
-
}
|
|
2310
|
+
});
|
|
2311
|
+
}
|
|
2312
|
+
createLnkHandler('lnk2');
|
|
2313
|
+
createLnkHandler('lnkE');
|
|
2255
2314
|
addHandlerAlias('lnkD', 'lnk2');
|
|
2256
2315
|
addHandlerAlias('lnk3', 'lnk2');
|
|
2257
|
-
addHandlerAlias('lnkE', 'lnk2');
|
|
2258
2316
|
addHandler('pths', hasKey('pathList'), function (reader, target) {
|
|
2259
2317
|
var desc = (0, descriptor_1.readVersionAndDescriptor)(reader, true);
|
|
2260
2318
|
// console.log(require('util').inspect(desc, false, 99, true));
|