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.
Files changed (117) hide show
  1. package/.v8-cache/v24.7.0-x64-ef5a0af0/03e19709 +0 -0
  2. package/.v8-cache/v24.7.0-x64-ef5a0af0/05135617 +0 -0
  3. package/.v8-cache/v24.7.0-x64-ef5a0af0/1130885f +0 -0
  4. package/.v8-cache/v24.7.0-x64-ef5a0af0/226e2801 +0 -0
  5. package/.v8-cache/v24.7.0-x64-ef5a0af0/2a19133e +0 -0
  6. package/.v8-cache/v24.7.0-x64-ef5a0af0/4511bacf +0 -0
  7. package/.v8-cache/v24.7.0-x64-ef5a0af0/68416cb2 +0 -0
  8. package/.v8-cache/v24.7.0-x64-ef5a0af0/71df9cb3 +0 -0
  9. package/.v8-cache/v24.7.0-x64-ef5a0af0/7ea06cea +0 -0
  10. package/.v8-cache/v24.7.0-x64-ef5a0af0/87cf2209 +0 -0
  11. package/.v8-cache/v24.7.0-x64-ef5a0af0/932f0770 +0 -0
  12. package/.v8-cache/v24.7.0-x64-ef5a0af0/acc36e66 +0 -0
  13. package/.v8-cache/v24.7.0-x64-ef5a0af0/b3c2fab7 +0 -0
  14. package/.v8-cache/v24.7.0-x64-ef5a0af0/c0b789d2 +0 -0
  15. package/.v8-cache/v24.7.0-x64-ef5a0af0/c314aece +0 -0
  16. package/.v8-cache/v24.7.0-x64-ef5a0af0/cfc49f4f +0 -0
  17. package/.v8-cache/v24.7.0-x64-ef5a0af0/cff9434a +0 -0
  18. package/.v8-cache/v24.7.0-x64-ef5a0af0/d13d7610 +0 -0
  19. package/.v8-cache/v24.7.0-x64-ef5a0af0/dc86f000 +0 -0
  20. package/.v8-cache/v24.7.0-x64-ef5a0af0/e03e2acd +0 -0
  21. package/.v8-cache/v24.7.0-x64-ef5a0af0/e6745c2b +0 -0
  22. package/.v8-cache/v24.7.0-x64-ef5a0af0/e6b99945 +0 -0
  23. package/.v8-cache/v24.7.0-x64-ef5a0af0/eeeebdfe +0 -0
  24. package/.v8-cache/v24.7.0-x64-ef5a0af0/f6fd8125 +0 -0
  25. package/CHANGELOG.md +100 -0
  26. package/LICENSE +5 -0
  27. package/README.md +4 -7
  28. package/README_PSD.md +261 -84
  29. package/TODO.md +13 -84
  30. package/dist/abr.d.ts +11 -4
  31. package/dist/abr.js +362 -230
  32. package/dist/abr.js.map +1 -1
  33. package/dist/additionalInfo.d.ts +56 -2
  34. package/dist/additionalInfo.js +828 -361
  35. package/dist/additionalInfo.js.map +1 -1
  36. package/dist/ase.d.ts +6 -1
  37. package/dist/ase.js +61 -61
  38. package/dist/ase.js.map +1 -1
  39. package/dist/bundle.js +3321 -1364
  40. package/dist/descriptor.d.ts +28 -13
  41. package/dist/descriptor.js +295 -241
  42. package/dist/descriptor.js.map +1 -1
  43. package/dist/helpers.d.ts +7 -1
  44. package/dist/helpers.js +246 -4
  45. package/dist/helpers.js.map +1 -1
  46. package/dist/imageResources.d.ts +15 -3
  47. package/dist/imageResources.js +586 -144
  48. package/dist/imageResources.js.map +1 -1
  49. package/dist/index.d.ts +1 -0
  50. package/dist/index.js +1 -0
  51. package/dist/index.js.map +1 -1
  52. package/dist/jpeg.js +8 -8
  53. package/dist/jpeg.js.map +1 -1
  54. package/dist/psd.d.ts +292 -19
  55. package/dist/psd.js.map +1 -1
  56. package/dist/psdReader.d.ts +10 -0
  57. package/dist/psdReader.js +424 -216
  58. package/dist/psdReader.js.map +1 -1
  59. package/dist/psdWriter.d.ts +2 -0
  60. package/dist/psdWriter.js +373 -113
  61. package/dist/psdWriter.js.map +1 -1
  62. package/dist/text.d.ts +32 -1
  63. package/dist/text.js +75 -6
  64. package/dist/text.js.map +1 -1
  65. package/dist/utf8.js +0 -3
  66. package/dist/utf8.js.map +1 -1
  67. package/dist-es/abr.d.ts +11 -4
  68. package/dist-es/abr.js +362 -230
  69. package/dist-es/abr.js.map +1 -1
  70. package/dist-es/additionalInfo.d.ts +56 -2
  71. package/dist-es/additionalInfo.js +828 -361
  72. package/dist-es/additionalInfo.js.map +1 -1
  73. package/dist-es/ase.d.ts +6 -1
  74. package/dist-es/ase.js +61 -61
  75. package/dist-es/ase.js.map +1 -1
  76. package/dist-es/descriptor.d.ts +28 -13
  77. package/dist-es/descriptor.js +295 -241
  78. package/dist-es/descriptor.js.map +1 -1
  79. package/dist-es/helpers.d.ts +7 -1
  80. package/dist-es/helpers.js +246 -4
  81. package/dist-es/helpers.js.map +1 -1
  82. package/dist-es/imageResources.d.ts +15 -3
  83. package/dist-es/imageResources.js +586 -144
  84. package/dist-es/imageResources.js.map +1 -1
  85. package/dist-es/index.d.ts +1 -0
  86. package/dist-es/index.js +1 -0
  87. package/dist-es/index.js.map +1 -1
  88. package/dist-es/jpeg.js +8 -8
  89. package/dist-es/jpeg.js.map +1 -1
  90. package/dist-es/psd.d.ts +292 -19
  91. package/dist-es/psd.js.map +1 -1
  92. package/dist-es/psdReader.d.ts +10 -0
  93. package/dist-es/psdReader.js +424 -216
  94. package/dist-es/psdReader.js.map +1 -1
  95. package/dist-es/psdWriter.d.ts +2 -0
  96. package/dist-es/psdWriter.js +373 -113
  97. package/dist-es/psdWriter.js.map +1 -1
  98. package/dist-es/text.d.ts +32 -1
  99. package/dist-es/text.js +75 -6
  100. package/dist-es/text.js.map +1 -1
  101. package/dist-es/utf8.js +0 -3
  102. package/dist-es/utf8.js.map +1 -1
  103. package/package.json +2 -2
  104. package/perf.js +312 -9
  105. package/src/abr.ts +382 -235
  106. package/src/additionalInfo.ts +1071 -482
  107. package/src/ase.ts +66 -61
  108. package/src/descriptor.ts +291 -242
  109. package/src/helpers.ts +266 -3
  110. package/src/imageResources.ts +736 -169
  111. package/src/index.ts +1 -0
  112. package/src/jpeg.ts +8 -8
  113. package/src/psd.ts +271 -32
  114. package/src/psdReader.ts +440 -221
  115. package/src/psdWriter.ts +402 -110
  116. package/src/text.ts +93 -7
  117. package/src/utf8.ts +0 -4
package/TODO.md CHANGED
@@ -1,94 +1,23 @@
1
- - remove RAW_IMAGE_DATA, use raw data instead (change tests to use get functions)
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
- - can we remove sectionDivider property ?
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: BrushDynamics;
142
- mixDynamics: BrushDynamics;
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 declare function readAbr(buffer: ArrayBufferView, options?: {
195
+ export interface ReadAbrOptions {
194
196
  logMissingFeatures?: boolean;
195
- }): Abr;
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 {};