@cornerstonejs/codec-libjxl
v1.1.1
Published
WASM build of libjxl (JPEG XL) for DICOM, with the decoder and encoder as separate modules
Downloads
6,172
Readme
@cornerstonejs/codec-libjxl
JavaScript/WebAssembly build of libjxl with separate decoder and encoder modules for JPEG XL DICOM images.
Installing
Using npm:
npm install @cornerstonejs/codec-libjxlUsing yarn:
yarn add @cornerstonejs/codec-libjxlUsage
The package exports separate JavaScript loaders and WASM binaries for decoding and encoding:
@cornerstonejs/codec-libjxl/decodewasmjs@cornerstonejs/codec-libjxl/decodewasm@cornerstonejs/codec-libjxl/encodewasmjs@cornerstonejs/codec-libjxl/encodewasm
Decoder
import createJpegXLDecoder from '@cornerstonejs/codec-libjxl/decodewasmjs';
const codec = await createJpegXLDecoder();
const decoder = new codec.JpegXLDecoder();
decoder.getEncodedBuffer(bitstream.length).set(bitstream);
decoder.decode();
const frameInfo = decoder.getFrameInfo();
const decodedPixels = decoder.getDecodedBuffer();Encoder
import createJpegXLEncoder from '@cornerstonejs/codec-libjxl/encodewasmjs';
const codec = await createJpegXLEncoder();
const encoder = new codec.JpegXLEncoder();
const frameInfo = {
width,
height,
bitsPerSample,
componentCount,
isSigned: false,
};
encoder.getDecodedBuffer(frameInfo).set(decodedPixels);
encoder.setLossless(true);
encoder.encode();
const bitstream = encoder.getEncodedBuffer();The encoder accepts greyscale samples with one channel or RGB samples with
three channels at bit depths from 1 to 16. Copy returned buffer views before
the next operation or before calling releaseBuffers().
Building
This project uses a Git submodule for libjxl. Initialize the submodules from the repository root:
git submodule update --init --recursiveAn activated Emscripten SDK is required. Build both WASM modules with:
cd packages/libjxl
yarn buildThe generated decoder and encoder .js and .wasm files are written to
dist/.
