ag-psd 28.4.0 → 28.5.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 (47) hide show
  1. package/.v8-cache/v22.13.1-x64-00250a7c/7ea06cea +0 -0
  2. package/.v8-cache/v22.13.1-x64-00250a7c/b3c2fab7 +0 -0
  3. package/.v8-cache/v22.13.1-x64-00250a7c/c314aece +0 -0
  4. package/.v8-cache/v22.13.1-x64-00250a7c/cd260961 +0 -0
  5. package/.v8-cache/v22.13.1-x64-00250a7c/e03e2acd +0 -0
  6. package/.v8-cache/v22.13.1-x64-00250a7c/e6745c2b +0 -0
  7. package/.v8-cache/v22.13.1-x64-00250a7c/e6b99945 +0 -0
  8. package/.v8-cache/v22.13.1-x64-00250a7c/eeeebdfe +0 -0
  9. package/.v8-cache/v22.13.1-x64-00250a7c/fb01f274 +0 -0
  10. package/CHANGELOG.md +4 -0
  11. package/README.md +0 -1
  12. package/dist/abr.d.ts +56 -4
  13. package/dist/abr.js +85 -16
  14. package/dist/abr.js.map +1 -1
  15. package/dist/additionalInfo.js +90 -8
  16. package/dist/additionalInfo.js.map +1 -1
  17. package/dist/ase.d.ts +32 -0
  18. package/dist/ase.js +83 -0
  19. package/dist/ase.js.map +1 -0
  20. package/dist/bundle.js +2326 -52
  21. package/dist/descriptor.d.ts +35 -0
  22. package/dist/descriptor.js.map +1 -1
  23. package/dist/psd.d.ts +23 -0
  24. package/dist/psd.js.map +1 -1
  25. package/dist/psdReader.js +3 -3
  26. package/dist/psdReader.js.map +1 -1
  27. package/dist-es/abr.d.ts +56 -4
  28. package/dist-es/abr.js +85 -16
  29. package/dist-es/abr.js.map +1 -1
  30. package/dist-es/additionalInfo.js +90 -8
  31. package/dist-es/additionalInfo.js.map +1 -1
  32. package/dist-es/ase.d.ts +32 -0
  33. package/dist-es/ase.js +79 -0
  34. package/dist-es/ase.js.map +1 -0
  35. package/dist-es/descriptor.d.ts +35 -0
  36. package/dist-es/descriptor.js.map +1 -1
  37. package/dist-es/psd.d.ts +23 -0
  38. package/dist-es/psd.js.map +1 -1
  39. package/dist-es/psdReader.js +3 -3
  40. package/dist-es/psdReader.js.map +1 -1
  41. package/package.json +1 -1
  42. package/src/abr.ts +216 -26
  43. package/src/additionalInfo.ts +97 -8
  44. package/src/ase.ts +116 -0
  45. package/src/descriptor.ts +33 -0
  46. package/src/psd.ts +20 -0
  47. package/src/psdReader.ts +3 -3
@@ -4,7 +4,7 @@ import { clamp, createEnum, layerColors, MOCK_HANDLERS } from './helpers';
4
4
  import { LayerAdditionalInfo, BezierPath, Psd, BrightnessAdjustment, ExposureAdjustment, VibranceAdjustment, ColorBalanceAdjustment, BlackAndWhiteAdjustment, PhotoFilterAdjustment, ChannelMixerChannel, ChannelMixerAdjustment, PosterizeAdjustment, ThresholdAdjustment, GradientMapAdjustment, CMYK, SelectiveColorAdjustment, ColorLookupAdjustment, LevelsAdjustmentChannel, LevelsAdjustment, CurvesAdjustment, CurvesAdjustmentChannel, HueSaturationAdjustment, HueSaturationAdjustmentChannel, PresetInfo, Color, ColorBalanceValues, WriteOptions, LinkedFile, PlacedLayerType, Warp, KeyDescriptorItem, BooleanOperation, LayerEffectsInfo, Annotation, LayerVectorMask, AnimationFrame, Timeline, PlacedLayerFilter, UnitsValue, Filter, PlacedLayer, ReadOptions, Layer } from './psd';
5
5
  import { PsdReader, readSignature, readUnicodeString, skipBytes, readUint32, readUint8, readFloat64, readUint16, readBytes, readInt16, checkSignature, readFloat32, readFixedPointPath32, readSection, readColor, readInt32, readPascalString, readUnicodeStringWithLength, readAsciiString, readPattern, readLayerInfo } from './psdReader';
6
6
  import { PsdWriter, writeZeros, writeSignature, writeBytes, writeUint32, writeUint16, writeFloat64, writeUint8, writeInt16, writeFloat32, writeFixedPointPath32, writeUnicodeString, writeSection, writeUnicodeStringWithPadding, writeColor, writePascalString, writeInt32 } from './psdWriter';
7
- import { Annt, BlnM, DescriptorColor, DescriptorUnitsValue, parsePercent, parseUnits, parseUnitsOrNumber, QuiltWarpDescriptor, strokeStyleLineAlignment, strokeStyleLineCapType, strokeStyleLineJoinType, TextDescriptor, textGridding, unitsPercent, unitsValue, WarpDescriptor, warpStyle, writeVersionAndDescriptor, readVersionAndDescriptor, StrokeDescriptor, Ornt, horzVrtcToXY, LmfxDescriptor, Lfx2Descriptor, FrameListDescriptor, TimelineDescriptor, FrameDescriptor, xyToHorzVrtc, serializeEffects, parseEffects, parseColor, serializeColor, serializeVectorContent, parseVectorContent, parseTrackList, serializeTrackList, FractionDescriptor, BlrM, BlrQ, SmBQ, SmBM, DspM, UndA, Cnvr, RplS, SphM, Wvtp, ZZTy, Dstr, Chnl, MztT, Lns, blurType, DfsM, ExtT, ExtR, FlCl, CntE, WndM, Drct, IntE, IntC, FlMd, unitsPercentF, frac, ClrS, descBoundsToBounds, boundsToDescBounds, presetKindType, gradientInterpolationMethodType } from './descriptor';
7
+ import { Annt, BlnM, DescriptorColor, DescriptorUnitsValue, parsePercent, parseUnits, parseUnitsOrNumber, QuiltWarpDescriptor, strokeStyleLineAlignment, strokeStyleLineCapType, strokeStyleLineJoinType, TextDescriptor, textGridding, unitsPercent, unitsValue, WarpDescriptor, warpStyle, writeVersionAndDescriptor, readVersionAndDescriptor, StrokeDescriptor, Ornt, horzVrtcToXY, LmfxDescriptor, Lfx2Descriptor, FrameListDescriptor, TimelineDescriptor, FrameDescriptor, xyToHorzVrtc, serializeEffects, parseEffects, parseColor, serializeColor, serializeVectorContent, parseVectorContent, parseTrackList, serializeTrackList, FractionDescriptor, BlrM, BlrQ, SmBQ, SmBM, DspM, UndA, Cnvr, RplS, SphM, Wvtp, ZZTy, Dstr, Chnl, MztT, Lns, blurType, DfsM, ExtT, ExtR, FlCl, CntE, WndM, Drct, IntE, IntC, FlMd, unitsPercentF, frac, ClrS, descBoundsToBounds, boundsToDescBounds, presetKindType, gradientInterpolationMethodType, PxScDescriptor } from './descriptor';
8
8
  import { serializeEngineData, parseEngineData } from './engineData';
9
9
  import { encodeEngineData, decodeEngineData } from './text';
10
10
  import { decodeEngineData2 } from './engineData2';
@@ -978,6 +978,76 @@ addHandler(
978
978
  },
979
979
  );
980
980
 
981
+ addHandler(
982
+ 'PxSc',
983
+ () => false,
984
+ (reader, target) => {
985
+ const desc = readVersionAndDescriptor(reader, true) as PxScDescriptor;
986
+ // console.log('PxSc', require('util').inspect(desc, false, 99, true));
987
+
988
+ if (desc.pixelSourceType === 1986285651) {
989
+ target.pixelSource = {
990
+ type: 'vdPS',
991
+ origin: { x: desc.origin.Hrzn, y: desc.origin.Vrtc },
992
+ interpretation: {
993
+ interpretAlpha: desc.interpretation.interpretAlpha.split('.')[1] as any,
994
+ profile: desc.interpretation.profile,
995
+ },
996
+ frameReader: {
997
+ type: 'QTFR',
998
+ link: {
999
+ name: desc.frameReader['Lnk ']['Nm '],
1000
+ fullPath: desc.frameReader['Lnk '].fullPath,
1001
+ originalPath: desc.frameReader['Lnk '].originalPath,
1002
+ relativePath: desc.frameReader['Lnk '].relPath,
1003
+ alias: desc.frameReader['Lnk '].alis,
1004
+ },
1005
+ mediaDescriptor: desc.frameReader.mediaDescriptor,
1006
+ },
1007
+ showAlteredVideo: desc.showAlteredVideo,
1008
+ };
1009
+ } else {
1010
+ reader.log(`Unknown pixelSourceType`);
1011
+ }
1012
+ },
1013
+ (writer, target) => {
1014
+ const source = target.pixelSource!;
1015
+ const desc: PxScDescriptor = {
1016
+ _name: '',
1017
+ _classID: 'PixelSource',
1018
+ pixelSourceType: 1986285651, // vdP
1019
+ descVersion: 1,
1020
+ origin: { Hrzn: source.origin.x, Vrtc: source.origin.y },
1021
+ interpretation: {
1022
+ _name: '',
1023
+ _classID: 'footageInterpretation',
1024
+ Vrsn: 1,
1025
+ interpretAlpha: `alphaInterpretation.${source.interpretation.interpretAlpha}` as any,
1026
+ profile: source.interpretation.profile,
1027
+ },
1028
+ frameReader: {
1029
+ _name: '',
1030
+ _classID: 'FrameReader',
1031
+ frameReaderType: 1364477522, // QTF
1032
+ descVersion: 1,
1033
+ 'Lnk ': {
1034
+ _name: '',
1035
+ _classID: 'ExternalFileLink',
1036
+ descVersion: 2,
1037
+ 'Nm ': source.frameReader.link.name,
1038
+ fullPath: source.frameReader.link.fullPath,
1039
+ originalPath: source.frameReader.link.originalPath,
1040
+ alis: source.frameReader.link.alias,
1041
+ relPath: source.frameReader.link.relativePath,
1042
+ },
1043
+ mediaDescriptor: source.frameReader.mediaDescriptor,
1044
+ },
1045
+ showAlteredVideo: source.showAlteredVideo,
1046
+ };
1047
+ writeVersionAndDescriptor(writer, '', 'PixelSource', desc);
1048
+ },
1049
+ );
1050
+
981
1051
  addHandler(
982
1052
  'vstk',
983
1053
  hasKey('vectorStroke'),
@@ -3627,6 +3697,8 @@ if (MOCK_HANDLERS) {
3627
3697
 
3628
3698
  /*
3629
3699
  interface CAIDesc {
3700
+ _name: '';
3701
+ _classID: 'null';
3630
3702
  enab: boolean;
3631
3703
  generationalGuid: string;
3632
3704
  }
@@ -3636,15 +3708,15 @@ addHandler(
3636
3708
  () => false,
3637
3709
  (reader, _target, left) => {
3638
3710
  const version = readUint32(reader); // 3
3639
- const desc = readVersionAndDescriptor(reader) as CAIDesc;
3711
+ const desc = readVersionAndDescriptor(reader, true) as CAIDesc;
3712
+ console.log('CAI version', version);
3640
3713
  console.log('CAI', require('util').inspect(desc, false, 99, true));
3641
- console.log('CAI', { version });
3642
3714
  console.log('CAI left', readBytes(reader, left())); // 8 bytes left, all zeroes
3643
3715
  },
3644
3716
  (_writer, _target) => {
3645
3717
  },
3646
3718
  );
3647
- */
3719
+ // */
3648
3720
 
3649
3721
  if (MOCK_HANDLERS) {
3650
3722
  addHandler(
@@ -3659,11 +3731,25 @@ if (MOCK_HANDLERS) {
3659
3731
  );
3660
3732
  }
3661
3733
 
3734
+ // interface OCIODescriptor {
3735
+ // _name: '';
3736
+ // _classID: 'documentColorManagementInfo';
3737
+ // 'Knd ': 'icc';
3738
+ // ocio_display_view: {
3739
+ // _name: '';
3740
+ // _classID: 'viewColorManagementInfo';
3741
+ // display: string;
3742
+ // view: string;
3743
+ // };
3744
+ // }
3745
+
3662
3746
  if (MOCK_HANDLERS) {
3663
3747
  addHandler(
3664
- 'OCIO', // generative tech?
3748
+ 'OCIO', // document color management info
3665
3749
  target => (target as any)._OCIO !== undefined,
3666
3750
  (reader, target, left) => {
3751
+ // const desc = readVersionAndDescriptor(reader, true) as OCIODescriptor;
3752
+ // console.log('OCIO', require('util').inspect(desc, false, 99, true));
3667
3753
  (target as any)._OCIO = readBytes(reader, left());
3668
3754
  },
3669
3755
  (writer, target) => {
@@ -3672,8 +3758,11 @@ if (MOCK_HANDLERS) {
3672
3758
  );
3673
3759
  }
3674
3760
 
3675
- // interface GenIDesc {
3761
+ // interface GenIDescriptor {
3762
+ // _name: '';
3763
+ // _classID: 'genTechInfo';
3676
3764
  // isUsingGenTech: number;
3765
+ // externalModelList?: [];
3677
3766
  // }
3678
3767
 
3679
3768
  if (MOCK_HANDLERS) {
@@ -3681,9 +3770,9 @@ if (MOCK_HANDLERS) {
3681
3770
  'GenI', // generative tech
3682
3771
  target => (target as any)._GenI !== undefined,
3683
3772
  (reader, target, left) => {
3773
+ const desc = readVersionAndDescriptor(reader, true); // as GenIDescriptor;
3774
+ console.log('GenI', require('util').inspect(desc, false, 99, true));
3684
3775
  (target as any)._GenI = readBytes(reader, left());
3685
- // const desc = readVersionAndDescriptor(reader) as GenIDesc;
3686
- // console.log('GenI', require('util').inspect(desc, false, 99, true));
3687
3776
  },
3688
3777
  (writer, target) => {
3689
3778
  writeBytes(writer, (target as any)._GenI);
package/src/ase.ts ADDED
@@ -0,0 +1,116 @@
1
+ import { createReader, readFloat32, readSignature, readUint16, readUint32, readUnicodeStringWithLength } from './psdReader';
2
+
3
+ export type AseColorType = 'global' | 'spot' | 'normal';
4
+
5
+ export interface AseColor {
6
+ name: string;
7
+ color: {
8
+ r: number;
9
+ g: number;
10
+ b: number;
11
+ type: AseColorType;
12
+ } | {
13
+ c: number;
14
+ m: number;
15
+ y: number;
16
+ k: number;
17
+ type: AseColorType;
18
+ } | {
19
+ k: number;
20
+ type: AseColorType;
21
+ } | {
22
+ l: number;
23
+ a: number;
24
+ b: number;
25
+ type: AseColorType;
26
+ };
27
+ }
28
+
29
+ export interface AseGroup {
30
+ name: string;
31
+ colors: AseColor[];
32
+ }
33
+
34
+ export interface Ase {
35
+ colors: (AseGroup | AseColor)[];
36
+ }
37
+
38
+ export function readAse(buffer: ArrayBufferView): Ase {
39
+ const reader = createReader(buffer.buffer, buffer.byteOffset, buffer.byteLength);
40
+ const signature = readSignature(reader); // ASEF
41
+ if (signature !== 'ASEF') throw new Error('Invalid signature');
42
+ const versionMajor = readUint16(reader); // 1
43
+ const versionMinor = readUint16(reader); // 0
44
+ if (versionMajor !== 1 || versionMinor !== 0) throw new Error('Invalid version');
45
+ const blocksCount = readUint32(reader);
46
+ const colorTypes: AseColorType[] = ['global', 'spot', 'normal'];
47
+ const ase: Ase = { colors: [] };
48
+ let group: Ase | AseGroup = ase;
49
+
50
+ for (let i = 0; i < blocksCount; i++) {
51
+ const type = readUint16(reader);
52
+ const length = readUint32(reader);
53
+ const end = reader.offset + length;
54
+
55
+ switch (type) {
56
+ case 0x0001: { // color
57
+ const nameLength = readUint16(reader);
58
+ const name = readUnicodeStringWithLength(reader, nameLength);
59
+ const colorMode = readSignature(reader);
60
+ let color: any;
61
+ switch (colorMode) {
62
+ case 'RGB ':
63
+ color = {
64
+ r: readFloat32(reader),
65
+ g: readFloat32(reader),
66
+ b: readFloat32(reader),
67
+ type: colorTypes[readUint16(reader)],
68
+ };
69
+ break;
70
+ case 'CMYK':
71
+ color = {
72
+ c: readFloat32(reader),
73
+ m: readFloat32(reader),
74
+ y: readFloat32(reader),
75
+ k: readFloat32(reader),
76
+ type: colorTypes[readUint16(reader)],
77
+ };
78
+ break;
79
+ case 'Gray':
80
+ color = {
81
+ k: readFloat32(reader),
82
+ type: colorTypes[readUint16(reader)],
83
+ };
84
+ break;
85
+ case 'LAB ':
86
+ color = {
87
+ l: readFloat32(reader),
88
+ a: readFloat32(reader),
89
+ b: readFloat32(reader),
90
+ type: colorTypes[readUint16(reader)],
91
+ };
92
+ break;
93
+ default:
94
+ throw new Error('Invalid color mode');
95
+ }
96
+ group.colors.push({ name, color });
97
+ break;
98
+ }
99
+ case 0xC001: { // group start
100
+ const nameLength = readUint16(reader);
101
+ const name = readUnicodeStringWithLength(reader, nameLength);
102
+ ase.colors.push(group = { name, colors: [] });
103
+ break;
104
+ }
105
+ case 0xC002: // group end
106
+ group = ase;
107
+ break;
108
+ default:
109
+ throw new Error('Invalid block type');
110
+ }
111
+
112
+ reader.offset = end;
113
+ }
114
+
115
+ return ase;
116
+ }
package/src/descriptor.ts CHANGED
@@ -1014,6 +1014,39 @@ export interface FrameListDescriptor {
1014
1014
  LaSt: FrameDescriptor[];
1015
1015
  }
1016
1016
 
1017
+ export interface PxScDescriptor {
1018
+ _name: '';
1019
+ _classID: 'PixelSource';
1020
+ pixelSourceType: 1986285651; // vdPS
1021
+ descVersion: 1;
1022
+ origin: { Hrzn: number; Vrtc: number; };
1023
+ interpretation: {
1024
+ _name: '';
1025
+ _classID: 'footageInterpretation';
1026
+ Vrsn: 1;
1027
+ interpretAlpha: 'alphaInterpretation.straight';
1028
+ profile: Uint8Array;
1029
+ };
1030
+ frameReader: {
1031
+ _name: '';
1032
+ _classID: 'FrameReader';
1033
+ frameReaderType: 1364477522; // QTFR
1034
+ descVersion: 1;
1035
+ 'Lnk ': {
1036
+ _name: '';
1037
+ _classID: 'ExternalFileLink';
1038
+ descVersion: 2;
1039
+ 'Nm ': string;
1040
+ fullPath: string;
1041
+ originalPath: string;
1042
+ alis: string;
1043
+ relPath: string;
1044
+ };
1045
+ mediaDescriptor: string;
1046
+ };
1047
+ showAlteredVideo: boolean;
1048
+ }
1049
+
1017
1050
  export function horzVrtcToXY(hv: HrznVrtcDescriptor): { x: number; y: number; } {
1018
1051
  return { x: hv.Hrzn, y: hv.Vrtc };
1019
1052
  }
package/src/psd.ts CHANGED
@@ -1488,6 +1488,26 @@ export interface LayerAdditionalInfo {
1488
1488
  ranges: { sourceRange: number[]; destRange: number[]; }[];
1489
1489
  };
1490
1490
  vowv?: number; // ???
1491
+ pixelSource?: {
1492
+ type: 'vdPS';
1493
+ origin: { x: number; y: number; };
1494
+ interpretation: {
1495
+ interpretAlpha: string; // 'straight' | ...;
1496
+ profile: Uint8Array;
1497
+ };
1498
+ frameReader: {
1499
+ type: 'QTFR';
1500
+ link: {
1501
+ name: string;
1502
+ fullPath: string;
1503
+ originalPath: string;
1504
+ relativePath: string;
1505
+ alias: string;
1506
+ };
1507
+ mediaDescriptor: string;
1508
+ };
1509
+ showAlteredVideo: boolean;
1510
+ };
1491
1511
 
1492
1512
  // Base64 encoded raw EngineData, currently just kept in original state to support
1493
1513
  // loading and modifying PSD file without breaking text layers.
package/src/psdReader.ts CHANGED
@@ -1273,16 +1273,16 @@ export function readPattern(reader: PsdReader): PatternInfo {
1273
1273
  }
1274
1274
  } else if (compressionMode === 1) {
1275
1275
  const pixelData: PixelData = { data, width, height };
1276
- const tempData: PixelData = { data: new Uint8Array(width * height), width, height };
1276
+ const tempData: PixelData = { data: new Uint8Array(w * h), width: w, height: h };
1277
1277
  const cdataReader = createReader(cdata.buffer, cdata.byteOffset, cdata.byteLength);
1278
1278
 
1279
1279
  if (colorMode === ColorMode.RGB && ch < 3) {
1280
- readDataRLE(cdataReader, tempData, width, height, 8, 1, [0], false);
1280
+ readDataRLE(cdataReader, tempData, w, h, 8, 1, [0], false);
1281
1281
  copyChannelToRGBA(tempData, pixelData, ox, oy, ch);
1282
1282
  }
1283
1283
 
1284
1284
  if (colorMode === ColorMode.Grayscale && ch < 1) {
1285
- readDataRLE(cdataReader, tempData, width, height, 8, 1, [0], false);
1285
+ readDataRLE(cdataReader, tempData, w, h, 8, 1, [0], false);
1286
1286
  copyChannelToRGBA(tempData, pixelData, ox, oy, 0);
1287
1287
  setupGrayscale(pixelData);
1288
1288
  }