diff --git a/src/additionalInfo.ts b/src/additionalInfo.ts index b798e48..ba1b6d5 100644 --- a/src/additionalInfo.ts +++ b/src/additionalInfo.ts @@ -1893,6 +1893,15 @@ type SoLdDescriptorFilterItem = { _classID: 'LqFy', LqMe: Uint8Array; }; +} | { + filterID: 442; + Fltr: { + _name: 'Perspective Warp'; + _classID: 'perspectiveWarpTransform'; + quads: { indices: number[] }[]; + vertices: HrznVrtcDescriptor[]; + warpedVertices: HrznVrtcDescriptor[]; + } }); interface SoLdDescriptorFilter { @@ -2474,7 +2483,18 @@ function parseFilterFXItem(f: SoLdDescriptorFilterItem, options: ReadOptions): F liquifyMesh: f.Fltr.LqMe, }, }; - } + }; + case 'perspectiveWarpTransform': { + return { + ...base, + type: 'perspective warp', + filter: { + vertices: f.Fltr.vertices.map(v => ({ x: v.Hrzn.value, y: v.Vrtc.value })), + warpedVertices: f.Fltr.warpedVertices.map(v => ({ x: v.Hrzn.value, y: v.Vrtc.value })), + indexes: f.Fltr.quads.map(q => q.indices), + }, + }; + }; default: if (options.throwForMissingFeatures) { throw new Error(`Unknown filter classId: ${(f as any).Fltr._classID}`); diff --git a/src/index.ts b/src/index.ts index f7419dc..db74d30 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,12 +1,13 @@ import { Psd, ReadOptions, WriteOptions } from './psd'; import { PsdWriter, writePsd as writePsdInternal, getWriterBuffer, createWriter, getWriterBufferNoCopy } from './psdWriter'; import { PsdReader, readPsd as readPsdInternal, createReader } from './psdReader'; +import { fromByteArray } from 'base64-js'; + export * from './abr'; export * from './csh'; export { initializeCanvas } from './helpers'; export * from './psd'; -import { fromByteArray } from 'base64-js'; -export { PsdReader, PsdWriter }; +export type { PsdReader, PsdWriter }; interface BufferLike { buffer: ArrayBuffer; diff --git a/src/psd.ts b/src/psd.ts index 6b46be1..e78e075 100644 --- a/src/psd.ts +++ b/src/psd.ts @@ -1110,6 +1110,13 @@ type FilterVariant = { filter: { liquifyMesh: Uint8Array; }; +} | { + type: 'perspective warp'; + filter: { + indexes: number[][]; + vertices: { x: number; y: number; }[]; + warpedVertices: { x: number; y: number; }[]; + } }; /*