Skip to content

Commit b5a07d7

Browse files
authored
feat: add perspective warp (#213)
Add perspective warp
1 parent 401b3b1 commit b5a07d7

File tree

3 files changed

+31
-3
lines changed

3 files changed

+31
-3
lines changed

src/additionalInfo.ts

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1893,6 +1893,15 @@ type SoLdDescriptorFilterItem = {
18931893
_classID: 'LqFy',
18941894
LqMe: Uint8Array;
18951895
};
1896+
} | {
1897+
filterID: 442;
1898+
Fltr: {
1899+
_name: 'Perspective Warp';
1900+
_classID: 'perspectiveWarpTransform';
1901+
quads: { indices: number[] }[];
1902+
vertices: HrznVrtcDescriptor[];
1903+
warpedVertices: HrznVrtcDescriptor[];
1904+
}
18961905
});
18971906

18981907
interface SoLdDescriptorFilter {
@@ -2474,7 +2483,18 @@ function parseFilterFXItem(f: SoLdDescriptorFilterItem, options: ReadOptions): F
24742483
liquifyMesh: f.Fltr.LqMe,
24752484
},
24762485
};
2477-
}
2486+
};
2487+
case 'perspectiveWarpTransform': {
2488+
return {
2489+
...base,
2490+
type: 'perspective warp',
2491+
filter: {
2492+
vertices: f.Fltr.vertices.map(v => ({ x: v.Hrzn.value, y: v.Vrtc.value })),
2493+
warpedVertices: f.Fltr.warpedVertices.map(v => ({ x: v.Hrzn.value, y: v.Vrtc.value })),
2494+
indexes: f.Fltr.quads.map(q => q.indices),
2495+
},
2496+
};
2497+
};
24782498
default:
24792499
if (options.throwForMissingFeatures) {
24802500
throw new Error(`Unknown filter classId: ${(f as any).Fltr._classID}`);

src/index.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
11
import { Psd, ReadOptions, WriteOptions } from './psd';
22
import { PsdWriter, writePsd as writePsdInternal, getWriterBuffer, createWriter, getWriterBufferNoCopy } from './psdWriter';
33
import { PsdReader, readPsd as readPsdInternal, createReader } from './psdReader';
4+
import { fromByteArray } from 'base64-js';
5+
46
export * from './abr';
57
export * from './csh';
68
export { initializeCanvas } from './helpers';
79
export * from './psd';
8-
import { fromByteArray } from 'base64-js';
9-
export { PsdReader, PsdWriter };
10+
export type { PsdReader, PsdWriter };
1011

1112
interface BufferLike {
1213
buffer: ArrayBuffer;

src/psd.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1119,6 +1119,13 @@ type FilterVariant = {
11191119
filter: {
11201120
liquifyMesh: Uint8Array;
11211121
};
1122+
} | {
1123+
type: 'perspective warp';
1124+
filter: {
1125+
indexes: number[][];
1126+
vertices: { x: number; y: number; }[];
1127+
warpedVertices: { x: number; y: number; }[];
1128+
}
11221129
};
11231130

11241131
/*

0 commit comments

Comments
 (0)