ag-psd 32.0.0 → 34.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/v24.7.0-x64-ef5a0af0/03e19709 +0 -0
- package/.v8-cache/v24.7.0-x64-ef5a0af0/05135617 +0 -0
- package/.v8-cache/v24.7.0-x64-ef5a0af0/1130885f +0 -0
- package/.v8-cache/v24.7.0-x64-ef5a0af0/226e2801 +0 -0
- package/.v8-cache/v24.7.0-x64-ef5a0af0/2a19133e +0 -0
- package/.v8-cache/v24.7.0-x64-ef5a0af0/4511bacf +0 -0
- package/.v8-cache/v24.7.0-x64-ef5a0af0/68416cb2 +0 -0
- package/.v8-cache/v24.7.0-x64-ef5a0af0/71df9cb3 +0 -0
- package/.v8-cache/v24.7.0-x64-ef5a0af0/7ea06cea +0 -0
- package/.v8-cache/v24.7.0-x64-ef5a0af0/87cf2209 +0 -0
- package/.v8-cache/v24.7.0-x64-ef5a0af0/932f0770 +0 -0
- package/.v8-cache/v24.7.0-x64-ef5a0af0/acc36e66 +0 -0
- package/.v8-cache/v24.7.0-x64-ef5a0af0/b3c2fab7 +0 -0
- package/.v8-cache/v24.7.0-x64-ef5a0af0/c0b789d2 +0 -0
- package/.v8-cache/v24.7.0-x64-ef5a0af0/c314aece +0 -0
- package/.v8-cache/v24.7.0-x64-ef5a0af0/cfc49f4f +0 -0
- package/.v8-cache/v24.7.0-x64-ef5a0af0/cff9434a +0 -0
- package/.v8-cache/v24.7.0-x64-ef5a0af0/d13d7610 +0 -0
- package/.v8-cache/v24.7.0-x64-ef5a0af0/dc86f000 +0 -0
- package/.v8-cache/v24.7.0-x64-ef5a0af0/e03e2acd +0 -0
- package/.v8-cache/v24.7.0-x64-ef5a0af0/e6745c2b +0 -0
- package/.v8-cache/v24.7.0-x64-ef5a0af0/e6b99945 +0 -0
- package/.v8-cache/v24.7.0-x64-ef5a0af0/eeeebdfe +0 -0
- package/.v8-cache/v24.7.0-x64-ef5a0af0/f6fd8125 +0 -0
- package/CHANGELOG.md +100 -0
- package/LICENSE +5 -0
- package/README.md +4 -7
- package/README_PSD.md +261 -84
- package/TODO.md +13 -84
- package/dist/abr.d.ts +11 -4
- package/dist/abr.js +362 -230
- package/dist/abr.js.map +1 -1
- package/dist/additionalInfo.d.ts +56 -2
- package/dist/additionalInfo.js +828 -361
- package/dist/additionalInfo.js.map +1 -1
- package/dist/ase.d.ts +6 -1
- package/dist/ase.js +61 -61
- package/dist/ase.js.map +1 -1
- package/dist/bundle.js +3321 -1364
- package/dist/descriptor.d.ts +28 -13
- package/dist/descriptor.js +295 -241
- package/dist/descriptor.js.map +1 -1
- package/dist/helpers.d.ts +7 -1
- package/dist/helpers.js +246 -4
- package/dist/helpers.js.map +1 -1
- package/dist/imageResources.d.ts +15 -3
- package/dist/imageResources.js +586 -144
- package/dist/imageResources.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/jpeg.js +8 -8
- package/dist/jpeg.js.map +1 -1
- package/dist/psd.d.ts +292 -19
- package/dist/psd.js.map +1 -1
- package/dist/psdReader.d.ts +10 -0
- package/dist/psdReader.js +424 -216
- package/dist/psdReader.js.map +1 -1
- package/dist/psdWriter.d.ts +2 -0
- package/dist/psdWriter.js +373 -113
- package/dist/psdWriter.js.map +1 -1
- package/dist/text.d.ts +32 -1
- package/dist/text.js +75 -6
- package/dist/text.js.map +1 -1
- package/dist/utf8.js +0 -3
- package/dist/utf8.js.map +1 -1
- package/dist-es/abr.d.ts +11 -4
- package/dist-es/abr.js +362 -230
- package/dist-es/abr.js.map +1 -1
- package/dist-es/additionalInfo.d.ts +56 -2
- package/dist-es/additionalInfo.js +828 -361
- package/dist-es/additionalInfo.js.map +1 -1
- package/dist-es/ase.d.ts +6 -1
- package/dist-es/ase.js +61 -61
- package/dist-es/ase.js.map +1 -1
- package/dist-es/descriptor.d.ts +28 -13
- package/dist-es/descriptor.js +295 -241
- package/dist-es/descriptor.js.map +1 -1
- package/dist-es/helpers.d.ts +7 -1
- package/dist-es/helpers.js +246 -4
- package/dist-es/helpers.js.map +1 -1
- package/dist-es/imageResources.d.ts +15 -3
- package/dist-es/imageResources.js +586 -144
- package/dist-es/imageResources.js.map +1 -1
- package/dist-es/index.d.ts +1 -0
- package/dist-es/index.js +1 -0
- package/dist-es/index.js.map +1 -1
- package/dist-es/jpeg.js +8 -8
- package/dist-es/jpeg.js.map +1 -1
- package/dist-es/psd.d.ts +292 -19
- package/dist-es/psd.js.map +1 -1
- package/dist-es/psdReader.d.ts +10 -0
- package/dist-es/psdReader.js +424 -216
- package/dist-es/psdReader.js.map +1 -1
- package/dist-es/psdWriter.d.ts +2 -0
- package/dist-es/psdWriter.js +373 -113
- package/dist-es/psdWriter.js.map +1 -1
- package/dist-es/text.d.ts +32 -1
- package/dist-es/text.js +75 -6
- package/dist-es/text.js.map +1 -1
- package/dist-es/utf8.js +0 -3
- package/dist-es/utf8.js.map +1 -1
- package/package.json +2 -2
- package/perf.js +312 -9
- package/src/abr.ts +382 -235
- package/src/additionalInfo.ts +1071 -482
- package/src/ase.ts +66 -61
- package/src/descriptor.ts +291 -242
- package/src/helpers.ts +266 -3
- package/src/imageResources.ts +736 -169
- package/src/index.ts +1 -0
- package/src/jpeg.ts +8 -8
- package/src/psd.ts +271 -32
- package/src/psdReader.ts +440 -221
- package/src/psdWriter.ts +402 -110
- package/src/text.ts +93 -7
- package/src/utf8.ts +0 -4
package/TODO.md
CHANGED
|
@@ -1,94 +1,23 @@
|
|
|
1
|
-
-
|
|
1
|
+
- Alpha and spot channel pixels (saved selections, spot colors) are thrown away on read (psdReader.ts:1124) and never written. The writer still writes their names and display info, so a written file can describe channels it doesn't contain.
|
|
2
|
+
- Composite transparency is lost in a few files (for example 4x4_8bit_rgba, adobehq_layers: 4 channels come back as 3). I haven't investigated why.
|
|
3
|
+
- Extra layer channel IDs beyond -1/-2/-3 are dropped.
|
|
4
|
+
- Per-layer XMP (shmd → cust → layerXMP) isn't kept; only layerTime is.
|
|
2
5
|
|
|
3
|
-
- writing 1, 16, 32 bit documents
|
|
4
|
-
'pths'
|
|
5
|
-
- split decoding layer data from reading the document
|
|
6
|
-
- writing paletted documents
|
|
7
|
-
- cleanup errors from tests (make list of drawings that should ignore those errors)
|
|
8
|
-
- writing zip/zip with prediction
|
|
9
6
|
|
|
7
|
+
- Lab, Multichannel and Duotone can't be read (19 corpus files) or written. Duotone could be read as grayscale while keeping its color mode data.
|
|
8
|
+
- 32-bit CMYK and 16-bit Indexed throw on read, and 32-bit CMYK can't be written.
|
|
9
|
+
- Patterns are only written as 8-bit RGB (psdWriter.ts:1175); the source mode and depth are lost.
|
|
10
|
+
- CMYK conversion ignores the embedded ICC profile and always uses the SWOP approximation.
|
|
10
11
|
|
|
11
|
-
-
|
|
12
|
-
- can we remove nameSource property ?
|
|
13
|
-
|
|
14
|
-
- improve vector fill / stroke help sections
|
|
15
|
-
|
|
16
|
-
check: https://github.com/psd-tools/psd-tools
|
|
17
|
-
check: https://github.com/TheNicker/libpsd
|
|
18
|
-
|
|
19
|
-
- zip with prediction: https://github.com/TheNicker/libpsd/blob/master/src/psd_zip.c
|
|
20
|
-
- also support saving with zip compression ?
|
|
21
|
-
|
|
12
|
+
- Not parsed: Filter Gallery (GEfc), Lens Correction (LnCr), and adjustments used as smart filters: Hue/Saturation (HStr), Exposure, Vibrance, Color Balance, Black & White, Photo Filter, Gradient Map, Selective Color, Threshold, Channel Mixer, Color Lookup, Posterize, Shadows/Highlights.
|
|
22
13
|
|
|
23
14
|
|
|
15
|
+
- Fuzzer
|
|
24
16
|
|
|
17
|
+
- can we remove sectionDivider property ?
|
|
18
|
+
- can we remove nameSource property ?
|
|
25
19
|
|
|
20
|
+
- improve vector fill / stroke help sections
|
|
26
21
|
|
|
27
22
|
|
|
28
23
|
- decompress image data in FEid section
|
|
29
|
-
|
|
30
|
-
```ts
|
|
31
|
-
if (!channelLength) throw new Error('filterEffect: Empty channel');
|
|
32
|
-
const compression = readUint16(reader);
|
|
33
|
-
const data = createImageDataBitDepth(right - left, bottom - top, depth, 1);
|
|
34
|
-
const end = reader.offset + channelLength - 2;
|
|
35
|
-
readData(reader, channelLength - 2, data, compression, data.width, data.height, depth, 0, false, 1);
|
|
36
|
-
if (reader.offset != end) throw new Error(`Invalid offset after readData ${reader.offset} ${end}`);
|
|
37
|
-
channels.push(data);
|
|
38
|
-
|
|
39
|
-
const top = readInt32(reader);
|
|
40
|
-
const left = readInt32(reader);
|
|
41
|
-
const bottom = readInt32(reader);
|
|
42
|
-
const right = readInt32(reader);
|
|
43
|
-
if (readUint32(reader)) throw new Error('filterEffect: 64 bit length is not supported');
|
|
44
|
-
const extraLength = readUint32(reader);
|
|
45
|
-
const compression = readUint16(reader);
|
|
46
|
-
const data = createImageDataBitDepth(right - left, bottom - top, depth, 1);
|
|
47
|
-
readData(reader, extraLength - 2, data, compression, data.width, data.height, depth, 0, false, 1);
|
|
48
|
-
target.filterEffectsMasks[target.filterEffectsMasks.length - 1].extra = { top, left, bottom, right, data };
|
|
49
|
-
```
|
|
50
|
-
|
|
51
|
-
```ts
|
|
52
|
-
export function decodeUtf16String(buffer: Uint8Array) {
|
|
53
|
-
let result = '';
|
|
54
|
-
|
|
55
|
-
for (let i = 0; i < buffer.byteLength;) {
|
|
56
|
-
const w1 = (buffer[i++] << 8) | buffer[i++];
|
|
57
|
-
|
|
58
|
-
if ((w1 & 0xF800) !== 0xD800) { // w1 < 0xD800 || w1 > 0xDFFF
|
|
59
|
-
result += String.fromCharCode(w1);
|
|
60
|
-
continue;
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
if ((w1 & 0xFC00) === 0xD800) { // w1 >= 0xD800 && w1 <= 0xDBFF
|
|
64
|
-
throw new Error('Invalid utf-16');
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
if (i === buffer.byteLength) {
|
|
68
|
-
throw new Error('Invalid utf-16');
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
const w2 = (buffer[i++] << 8) | buffer[i++];
|
|
72
|
-
|
|
73
|
-
if ((w2 & 0xFC00) !== 0xDC00) { // w2 < 0xDC00 || w2 > 0xDFFF)
|
|
74
|
-
throw new Error('Invalid utf-16');
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
result += String.fromCharCode(((w1 & 0x3ff) << 10) + (w2 & 0x3ff) + 0x10000);
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
return result;
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
export function encodeUtf16String(value: string) {
|
|
84
|
-
const buffer = new Uint8Array(value.length * 2);
|
|
85
|
-
|
|
86
|
-
for (let i = 0, j = 0; i < value.length; i++, j += 2) {
|
|
87
|
-
const word = value.charCodeAt(i);
|
|
88
|
-
buffer[j] = (word >> 8) & 0xff;
|
|
89
|
-
buffer[j + 1] = word & 0xff;
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
return buffer;
|
|
93
|
-
}
|
|
94
|
-
```
|
package/dist/abr.d.ts
CHANGED
|
@@ -85,6 +85,7 @@ interface DynamicBrushShape {
|
|
|
85
85
|
}
|
|
86
86
|
export interface Brush {
|
|
87
87
|
name: string;
|
|
88
|
+
group?: string[];
|
|
88
89
|
shape: BrushShape;
|
|
89
90
|
shapeDynamics?: {
|
|
90
91
|
sizeDynamics: BrushDynamics;
|
|
@@ -138,8 +139,8 @@ export interface Brush {
|
|
|
138
139
|
transfer?: {
|
|
139
140
|
flowDynamics: BrushDynamics;
|
|
140
141
|
opacityDynamics: BrushDynamics;
|
|
141
|
-
wetnessDynamics
|
|
142
|
-
mixDynamics
|
|
142
|
+
wetnessDynamics?: BrushDynamics;
|
|
143
|
+
mixDynamics?: BrushDynamics;
|
|
143
144
|
};
|
|
144
145
|
brushPose?: {
|
|
145
146
|
overrideAngle: boolean;
|
|
@@ -153,6 +154,7 @@ export interface Brush {
|
|
|
153
154
|
};
|
|
154
155
|
noise: boolean;
|
|
155
156
|
wetEdges: boolean;
|
|
157
|
+
buildUp: boolean;
|
|
156
158
|
protectTexture?: boolean;
|
|
157
159
|
spacing: number;
|
|
158
160
|
brushGroup?: undefined;
|
|
@@ -190,7 +192,12 @@ export interface Brush {
|
|
|
190
192
|
strength?: number;
|
|
191
193
|
};
|
|
192
194
|
}
|
|
193
|
-
export
|
|
195
|
+
export interface ReadAbrOptions {
|
|
194
196
|
logMissingFeatures?: boolean;
|
|
195
|
-
|
|
197
|
+
/** Throw on unsupported or invalid parts of the file instead of skipping them */
|
|
198
|
+
throwForMissingFeatures?: boolean;
|
|
199
|
+
/** Memory limit for decoded data in bytes (2GB by default), set to `undefined` explicitly to disable */
|
|
200
|
+
totalMemoryLimit?: number;
|
|
201
|
+
}
|
|
202
|
+
export declare function readAbr(buffer: ArrayBufferView, options?: ReadAbrOptions): Abr;
|
|
196
203
|
export {};
|