ag-psd 24.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/57d3380b +0 -0
- package/.v8-cache/v22.13.1-x64-00250a7c/6cbfc0ec +0 -0
- package/.v8-cache/v22.13.1-x64-00250a7c/7100ee08 +0 -0
- package/.v8-cache/v22.13.1-x64-00250a7c/75e41e43 +0 -0
- package/.v8-cache/v22.13.1-x64-00250a7c/8d0bf0b5 +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 +7 -0
- package/{TODO → TODO.md} +46 -0
- package/accept.js +18 -1
- package/dist/additionalInfo.js +62 -63
- package/dist/additionalInfo.js.map +1 -1
- package/dist/bundle.js +246 -186
- package/dist/descriptor.d.ts +4 -3
- package/dist/descriptor.js +9 -5
- 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 +12 -1
- package/dist/psd.js.map +1 -1
- package/dist/psdReader.js +39 -36
- package/dist/psdReader.js.map +1 -1
- package/dist/psdWriter.js +96 -76
- package/dist/psdWriter.js.map +1 -1
- package/dist-es/additionalInfo.js +62 -63
- package/dist-es/additionalInfo.js.map +1 -1
- package/dist-es/descriptor.d.ts +4 -3
- package/dist-es/descriptor.js +9 -5
- 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 +12 -1
- package/dist-es/psd.js.map +1 -1
- package/dist-es/psdReader.js +39 -36
- package/dist-es/psdReader.js.map +1 -1
- package/dist-es/psdWriter.js +96 -76
- package/dist-es/psdWriter.js.map +1 -1
- package/package.json +1 -1
- package/src/additionalInfo.ts +66 -66
- package/src/descriptor.ts +12 -8
- package/src/helpers.ts +1 -0
- package/src/imageResources.ts +46 -20
- package/src/psd.ts +9 -1
- package/src/psdReader.ts +43 -40
- package/src/psdWriter.ts +92 -78
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,12 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## v26.0.0
|
|
4
|
+
- Added support for `realMask` section
|
|
5
|
+
|
|
6
|
+
## v25.0.0
|
|
7
|
+
- Added support for `blendingRanges` section
|
|
8
|
+
- Added support for `interpolationMethod` for gradients
|
|
9
|
+
|
|
3
10
|
## v24.0.0
|
|
4
11
|
- Added support for `curves` smart object filter
|
|
5
12
|
- Added support for reading and writing `palette` field
|
package/{TODO → TODO.md}
RENAMED
|
@@ -25,6 +25,7 @@ check: https://github.com/TheNicker/libpsd
|
|
|
25
25
|
|
|
26
26
|
- decompress image data in FEid section
|
|
27
27
|
|
|
28
|
+
```ts
|
|
28
29
|
if (!channelLength) throw new Error('filterEffect: Empty channel');
|
|
29
30
|
const compression = readUint16(reader);
|
|
30
31
|
const data = createImageDataBitDepth(right - left, bottom - top, depth, 1);
|
|
@@ -43,4 +44,49 @@ check: https://github.com/TheNicker/libpsd
|
|
|
43
44
|
const data = createImageDataBitDepth(right - left, bottom - top, depth, 1);
|
|
44
45
|
readData(reader, extraLength - 2, data, compression, data.width, data.height, depth, 0, false, 1);
|
|
45
46
|
target.filterEffectsMasks[target.filterEffectsMasks.length - 1].extra = { top, left, bottom, right, data };
|
|
47
|
+
```
|
|
46
48
|
|
|
49
|
+
```ts
|
|
50
|
+
export function decodeUtf16String(buffer: Uint8Array) {
|
|
51
|
+
let result = '';
|
|
52
|
+
|
|
53
|
+
for (let i = 0; i < buffer.byteLength;) {
|
|
54
|
+
const w1 = (buffer[i++] << 8) | buffer[i++];
|
|
55
|
+
|
|
56
|
+
if ((w1 & 0xF800) !== 0xD800) { // w1 < 0xD800 || w1 > 0xDFFF
|
|
57
|
+
result += String.fromCharCode(w1);
|
|
58
|
+
continue;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
if ((w1 & 0xFC00) === 0xD800) { // w1 >= 0xD800 && w1 <= 0xDBFF
|
|
62
|
+
throw new Error('Invalid utf-16');
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
if (i === buffer.byteLength) {
|
|
66
|
+
throw new Error('Invalid utf-16');
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
const w2 = (buffer[i++] << 8) | buffer[i++];
|
|
70
|
+
|
|
71
|
+
if ((w2 & 0xFC00) !== 0xDC00) { // w2 < 0xDC00 || w2 > 0xDFFF)
|
|
72
|
+
throw new Error('Invalid utf-16');
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
result += String.fromCharCode(((w1 & 0x3ff) << 10) + (w2 & 0x3ff) + 0x10000);
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
return result;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
export function encodeUtf16String(value: string) {
|
|
82
|
+
const buffer = new Uint8Array(value.length * 2);
|
|
83
|
+
|
|
84
|
+
for (let i = 0, j = 0; i < value.length; i++, j += 2) {
|
|
85
|
+
const word = value.charCodeAt(i);
|
|
86
|
+
buffer[j] = (word >> 8) & 0xff;
|
|
87
|
+
buffer[j + 1] = word & 0xff;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
return buffer;
|
|
91
|
+
}
|
|
92
|
+
```
|
package/accept.js
CHANGED
|
@@ -9,7 +9,7 @@ if (type === 'read-write' || type === 'write') {
|
|
|
9
9
|
const file = `expected.${ext}`;
|
|
10
10
|
if (fs.existsSync(path.join('results', type, dir, file))) {
|
|
11
11
|
fs.unlinkSync(path.join('test', type, dir, file));
|
|
12
|
-
fs.
|
|
12
|
+
fs.copyFileSync(
|
|
13
13
|
path.join('results', type, dir, file),
|
|
14
14
|
path.join('test', type, dir, file));
|
|
15
15
|
console.log('copied', dir);
|
|
@@ -22,6 +22,23 @@ if (type === 'read-write' || type === 'write') {
|
|
|
22
22
|
console.log('failed', dir, e.message);
|
|
23
23
|
}
|
|
24
24
|
}
|
|
25
|
+
} else if (type === 'read') {
|
|
26
|
+
for (const dir of fs.readdirSync(path.join('test', type))) {
|
|
27
|
+
try {
|
|
28
|
+
const file = `data.json`;
|
|
29
|
+
if (fs.existsSync(path.join('results', type, dir, file))) {
|
|
30
|
+
fs.unlinkSync(path.join('test', type, dir, file));
|
|
31
|
+
fs.copyFileSync(
|
|
32
|
+
path.join('results', type, dir, file),
|
|
33
|
+
path.join('test', type, dir, file));
|
|
34
|
+
console.log('copied', dir);
|
|
35
|
+
} else {
|
|
36
|
+
console.log('skipped', dir);
|
|
37
|
+
}
|
|
38
|
+
} catch (e) {
|
|
39
|
+
console.log('failed', dir, e.message);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
25
42
|
} else {
|
|
26
43
|
console.error('Invalid type:', type);
|
|
27
44
|
}
|
package/dist/additionalInfo.js
CHANGED
|
@@ -278,6 +278,13 @@ addHandler('vmsk', hasKey('vectorMask'), function (reader, target, left, _a) {
|
|
|
278
278
|
});
|
|
279
279
|
// TODO: need to write vmsk if has outline ?
|
|
280
280
|
addHandlerAlias('vsms', 'vmsk');
|
|
281
|
+
// addHandlerAlias('vmsk', 'vsms');
|
|
282
|
+
addHandler('vowv', // something with vectors?
|
|
283
|
+
hasKey('vowv'), function (reader, target) {
|
|
284
|
+
target.vowv = (0, psdReader_1.readUint32)(reader); // always 2 ????
|
|
285
|
+
}, function (writer, target) {
|
|
286
|
+
(0, psdWriter_1.writeUint32)(writer, target.vowv);
|
|
287
|
+
});
|
|
281
288
|
addHandler('vogk', hasKey('vectorOrigination'), function (reader, target, left) {
|
|
282
289
|
if ((0, psdReader_1.readInt32)(reader) !== 1)
|
|
283
290
|
throw new Error("Invalid vogk version");
|
|
@@ -332,58 +339,55 @@ addHandler('vogk', hasKey('vectorOrigination'), function (reader, target, left)
|
|
|
332
339
|
var desc = { keyDescriptorList: [] };
|
|
333
340
|
for (var i = 0; i < orig.keyDescriptorList.length; i++) {
|
|
334
341
|
var item = orig.keyDescriptorList[i];
|
|
335
|
-
|
|
336
|
-
|
|
342
|
+
desc.keyDescriptorList.push({}); // we're adding keyOriginIndex at the end
|
|
343
|
+
var out = desc.keyDescriptorList[desc.keyDescriptorList.length - 1];
|
|
344
|
+
if (item.keyOriginType != null)
|
|
345
|
+
out.keyOriginType = item.keyOriginType;
|
|
346
|
+
if (item.keyOriginResolution != null)
|
|
347
|
+
out.keyOriginResolution = item.keyOriginResolution;
|
|
348
|
+
var radii = item.keyOriginRRectRadii;
|
|
349
|
+
if (radii) {
|
|
350
|
+
out.keyOriginRRectRadii = {
|
|
351
|
+
unitValueQuadVersion: 1,
|
|
352
|
+
topRight: (0, descriptor_1.unitsValue)(radii.topRight, 'topRight'),
|
|
353
|
+
topLeft: (0, descriptor_1.unitsValue)(radii.topLeft, 'topLeft'),
|
|
354
|
+
bottomLeft: (0, descriptor_1.unitsValue)(radii.bottomLeft, 'bottomLeft'),
|
|
355
|
+
bottomRight: (0, descriptor_1.unitsValue)(radii.bottomRight, 'bottomRight'),
|
|
356
|
+
};
|
|
337
357
|
}
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
}
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
out.keyOriginBoxCorners = {
|
|
368
|
-
rectangleCornerA: { Hrzn: corners[0].x, Vrtc: corners[0].y },
|
|
369
|
-
rectangleCornerB: { Hrzn: corners[1].x, Vrtc: corners[1].y },
|
|
370
|
-
rectangleCornerC: { Hrzn: corners[2].x, Vrtc: corners[2].y },
|
|
371
|
-
rectangleCornerD: { Hrzn: corners[3].x, Vrtc: corners[3].y },
|
|
372
|
-
};
|
|
373
|
-
}
|
|
374
|
-
var transform = item.transform;
|
|
375
|
-
if (transform && transform.length === 6) {
|
|
376
|
-
out.Trnf = {
|
|
377
|
-
xx: transform[0],
|
|
378
|
-
xy: transform[1],
|
|
379
|
-
yx: transform[2],
|
|
380
|
-
yy: transform[3],
|
|
381
|
-
tx: transform[4],
|
|
382
|
-
ty: transform[5],
|
|
383
|
-
};
|
|
384
|
-
}
|
|
385
|
-
out.keyOriginIndex = i;
|
|
358
|
+
var box = item.keyOriginShapeBoundingBox;
|
|
359
|
+
if (box) {
|
|
360
|
+
out.keyOriginShapeBBox = {
|
|
361
|
+
unitValueQuadVersion: 1,
|
|
362
|
+
'Top ': (0, descriptor_1.unitsValue)(box.top, 'top'),
|
|
363
|
+
Left: (0, descriptor_1.unitsValue)(box.left, 'left'),
|
|
364
|
+
Btom: (0, descriptor_1.unitsValue)(box.bottom, 'bottom'),
|
|
365
|
+
Rght: (0, descriptor_1.unitsValue)(box.right, 'right'),
|
|
366
|
+
};
|
|
367
|
+
}
|
|
368
|
+
var corners = item.keyOriginBoxCorners;
|
|
369
|
+
if (corners && corners.length === 4) {
|
|
370
|
+
out.keyOriginBoxCorners = {
|
|
371
|
+
rectangleCornerA: { Hrzn: corners[0].x, Vrtc: corners[0].y },
|
|
372
|
+
rectangleCornerB: { Hrzn: corners[1].x, Vrtc: corners[1].y },
|
|
373
|
+
rectangleCornerC: { Hrzn: corners[2].x, Vrtc: corners[2].y },
|
|
374
|
+
rectangleCornerD: { Hrzn: corners[3].x, Vrtc: corners[3].y },
|
|
375
|
+
};
|
|
376
|
+
}
|
|
377
|
+
var transform = item.transform;
|
|
378
|
+
if (transform && transform.length === 6) {
|
|
379
|
+
out.Trnf = {
|
|
380
|
+
xx: transform[0],
|
|
381
|
+
xy: transform[1],
|
|
382
|
+
yx: transform[2],
|
|
383
|
+
yy: transform[3],
|
|
384
|
+
tx: transform[4],
|
|
385
|
+
ty: transform[5],
|
|
386
|
+
};
|
|
386
387
|
}
|
|
388
|
+
if (item.keyShapeInvalidated != null)
|
|
389
|
+
out.keyShapeInvalidated = item.keyShapeInvalidated;
|
|
390
|
+
out.keyOriginIndex = i;
|
|
387
391
|
}
|
|
388
392
|
(0, psdWriter_1.writeInt32)(writer, 1); // version
|
|
389
393
|
(0, descriptor_1.writeVersionAndDescriptor)(writer, '', 'null', desc);
|
|
@@ -855,7 +859,13 @@ function isQuiltWarp(warp) {
|
|
|
855
859
|
}
|
|
856
860
|
function encodeWarp(warp) {
|
|
857
861
|
var bounds = warp.bounds;
|
|
858
|
-
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: {
|
|
862
|
+
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
|
|
863
|
+
_classID: 'classFloatRect',
|
|
864
|
+
'Top ': bounds && bounds.top && bounds.top.value || 0,
|
|
865
|
+
Left: bounds && bounds.left && bounds.left.value || 0,
|
|
866
|
+
Btom: bounds && bounds.bottom && bounds.bottom.value || 0,
|
|
867
|
+
Rght: bounds && bounds.right && bounds.right.value || 0,
|
|
868
|
+
} :*/ {
|
|
859
869
|
'Top ': (0, descriptor_1.unitsValue)(bounds && bounds.top || { units: 'Pixels', value: 0 }, 'bounds.top'),
|
|
860
870
|
Left: (0, descriptor_1.unitsValue)(bounds && bounds.left || { units: 'Pixels', value: 0 }, 'bounds.left'),
|
|
861
871
|
Btom: (0, descriptor_1.unitsValue)(bounds && bounds.bottom || { units: 'Pixels', value: 0 }, 'bounds.bottom'),
|
|
@@ -1420,6 +1430,7 @@ function serializeFilterFXItem(f) {
|
|
|
1420
1430
|
'Rds ': uvRadius(f.filter),
|
|
1421
1431
|
}, filterID: 697 });
|
|
1422
1432
|
case 'gaussian blur': return __assign(__assign({}, base), { Fltr: {
|
|
1433
|
+
// _name: '高斯模糊', // Testing
|
|
1423
1434
|
_name: 'Gaussian Blur',
|
|
1424
1435
|
_classID: 'GsnB',
|
|
1425
1436
|
'Rds ': uvRadius(f.filter),
|
|
@@ -2032,18 +2043,6 @@ addHandler('LMsk', hasKey('userMask'), function (reader, target) {
|
|
|
2032
2043
|
(0, psdWriter_1.writeUint8)(writer, 128);
|
|
2033
2044
|
(0, psdWriter_1.writeZeros)(writer, 1);
|
|
2034
2045
|
});
|
|
2035
|
-
if (helpers_1.MOCK_HANDLERS) {
|
|
2036
|
-
addHandler('vowv', // appears with Lr16 section ?
|
|
2037
|
-
function (// appears with Lr16 section ?
|
|
2038
|
-
_) { return false; }, function (reader, target, left) {
|
|
2039
|
-
var value = (0, psdReader_1.readUint32)(reader); // always 2 ????
|
|
2040
|
-
reader;
|
|
2041
|
-
target;
|
|
2042
|
-
console.log('vowv', { value: value }, left());
|
|
2043
|
-
}, function (_writer, _target) {
|
|
2044
|
-
// TODO: write
|
|
2045
|
-
});
|
|
2046
|
-
}
|
|
2047
2046
|
if (helpers_1.MOCK_HANDLERS) {
|
|
2048
2047
|
addHandler('Patt', function (target) { return target._Patt !== undefined; }, function (reader, target, left) {
|
|
2049
2048
|
// console.log('additional info: Patt');
|