BlazeDiff vs jSquash
@blazediff/codec-png-wasm decodes PNG ~2.7x faster
than @jsquash/png, and at default settings it encodes ~14% faster
in total, with smaller files. Both are Rust compiled to WebAssembly. jSquash
wins some individual encodes, so read the per-fixture tables for your image sizes.
jSquash is a set of browser image codecs derived from Squoosh: AVIF, JPEG, JPEG XL,
OxiPNG, PNG, QOI, WebP and resize. Its PNG codec wraps the image-rs png crate,
version 0.17. @blazediff/codec-png-wasm is the blazediff-png codec with wasm
SIMD, about 150 KB, and it decodes every PNG format to RGBA8.
At a glance
jSquash (@jsquash/png) | BlazeDiff (@blazediff/codec-png-wasm) | |
|---|---|---|
| License | Apache-2.0 | MIT |
| Engine | image-rs png 0.17, compiled to wasm | blazediff-png, compiled to wasm with SIMD |
| Runtimes | Browsers, Workers, Deno; Node is experimental | Browsers, Workers, Deno, Node |
| Decode output | ImageData, or 16-bit RGBA | RGBA8 { data, width, height } |
| Encode options | Bit depth | Compression level, filter, color mode |
| Other formats | Sibling packages for AVIF, JPEG, WebP, JXL | PNG only |
| Native twin | No | @blazediff/codec-png-native for Node |
Benchmarks
Both run single-threaded in Node with wasm SIMD. The default encode is fdeflate
with adaptive filtering in BlazeDiff and the png crate default in jSquash. The
charts also show zune-png, which writes stored data.
WebAssembly decode (PNG to RGBA8)
TOTAL TIME, BEST-OF Β· 36 FIXTURES Β· IO EXCLUDED
Apple M1 Max Β· darwin/arm64 Β· Node v22.14.0 Β· rustc 1.97.1 (8bab26f4f 2026-07-14) Β· best-of, iterations scaled by image size, single-threaded, Node (V8) running wasm32 with SIMD Β· 2026-10-26 Β· 3017cb8-dirty Β· pnpm benchmark png-wasm
Per-fixture results (36)
| Fixture | MPx | blazediff | zune-png | jSquash | blazediff vs jSquash | zune-png vs jSquash |
|---|---|---|---|---|---|---|
| 4k/1a.png | 17.9 | 185ms | 223ms | 398ms | 2.15x | 1.78x |
| 4k/1b.png | 17.9 | 163ms | 206ms | 378ms | 2.31x | 1.84x |
| 4k/2a.png | 20.0 | 224ms | 274ms | 545ms | 2.44x | 1.99x |
| 4k/2b.png | 20.0 | 232ms | 269ms | 547ms | 2.36x | 2.03x |
| 4k/3a.png | 24.0 | 245ms | 310ms | 569ms | 2.32x | 1.83x |
| 4k/3b.png | 24.0 | 242ms | 309ms | 579ms | 2.39x | 1.87x |
| alpha/1a.png | 0.0 | 0.10ms | 0.12ms | 0.36ms | 3.47x | 3.13x |
| alpha/1b.png | 0.0 | 0.11ms | 0.11ms | 0.36ms | 3.32x | 3.17x |
| blazediff/1a.png | 0.4 | 0.85ms | 0.97ms | 4.32ms | 5.09x | 4.45x |
| blazediff/1b.png | 0.4 | 0.80ms | 1.00ms | 4.35ms | 5.47x | 4.34x |
| blazediff/2a.png | 0.4 | 0.74ms | 0.88ms | 3.66ms | 4.92x | 4.14x |
| blazediff/2b.png | 0.4 | 0.80ms | 0.97ms | 3.71ms | 4.67x | 3.84x |
| blazediff/3a.png | 1.6 | 13.48ms | 16.19ms | 36.66ms | 2.72x | 2.26x |
| blazediff/3b.png | 1.6 | 13.52ms | 16.08ms | 35.38ms | 2.62x | 2.20x |
| blazediff/4a.png | 3.8 | 4.40ms | 4.74ms | 31.96ms | 7.26x | 6.74x |
| blazediff/4b.png | 3.8 | 4.51ms | 4.78ms | 31.67ms | 7.02x | 6.63x |
| page/1a.png | 58.9 | 210ms | 277ms | 626ms | 2.97x | 2.25x |
| page/1b.png | 58.9 | 217ms | 262ms | 610ms | 2.80x | 2.33x |
| page/2a.png | 41.7 | 47.61ms | 53.70ms | 286ms | 6.01x | 5.33x |
| page/2b.png | 41.7 | 46.96ms | 51.86ms | 283ms | 6.02x | 5.45x |
| pixelmatch/1a.png | 0.1 | 0.77ms | 0.94ms | 1.82ms | 2.36x | 1.94x |
| pixelmatch/1b.png | 0.1 | 0.61ms | 0.81ms | 1.81ms | 2.98x | 2.24x |
| pixelmatch/2a.png | 0.1 | 0.20ms | 0.23ms | 0.77ms | 3.83x | 3.36x |
| pixelmatch/2b.png | 0.1 | 0.21ms | 0.23ms | 0.78ms | 3.76x | 3.31x |
| pixelmatch/3a.png | 0.1 | 0.58ms | 0.67ms | 1.52ms | 2.60x | 2.26x |
| pixelmatch/3b.png | 0.1 | 0.55ms | 0.67ms | 1.52ms | 2.76x | 2.28x |
| pixelmatch/4a.png | 0.2 | 1.78ms | 2.21ms | 4.31ms | 2.42x | 1.95x |
| pixelmatch/4b.png | 0.2 | 1.99ms | 2.37ms | 4.68ms | 2.35x | 1.97x |
| pixelmatch/5a.png | 0.1 | 0.56ms | 0.59ms | 1.03ms | 1.84x | 1.75x |
| pixelmatch/5b.png | 0.1 | 0.56ms | 0.55ms | 0.75ms | 1.33x | 1.36x |
| pixelmatch/6a.png | 0.1 | 0.68ms | 0.67ms | 1.32ms | 1.93x | 1.95x |
| pixelmatch/6b.png | 0.1 | 0.90ms | 0.99ms | 1.37ms | 1.53x | 1.39x |
| pixelmatch/7a.png | 0.3 | 0.34ms | 0.39ms | 1.90ms | 5.52x | 4.88x |
| pixelmatch/7b.png | 0.3 | 0.34ms | 0.41ms | 1.88ms | 5.48x | 4.58x |
| same/1a.png | 1.7 | 3.54ms | 7.37ms | 14.08ms | 3.98x | 1.91x |
| same/1b.png | 1.7 | 3.56ms | 7.43ms | 14.03ms | 3.95x | 1.89x |
| TOTAL | 1.87s | 2.31s | 5.03s | 2.69x | 2.18x |
WebAssembly encode, no compression
TOTAL TIME, BEST-OF Β· 36 FIXTURES Β· IO EXCLUDED
Levels: blazediff stored Β· zune-png stored.
Apple M1 Max Β· darwin/arm64 Β· Node v22.14.0 Β· rustc 1.97.1 (8bab26f4f 2026-07-14) Β· best-of, iterations scaled by image size, single-threaded, Node (V8) running wasm32 with SIMD Β· 2026-10-26 Β· 3017cb8-dirty Β· pnpm benchmark png-wasm
Per-fixture results (36)
| Fixture | MPx | blazediff | zune-png | blazediff vs zune-png |
|---|---|---|---|---|
| 4k/1a.png | 17.9 | 44.55ms | 71.50ms | 1.61x |
| 4k/1b.png | 17.9 | 37.01ms | 66.31ms | 1.79x |
| 4k/2a.png | 20.0 | 51.72ms | 81.47ms | 1.58x |
| 4k/2b.png | 20.0 | 42.54ms | 74.70ms | 1.76x |
| 4k/3a.png | 24.0 | 52.96ms | 91.61ms | 1.73x |
| 4k/3b.png | 24.0 | 50.30ms | 94.01ms | 1.87x |
| alpha/1a.png | 0.0 | 0.09ms | 0.14ms | 1.60x |
| alpha/1b.png | 0.0 | 0.09ms | 0.14ms | 1.57x |
| blazediff/1a.png | 0.4 | 0.94ms | 1.50ms | 1.59x |
| blazediff/1b.png | 0.4 | 0.91ms | 1.50ms | 1.64x |
| blazediff/2a.png | 0.4 | 0.75ms | 1.19ms | 1.59x |
| blazediff/2b.png | 0.4 | 0.77ms | 1.22ms | 1.59x |
| blazediff/3a.png | 1.6 | 3.35ms | 6.20ms | 1.85x |
| blazediff/3b.png | 1.6 | 3.42ms | 5.85ms | 1.71x |
| blazediff/4a.png | 3.8 | 7.90ms | 13.80ms | 1.75x |
| blazediff/4b.png | 3.8 | 7.97ms | 13.63ms | 1.71x |
| page/1a.png | 58.9 | 129ms | 258ms | 1.99x |
| page/1b.png | 58.9 | 131ms | 264ms | 2.01x |
| page/2a.png | 41.7 | 89.78ms | 153ms | 1.71x |
| page/2b.png | 41.7 | 88.88ms | 156ms | 1.76x |
| pixelmatch/1a.png | 0.1 | 0.28ms | 0.45ms | 1.62x |
| pixelmatch/1b.png | 0.1 | 0.28ms | 0.47ms | 1.64x |
| pixelmatch/2a.png | 0.1 | 0.14ms | 0.24ms | 1.66x |
| pixelmatch/2b.png | 0.1 | 0.14ms | 0.23ms | 1.60x |
| pixelmatch/3a.png | 0.1 | 0.28ms | 0.45ms | 1.59x |
| pixelmatch/3b.png | 0.1 | 0.27ms | 0.46ms | 1.66x |
| pixelmatch/4a.png | 0.2 | 0.38ms | 0.61ms | 1.62x |
| pixelmatch/4b.png | 0.2 | 0.39ms | 0.63ms | 1.63x |
| pixelmatch/5a.png | 0.1 | 0.14ms | 0.24ms | 1.63x |
| pixelmatch/5b.png | 0.1 | 0.14ms | 0.23ms | 1.61x |
| pixelmatch/6a.png | 0.1 | 0.14ms | 0.22ms | 1.60x |
| pixelmatch/6b.png | 0.1 | 0.14ms | 0.22ms | 1.62x |
| pixelmatch/7a.png | 0.3 | 0.52ms | 0.85ms | 1.64x |
| pixelmatch/7b.png | 0.3 | 0.52ms | 0.86ms | 1.68x |
| same/1a.png | 1.7 | 3.58ms | 6.16ms | 1.72x |
| same/1b.png | 1.7 | 3.60ms | 6.16ms | 1.71x |
| TOTAL | 756ms | 1.37s | 1.82x |
WebAssembly encode, default settings
TOTAL TIME, BEST-OF Β· 36 FIXTURES Β· IO EXCLUDED
Levels: blazediff fdeflate, adaptive filter Β· zune-png stored Β· jSquash png crate default.
Apple M1 Max Β· darwin/arm64 Β· Node v22.14.0 Β· rustc 1.97.1 (8bab26f4f 2026-07-14) Β· best-of, iterations scaled by image size, single-threaded, Node (V8) running wasm32 with SIMD Β· 2026-10-26 Β· 3017cb8-dirty Β· pnpm benchmark png-wasm
Per-fixture results (36)
| Fixture | MPx | blazediff | zune-png | jSquash | blazediff vs jSquash | zune-png vs jSquash |
|---|---|---|---|---|---|---|
| 4k/1a.png | 17.9 | 236ms | 65.81ms | 286ms | 1.21x | 4.35x |
| 4k/1b.png | 17.9 | 225ms | 70.29ms | 276ms | 1.22x | 3.92x |
| 4k/2a.png | 20.0 | 234ms | 73.03ms | 308ms | 1.32x | 4.22x |
| 4k/2b.png | 20.0 | 240ms | 74.41ms | 303ms | 1.26x | 4.07x |
| 4k/3a.png | 24.0 | 304ms | 87.89ms | 384ms | 1.26x | 4.37x |
| 4k/3b.png | 24.0 | 304ms | 89.58ms | 388ms | 1.28x | 4.33x |
| alpha/1a.png | 0.0 | 0.16ms | 0.14ms | 0.23ms | 1.39x | 1.59x |
| alpha/1b.png | 0.0 | 0.16ms | 0.14ms | 0.23ms | 1.38x | 1.56x |
| blazediff/1a.png | 0.4 | 3.48ms | 1.50ms | 3.17ms | 0.91x | 2.11x |
| blazediff/1b.png | 0.4 | 3.44ms | 1.52ms | 3.18ms | 0.92x | 2.10x |
| blazediff/2a.png | 0.4 | 1.38ms | 1.20ms | 2.12ms | 1.53x | 1.76x |
| blazediff/2b.png | 0.4 | 1.40ms | 1.19ms | 2.14ms | 1.53x | 1.79x |
| blazediff/3a.png | 1.6 | 17.94ms | 6.10ms | 18.34ms | 1.02x | 3.00x |
| blazediff/3b.png | 1.6 | 17.72ms | 5.82ms | 17.91ms | 1.01x | 3.08x |
| blazediff/4a.png | 3.8 | 23.73ms | 13.54ms | 19.57ms | 0.82x | 1.44x |
| blazediff/4b.png | 3.8 | 23.81ms | 13.54ms | 19.55ms | 0.82x | 1.44x |
| page/1a.png | 58.9 | 485ms | 233ms | 413ms | 0.85x | 1.77x |
| page/1b.png | 58.9 | 480ms | 234ms | 404ms | 0.84x | 1.72x |
| page/2a.png | 41.7 | 207ms | 157ms | 323ms | 1.56x | 2.05x |
| page/2b.png | 41.7 | 191ms | 156ms | 321ms | 1.68x | 2.06x |
| pixelmatch/1a.png | 0.1 | 1.14ms | 0.44ms | 0.93ms | 0.82x | 2.10x |
| pixelmatch/1b.png | 0.1 | 1.19ms | 0.47ms | 0.96ms | 0.81x | 2.05x |
| pixelmatch/2a.png | 0.1 | 0.50ms | 0.24ms | 0.91ms | 1.83x | 3.87x |
| pixelmatch/2b.png | 0.1 | 0.49ms | 0.23ms | 0.89ms | 1.82x | 3.92x |
| pixelmatch/3a.png | 0.1 | 1.12ms | 0.45ms | 0.81ms | 0.73x | 1.79x |
| pixelmatch/3b.png | 0.1 | 1.12ms | 0.46ms | 0.82ms | 0.73x | 1.78x |
| pixelmatch/4a.png | 0.2 | 2.28ms | 0.62ms | 2.62ms | 1.15x | 4.26x |
| pixelmatch/4b.png | 0.2 | 2.28ms | 0.64ms | 2.75ms | 1.21x | 4.26x |
| pixelmatch/5a.png | 0.1 | 0.60ms | 0.24ms | 0.52ms | 0.87x | 2.19x |
| pixelmatch/5b.png | 0.1 | 0.57ms | 0.23ms | 0.52ms | 0.90x | 2.28x |
| pixelmatch/6a.png | 0.1 | 0.80ms | 0.22ms | 0.80ms | 1.00x | 3.59x |
| pixelmatch/6b.png | 0.1 | 0.79ms | 0.22ms | 0.74ms | 0.94x | 3.30x |
| pixelmatch/7a.png | 0.3 | 1.25ms | 0.85ms | 2.04ms | 1.63x | 2.41x |
| pixelmatch/7b.png | 0.3 | 1.22ms | 0.86ms | 2.06ms | 1.69x | 2.40x |
| same/1a.png | 1.7 | 12.78ms | 6.16ms | 10.73ms | 0.84x | 1.74x |
| same/1b.png | 1.7 | 12.82ms | 6.16ms | 10.69ms | 0.83x | 1.74x |
| TOTAL | 3.04s | 1.30s | 3.53s | 1.16x | 2.71x |
WebAssembly encode size, no compression
TOTAL OUTPUT SIZE Β· 36 FIXTURES
Levels: blazediff stored Β· zune-png stored.
Apple M1 Max Β· darwin/arm64 Β· Node v22.14.0 Β· rustc 1.97.1 (8bab26f4f 2026-07-14) Β· best-of, iterations scaled by image size, single-threaded, Node (V8) running wasm32 with SIMD Β· 2026-10-26 Β· 3017cb8-dirty Β· pnpm benchmark png-wasm
Per-fixture results (36)
| Fixture | MPx | blazediff | zune-png | blazediff vs zune-png |
|---|---|---|---|---|
| 4k/1a.png | 17.9 | 68.4 MB | 68.5 MB | 99.9% |
| 4k/1b.png | 17.9 | 68.4 MB | 68.5 MB | 99.9% |
| 4k/2a.png | 20.0 | 76.2 MB | 76.3 MB | 99.9% |
| 4k/2b.png | 20.0 | 76.2 MB | 76.3 MB | 99.9% |
| 4k/3a.png | 24.0 | 91.6 MB | 91.7 MB | 99.9% |
| 4k/3b.png | 24.0 | 91.6 MB | 91.7 MB | 99.9% |
| alpha/1a.png | 0.0 | 144.3 KB | 144.5 KB | 99.9% |
| alpha/1b.png | 0.0 | 144.3 KB | 144.5 KB | 99.9% |
| blazediff/1a.png | 0.4 | 1.6 MB | 1.6 MB | 99.9% |
| blazediff/1b.png | 0.4 | 1.6 MB | 1.6 MB | 99.9% |
| blazediff/2a.png | 0.4 | 1.3 MB | 1.3 MB | 99.9% |
| blazediff/2b.png | 0.4 | 1.3 MB | 1.3 MB | 99.9% |
| blazediff/3a.png | 1.6 | 6.2 MB | 6.2 MB | 99.9% |
| blazediff/3b.png | 1.6 | 6.2 MB | 6.2 MB | 99.9% |
| blazediff/4a.png | 3.8 | 14.4 MB | 14.5 MB | 99.9% |
| blazediff/4b.png | 3.8 | 14.4 MB | 14.5 MB | 99.9% |
| page/1a.png | 58.9 | 224.9 MB | 225.2 MB | 99.9% |
| page/1b.png | 58.9 | 224.9 MB | 225.2 MB | 99.9% |
| page/2a.png | 41.7 | 159.1 MB | 159.4 MB | 99.9% |
| page/2b.png | 41.7 | 159.1 MB | 159.4 MB | 99.9% |
| pixelmatch/1a.png | 0.1 | 512.4 KB | 513.1 KB | 99.9% |
| pixelmatch/1b.png | 0.1 | 512.4 KB | 513.1 KB | 99.9% |
| pixelmatch/2a.png | 0.1 | 256.3 KB | 256.7 KB | 99.9% |
| pixelmatch/2b.png | 0.1 | 256.3 KB | 256.7 KB | 99.9% |
| pixelmatch/3a.png | 0.1 | 512.4 KB | 513.1 KB | 99.9% |
| pixelmatch/3b.png | 0.1 | 512.4 KB | 513.1 KB | 99.9% |
| pixelmatch/4a.png | 0.2 | 705.4 KB | 706.5 KB | 99.9% |
| pixelmatch/4b.png | 0.2 | 705.4 KB | 706.5 KB | 99.9% |
| pixelmatch/5a.png | 0.1 | 256.3 KB | 256.7 KB | 99.9% |
| pixelmatch/5b.png | 0.1 | 256.3 KB | 256.7 KB | 99.9% |
| pixelmatch/6a.png | 0.1 | 256.3 KB | 256.7 KB | 99.9% |
| pixelmatch/6b.png | 0.1 | 256.3 KB | 256.7 KB | 99.9% |
| pixelmatch/7a.png | 0.3 | 977.2 KB | 978.6 KB | 99.9% |
| pixelmatch/7b.png | 0.3 | 977.2 KB | 978.6 KB | 99.9% |
| same/1a.png | 1.7 | 6.6 MB | 6.6 MB | 99.9% |
| same/1b.png | 1.7 | 6.6 MB | 6.6 MB | 99.9% |
| TOTAL | 1.28 GB | 1.28 GB | 99.9% |
WebAssembly encode size, default settings
TOTAL OUTPUT SIZE Β· 36 FIXTURES
Levels: blazediff fdeflate, adaptive filter Β· zune-png stored Β· jSquash png crate default.
Apple M1 Max Β· darwin/arm64 Β· Node v22.14.0 Β· rustc 1.97.1 (8bab26f4f 2026-07-14) Β· best-of, iterations scaled by image size, single-threaded, Node (V8) running wasm32 with SIMD Β· 2026-10-26 Β· 3017cb8-dirty Β· pnpm benchmark png-wasm
Per-fixture results (36)
| Fixture | MPx | blazediff | zune-png | jSquash | blazediff vs jSquash | zune-png vs jSquash |
|---|---|---|---|---|---|---|
| 4k/1a.png | 17.9 | 19.9 MB | 68.5 MB | 25.8 MB | 76.9% | 265.1% |
| 4k/1b.png | 17.9 | 18.4 MB | 68.5 MB | 24.5 MB | 74.9% | 278.9% |
| 4k/2a.png | 20.0 | 28.0 MB | 76.3 MB | 37.1 MB | 75.5% | 205.4% |
| 4k/2b.png | 20.0 | 28.1 MB | 76.3 MB | 37.1 MB | 75.5% | 205.3% |
| 4k/3a.png | 24.0 | 35.5 MB | 91.7 MB | 43.2 MB | 82.1% | 212.3% |
| 4k/3b.png | 24.0 | 35.1 MB | 91.7 MB | 42.8 MB | 82.0% | 214.5% |
| alpha/1a.png | 0.0 | 2.3 KB | 144.5 KB | 4.5 KB | 51.1% | 3235.1% |
| alpha/1b.png | 0.0 | 2.2 KB | 144.5 KB | 4.5 KB | 49.5% | 3187.0% |
| blazediff/1a.png | 0.4 | 67.9 KB | 1.6 MB | 152.5 KB | 44.5% | 1107.5% |
| blazediff/1b.png | 0.4 | 68.1 KB | 1.6 MB | 152.8 KB | 44.5% | 1105.5% |
| blazediff/2a.png | 0.4 | 19.6 KB | 1.3 MB | 77.8 KB | 25.2% | 1766.4% |
| blazediff/2b.png | 0.4 | 20.2 KB | 1.3 MB | 79.9 KB | 25.3% | 1720.1% |
| blazediff/3a.png | 1.6 | 996.6 KB | 6.2 MB | 1.2 MB | 79.2% | 507.3% |
| blazediff/3b.png | 1.6 | 978.8 KB | 6.2 MB | 1.2 MB | 79.0% | 515.2% |
| blazediff/4a.png | 3.8 | 307.2 KB | 14.5 MB | 232.3 KB | 132.2% | 6376.4% |
| blazediff/4b.png | 3.8 | 328.9 KB | 14.5 MB | 236.9 KB | 138.8% | 6254.4% |
| page/1a.png | 58.9 | 12.4 MB | 225.2 MB | 16.7 MB | 74.3% | 1349.0% |
| page/1b.png | 58.9 | 12.4 MB | 225.2 MB | 16.7 MB | 74.3% | 1350.0% |
| page/2a.png | 41.7 | 6.5 MB | 159.4 MB | 16.8 MB | 38.5% | 945.9% |
| page/2b.png | 41.7 | 6.5 MB | 159.4 MB | 16.9 MB | 38.4% | 944.9% |
| pixelmatch/1a.png | 0.1 | 37.0 KB | 513.1 KB | 40.0 KB | 92.5% | 1282.6% |
| pixelmatch/1b.png | 0.1 | 36.9 KB | 513.1 KB | 40.0 KB | 92.4% | 1283.7% |
| pixelmatch/2a.png | 0.1 | 44.9 KB | 256.7 KB | 122.3 KB | 36.7% | 209.9% |
| pixelmatch/2b.png | 0.1 | 46.0 KB | 256.7 KB | 124.7 KB | 36.9% | 205.9% |
| pixelmatch/3a.png | 0.1 | 27.8 KB | 513.1 KB | 33.6 KB | 82.8% | 1527.2% |
| pixelmatch/3b.png | 0.1 | 27.9 KB | 513.1 KB | 33.7 KB | 82.8% | 1521.9% |
| pixelmatch/4a.png | 0.2 | 280.8 KB | 706.5 KB | 317.8 KB | 88.4% | 222.3% |
| pixelmatch/4b.png | 0.2 | 299.9 KB | 706.5 KB | 338.2 KB | 88.7% | 208.9% |
| pixelmatch/5a.png | 0.1 | 14.6 KB | 256.7 KB | 43.5 KB | 33.5% | 589.8% |
| pixelmatch/5b.png | 0.1 | 13.9 KB | 256.7 KB | 42.6 KB | 32.6% | 602.1% |
| pixelmatch/6a.png | 0.1 | 82.7 KB | 256.7 KB | 105.0 KB | 78.7% | 244.5% |
| pixelmatch/6b.png | 0.1 | 65.5 KB | 256.7 KB | 87.5 KB | 74.9% | 293.4% |
| pixelmatch/7a.png | 0.3 | 51.2 KB | 978.6 KB | 144.8 KB | 35.4% | 675.9% |
| pixelmatch/7b.png | 0.3 | 50.5 KB | 978.6 KB | 143.2 KB | 35.3% | 683.6% |
| same/1a.png | 1.7 | 206.3 KB | 6.6 MB | 306.2 KB | 67.4% | 2220.8% |
| same/1b.png | 1.7 | 206.3 KB | 6.6 MB | 306.2 KB | 67.4% | 2220.8% |
| TOTAL | 206.8 MB | 1.28 GB | 283.2 MB | 73.0% | 462.5% |
Switching
// Before
import { decode, encode } from "@jsquash/png";
const imageData = await decode(arrayBuffer);
const png = await encode(imageData);
// After
import { decode, encode } from "@blazediff/codec-png-wasm";
const image = await decode(new Uint8Array(arrayBuffer)); // { data, width, height }
const out = await encode(image, { compression: 4 });When to keep jSquash
- You need 16-bit PNG output.
- You already use other jSquash codecs and want one toolchain.
- You need an
ImageDataobject to draw on a canvas without a conversion step.