openjph-wasm
v0.1.0
Published
WebAssembly build of OpenJPH (HTJ2K / JPEG 2000 Part 15) with full multi-component encode and decode.
Maintainers
Readme
openjph-wasm
A WebAssembly build of OpenJPH (HTJ2K / JPEG 2000 Part 15) exposing both encode and decode, with full multi-component support — including independent components, which is what volumetric (z-as-components) imagery needs.
Why this exists
The widely-used @cornerstonejs/codec-openjph npm package is a frozen wrapper
(~2 years stale at the time of writing) that cannot round-trip independent
multi-component data: it silently keeps component 0 and replicates it across
all output components, losing planes 1..N. That is a limitation of that
wrapper, not of OpenJPH — current OpenJPH (0.30.x, very actively developed)
decodes multi-component data correctly.
openjph-wasm builds OpenJPH's current source itself, adds an encode wrapper,
and exposes a small typed API so volumetric / multi-plane HTJ2K chunks can be
encoded and decoded faithfully.
Install / build
OpenJPH is vendored as a git submodule and compiled with the official
emscripten/emsdk Docker image (no local emsdk needed):
git submodule update --init --recursive
npm install
npm run build # builds the wasm (Docker) then the TS
npm test # round-trips single- and multi-component dataUsage
import { encode, decode } from "openjph-wasm";
// `data` is planar, component-major: data[(c*height + y)*width + x]
const codestream = await encode({ data, width, height, components, reversible: true });
const img = await decode(codestream);
// img.components, img.width, img.height, img.bitDepth, img.isSigned
// img.data — planar, component-major typed arraycomponents map naturally to z-planes of a volumetric chunk. Lossless uses the
reversible 5/3 transform; pass { reversible: false, quality } for irreversible
9/7.
License
BSD-2-Clause, matching OpenJPH. See LICENSE.
