Skip to Content
New: codec-png-native and codec-png-wasm bring the blazediff-png codec to Node and WebAssembly, faster than spng and jSquash. Read more β†’
Comparevs image-rs

BlazeDiff vs image-rs

blazediff-png decodes ~15% faster than the image-rs png crate in total, and its uncompressed encode is ~6.2x faster. At compressed encode the two are level on time. The per-fixture tables show where each one wins: image-rs decodes some files faster, and it wins about half of the compressed encodes.

The png crate is the PNG backend of the image crate: pure Rust, no unsafe, with APNG support. blazediff-png is built for one job, fast single-image decode and encode on one core, and it matches libspng’s output byte for byte.

At a glance

image-rs pngBlazeDiff (blazediff-png)
LicenseMIT OR Apache-2.0MIT
SafetyPure Rust, no unsafeRust with SIMD kernels; default backend links zlib and libdeflate (C)
Pure Rust buildYesYes, with the rust-backend feature
APNGYesNo
Decode outputNative format, optional transformationsRGBA8, or any SPNG_FMT_* format
Compressed encodeflate2 or fdeflatelibdeflate levels 1 to 12; optional parallel encode
Parity referenceIts own behaviorByte-identical to libspng
JavaScript packagesNo first-party bindings@blazediff/codec-png-native and -wasm

Benchmarks

The compressed encode compares libdeflate level 6 in blazediff-png with flate2 level 4 in image-rs.

Decode (PNG to RGBA8)

TOTAL TIME, BEST-OF Β· 36 FIXTURES Β· IO EXCLUDED

BlazeDiffOther librariesLower is better

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 Β· 2026-10-22 Β· 234b300-dirty Β· pnpm benchmark png

Per-fixture results (36)
FixtureMPxblazediffspngimage-rszuneblazediff vs spngimage-rs vs spngzune vs spng
4k/1a.png17.9138ms179ms152ms209ms1.30x1.18x0.86x
4k/1b.png17.9125ms187ms145ms196ms1.50x1.29x0.95x
4k/2a.png20.0158ms279ms194ms234ms1.76x1.44x1.19x
4k/2b.png20.0160ms221ms196ms235ms1.39x1.13x0.94x
4k/3a.png24.0160ms220ms194ms265ms1.38x1.14x0.83x
4k/3b.png24.0160ms220ms200ms266ms1.37x1.10x0.83x
alpha/1a.png0.00.08ms0.20ms0.07ms0.11ms2.37x2.64x1.76x
alpha/1b.png0.00.09ms0.20ms0.08ms0.11ms2.31x2.57x1.73x
blazediff/1a.png0.40.60ms0.69ms0.71ms1.01ms1.14x0.97x0.68x
blazediff/1b.png0.40.60ms0.70ms0.71ms1.01ms1.15x0.98x0.69x
blazediff/2a.png0.40.62ms0.83ms0.69ms0.93ms1.36x1.21x0.90x
blazediff/2b.png0.40.66ms0.85ms0.73ms1.02ms1.30x1.17x0.84x
blazediff/3a.png1.610.86ms13.38ms12.10ms17.55ms1.23x1.11x0.76x
blazediff/3b.png1.610.83ms13.25ms12.12ms17.45ms1.22x1.09x0.76x
blazediff/4a.png3.82.80ms3.41ms3.38ms4.43ms1.22x1.01x0.77x
blazediff/4b.png3.82.93ms3.48ms3.42ms4.49ms1.19x1.02x0.78x
page/1a.png58.9156ms236ms184ms255ms1.52x1.28x0.93x
page/1b.png58.9156ms234ms184ms246ms1.50x1.28x0.95x
page/2a.png41.726.12ms36.51ms20.21ms47.56ms1.40x1.81x0.77x
page/2b.png41.726.46ms35.71ms20.65ms58.02ms1.35x1.73x0.62x
pixelmatch/1a.png0.10.74ms0.95ms0.67ms1.07ms1.28x1.42x0.89x
pixelmatch/1b.png0.10.55ms0.71ms0.53ms0.89ms1.30x1.35x0.80x
pixelmatch/2a.png0.10.11ms0.37ms0.12ms0.15ms3.32x3.03x2.41x
pixelmatch/2b.png0.10.11ms0.38ms0.12ms0.15ms3.34x3.18x2.43x
pixelmatch/3a.png0.10.50ms0.73ms0.47ms0.74ms1.46x1.57x0.98x
pixelmatch/3b.png0.10.50ms0.72ms0.46ms0.74ms1.45x1.56x0.97x
pixelmatch/4a.png0.21.08ms1.83ms1.36ms1.74ms1.69x1.35x1.06x
pixelmatch/4b.png0.21.31ms1.75ms1.36ms2.20ms1.34x1.29x0.80x
pixelmatch/5a.png0.10.29ms0.43ms0.28ms0.37ms1.48x1.53x1.17x
pixelmatch/5b.png0.10.29ms0.43ms0.27ms0.36ms1.47x1.60x1.19x
pixelmatch/6a.png0.10.35ms0.66ms0.38ms0.46ms1.87x1.71x1.42x
pixelmatch/6b.png0.10.60ms0.94ms0.51ms0.84ms1.56x1.85x1.12x
pixelmatch/7a.png0.30.19ms0.47ms0.18ms0.31ms2.50x2.58x1.49x
pixelmatch/7b.png0.30.18ms0.46ms0.19ms0.31ms2.58x2.49x1.48x
same/1a.png1.72.09ms2.53ms2.63ms9.23ms1.21x0.96x0.27x
same/1b.png1.72.09ms2.53ms2.64ms9.28ms1.21x0.96x0.27x
TOTAL1.31s1.90s1.53s2.09s1.46x1.24x0.91x

Encode, no compression

TOTAL TIME, BEST-OF Β· 36 FIXTURES Β· IO EXCLUDED

BlazeDiffOther librariesLower is better

Levels: blazediff stored Β· spng stored Β· image-rs stored Β· zune 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 Β· 2026-10-22 Β· 234b300-dirty Β· pnpm benchmark png

Per-fixture results (36)
FixtureMPxblazediffspngimage-rszuneblazediff vs spngimage-rs vs spngzune vs spng
4k/1a.png17.94.35ms30.16ms27.64ms56.75ms6.93x1.09x0.53x
4k/1b.png17.94.83ms36.47ms25.84ms68.77ms7.56x1.41x0.53x
4k/2a.png20.04.64ms32.07ms25.19ms71.57ms6.91x1.27x0.45x
4k/2b.png20.04.63ms45.57ms31.10ms69.71ms9.84x1.47x0.65x
4k/3a.png24.05.63ms61.56ms60.05ms82.34ms10.94x1.03x0.75x
4k/3b.png24.05.63ms61.71ms29.50ms72.25ms10.97x2.09x0.85x
alpha/1a.png0.00.01ms0.04ms0.04ms0.10ms4.66x1.09x0.43x
alpha/1b.png0.00.01ms0.04ms0.04ms0.10ms4.69x1.08x0.43x
blazediff/1a.png0.40.10ms0.48ms0.39ms1.18ms4.88x1.23x0.40x
blazediff/1b.png0.40.10ms0.42ms0.39ms1.14ms4.22x1.09x0.37x
blazediff/2a.png0.40.09ms0.36ms0.31ms0.94ms4.26x1.18x0.39x
blazediff/2b.png0.40.08ms0.37ms0.31ms0.94ms4.41x1.18x0.39x
blazediff/3a.png1.60.36ms2.00ms3.51ms4.86ms5.50x0.57x0.41x
blazediff/3b.png1.60.36ms1.98ms2.28ms4.92ms5.50x0.87x0.40x
blazediff/4a.png3.80.87ms5.35ms5.73ms11.38ms6.17x0.93x0.47x
blazediff/4b.png3.80.87ms6.12ms7.87ms13.12ms7.05x0.78x0.47x
page/1a.png58.916.84ms114ms117ms192ms6.76x0.97x0.59x
page/1b.png58.922.59ms108ms92.34ms196ms4.77x1.17x0.55x
page/2a.png41.712.32ms88.23ms109ms122ms7.16x0.81x0.72x
page/2b.png41.712.08ms78.17ms53.95ms127ms6.47x1.45x0.62x
pixelmatch/1a.png0.10.03ms0.16ms0.10ms0.34ms5.05x1.56x0.47x
pixelmatch/1b.png0.10.03ms0.13ms0.10ms0.34ms4.51x1.33x0.39x
pixelmatch/2a.png0.10.01ms0.08ms0.06ms0.17ms5.25x1.42x0.45x
pixelmatch/2b.png0.10.01ms0.08ms0.05ms0.17ms5.39x1.44x0.47x
pixelmatch/3a.png0.10.03ms0.16ms0.10ms0.34ms5.27x1.55x0.46x
pixelmatch/3b.png0.10.03ms0.16ms0.10ms0.34ms5.27x1.56x0.47x
pixelmatch/4a.png0.20.04ms0.18ms0.15ms0.47ms4.06x1.24x0.38x
pixelmatch/4b.png0.20.05ms0.19ms0.16ms0.49ms4.20x1.16x0.39x
pixelmatch/5a.png0.10.01ms0.07ms0.05ms0.17ms4.60x1.29x0.40x
pixelmatch/5b.png0.10.01ms0.08ms0.05ms0.17ms5.38x1.52x0.47x
pixelmatch/6a.png0.10.01ms0.07ms0.05ms0.18ms4.53x1.25x0.38x
pixelmatch/6b.png0.10.02ms0.07ms0.05ms0.17ms4.56x1.31x0.41x
pixelmatch/7a.png0.30.06ms0.24ms0.20ms0.65ms4.07x1.22x0.37x
pixelmatch/7b.png0.30.06ms0.27ms0.20ms0.65ms4.62x1.38x0.42x
same/1a.png1.70.40ms2.07ms3.45ms4.98ms5.17x0.60x0.42x
same/1b.png1.70.40ms2.57ms3.96ms5.88ms6.49x0.65x0.44x
TOTAL97.60ms679ms602ms1.11s6.96x1.13x0.61x

Encode, half compression

TOTAL TIME, BEST-OF Β· 36 FIXTURES Β· IO EXCLUDED

BlazeDiffOther librariesLower is better

Levels: blazediff libdeflate 6 Β· spng zlib 4 Β· image-rs flate2 4 Β· zune 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 Β· 2026-10-22 Β· 234b300-dirty Β· pnpm benchmark png

Per-fixture results (36)
FixtureMPxblazediffspngimage-rszuneblazediff vs spngimage-rs vs spngzune vs spng
4k/1a.png17.91.15s2.80s1.08s55.06ms2.43x2.59x50.89x
4k/1b.png17.9959ms2.51s900ms62.97ms2.61x2.78x39.80x
4k/2a.png20.0963ms3.15s1.10s71.73ms3.27x2.85x43.91x
4k/2b.png20.01.01s3.05s1.12s60.27ms3.02x2.73x50.64x
4k/3a.png24.01.41s3.82s1.46s83.12ms2.70x2.62x45.99x
4k/3b.png24.01.41s3.88s1.47s72.03ms2.75x2.64x53.80x
alpha/1a.png0.00.36ms2.88ms0.37ms0.10ms8.01x7.84x30.06x
alpha/1b.png0.00.36ms2.88ms0.38ms0.10ms7.99x7.68x30.03x
blazediff/1a.png0.43.80ms33.99ms2.96ms1.14ms8.95x11.48x29.83x
blazediff/1b.png0.43.83ms34.20ms2.96ms1.15ms8.92x11.55x29.76x
blazediff/2a.png0.43.31ms27.83ms2.59ms0.93ms8.41x10.73x29.78x
blazediff/2b.png0.43.34ms28.06ms2.68ms0.93ms8.40x10.49x30.25x
blazediff/3a.png1.637.88ms157ms37.58ms4.88ms4.15x4.18x32.20x
blazediff/3b.png1.636.72ms158ms37.02ms4.98ms4.31x4.28x31.80x
blazediff/4a.png3.829.16ms292ms20.48ms11.31ms10.02x14.26x25.83x
blazediff/4b.png3.829.18ms294ms20.45ms12.70ms10.07x14.37x23.14x
page/1a.png58.9822ms5.19s706ms192ms6.32x7.36x27.00x
page/1b.png58.9829ms5.13s695ms194ms6.19x7.38x26.42x
page/2a.png41.7629ms3.67s595ms133ms5.84x6.17x27.55x
page/2b.png41.7619ms3.69s598ms131ms5.96x6.17x28.23x
pixelmatch/1a.png0.11.65ms11.24ms1.72ms0.34ms6.82x6.52x33.36x
pixelmatch/1b.png0.11.65ms11.21ms1.73ms0.34ms6.80x6.47x32.73x
pixelmatch/2a.png0.12.45ms8.91ms3.20ms0.17ms3.63x2.78x51.41x
pixelmatch/2b.png0.12.49ms9.20ms3.31ms0.18ms3.70x2.78x50.33x
pixelmatch/3a.png0.11.34ms10.42ms1.16ms0.34ms7.77x8.99x30.45x
pixelmatch/3b.png0.11.32ms10.43ms1.16ms0.34ms7.93x9.01x30.87x
pixelmatch/4a.png0.26.97ms24.69ms8.84ms0.47ms3.54x2.79x52.02x
pixelmatch/4b.png0.27.05ms25.16ms9.30ms0.47ms3.57x2.71x53.97x
pixelmatch/5a.png0.10.61ms5.07ms0.58ms0.17ms8.37x8.69x29.47x
pixelmatch/5b.png0.10.61ms5.06ms0.58ms0.17ms8.36x8.78x29.70x
pixelmatch/6a.png0.12.11ms7.23ms2.44ms0.18ms3.43x2.96x40.61x
pixelmatch/6b.png0.12.03ms6.88ms2.14ms0.17ms3.39x3.22x40.20x
pixelmatch/7a.png0.33.77ms22.39ms4.05ms0.64ms5.95x5.53x34.74x
pixelmatch/7b.png0.33.77ms22.07ms4.03ms0.66ms5.85x5.47x33.58x
same/1a.png1.715.40ms137ms12.25ms5.18ms8.90x11.19x26.47x
same/1b.png1.715.70ms140ms12.38ms5.86ms8.92x11.30x23.91x
TOTAL10.02s38.37s9.92s1.11s3.83x3.87x34.59x

Encode size, no compression

TOTAL OUTPUT SIZE Β· 36 FIXTURES

BlazeDiffOther librariesLower is better

Levels: blazediff stored Β· spng stored Β· image-rs stored Β· zune 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 Β· 2026-10-22 Β· 234b300-dirty Β· pnpm benchmark png

Per-fixture results (36)
FixtureMPxblazediffspngimage-rszuneblazediff vs spngimage-rs vs spngzune vs spng
4k/1a.png17.968.4 MB68.5 MB68.4 MB68.5 MB99.8%99.8%100.0%
4k/1b.png17.968.4 MB68.5 MB68.4 MB68.5 MB99.8%99.8%100.0%
4k/2a.png20.076.2 MB76.3 MB76.2 MB76.3 MB99.8%99.8%100.0%
4k/2b.png20.076.2 MB76.3 MB76.2 MB76.3 MB99.8%99.8%100.0%
4k/3a.png24.091.6 MB91.7 MB91.6 MB91.7 MB99.9%99.9%100.0%
4k/3b.png24.091.6 MB91.7 MB91.6 MB91.7 MB99.9%99.9%100.0%
alpha/1a.png0.0144.3 KB144.5 KB144.3 KB144.5 KB99.8%99.8%100.0%
alpha/1b.png0.0144.3 KB144.5 KB144.3 KB144.5 KB99.8%99.8%100.0%
blazediff/1a.png0.41.6 MB1.6 MB1.6 MB1.6 MB99.8%99.8%100.0%
blazediff/1b.png0.41.6 MB1.6 MB1.6 MB1.6 MB99.8%99.8%100.0%
blazediff/2a.png0.41.3 MB1.3 MB1.3 MB1.3 MB99.8%99.8%100.0%
blazediff/2b.png0.41.3 MB1.3 MB1.3 MB1.3 MB99.8%99.8%100.0%
blazediff/3a.png1.66.2 MB6.2 MB6.2 MB6.2 MB99.8%99.8%100.0%
blazediff/3b.png1.66.2 MB6.2 MB6.2 MB6.2 MB99.8%99.8%100.0%
blazediff/4a.png3.814.4 MB14.5 MB14.4 MB14.5 MB99.8%99.8%100.0%
blazediff/4b.png3.814.4 MB14.5 MB14.4 MB14.5 MB99.8%99.8%100.0%
page/1a.png58.9224.9 MB225.2 MB224.9 MB225.2 MB99.8%99.8%100.0%
page/1b.png58.9224.9 MB225.2 MB224.9 MB225.2 MB99.8%99.8%100.0%
page/2a.png41.7159.1 MB159.4 MB159.1 MB159.4 MB99.8%99.8%100.0%
page/2b.png41.7159.1 MB159.4 MB159.1 MB159.4 MB99.8%99.8%100.0%
pixelmatch/1a.png0.1512.4 KB513.1 KB512.4 KB513.1 KB99.8%99.8%100.0%
pixelmatch/1b.png0.1512.4 KB513.1 KB512.4 KB513.1 KB99.8%99.8%100.0%
pixelmatch/2a.png0.1256.3 KB256.7 KB256.3 KB256.7 KB99.8%99.8%100.0%
pixelmatch/2b.png0.1256.3 KB256.7 KB256.3 KB256.7 KB99.8%99.8%100.0%
pixelmatch/3a.png0.1512.4 KB513.1 KB512.4 KB513.1 KB99.8%99.8%100.0%
pixelmatch/3b.png0.1512.4 KB513.1 KB512.4 KB513.1 KB99.8%99.8%100.0%
pixelmatch/4a.png0.2705.4 KB706.5 KB705.4 KB706.5 KB99.8%99.8%100.0%
pixelmatch/4b.png0.2705.4 KB706.5 KB705.4 KB706.5 KB99.8%99.8%100.0%
pixelmatch/5a.png0.1256.3 KB256.7 KB256.3 KB256.7 KB99.8%99.8%100.0%
pixelmatch/5b.png0.1256.3 KB256.7 KB256.3 KB256.7 KB99.8%99.8%100.0%
pixelmatch/6a.png0.1256.3 KB256.7 KB256.3 KB256.7 KB99.8%99.8%100.0%
pixelmatch/6b.png0.1256.3 KB256.7 KB256.3 KB256.7 KB99.8%99.8%100.0%
pixelmatch/7a.png0.3977.2 KB978.7 KB977.2 KB978.6 KB99.8%99.8%100.0%
pixelmatch/7b.png0.3977.2 KB978.7 KB977.2 KB978.6 KB99.8%99.8%100.0%
same/1a.png1.76.6 MB6.6 MB6.6 MB6.6 MB99.8%99.8%100.0%
same/1b.png1.76.6 MB6.6 MB6.6 MB6.6 MB99.8%99.8%100.0%
TOTAL1.28 GB1.28 GB1.28 GB1.28 GB99.8%99.8%100.0%

Encode size, half compression

TOTAL OUTPUT SIZE Β· 36 FIXTURES

BlazeDiffOther librariesLower is better

Levels: blazediff libdeflate 6 Β· spng zlib 4 Β· image-rs flate2 4 Β· zune 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 Β· 2026-10-22 Β· 234b300-dirty Β· pnpm benchmark png

Per-fixture results (36)
FixtureMPxblazediffspngimage-rszuneblazediff vs spngimage-rs vs spngzune vs spng
4k/1a.png17.920.6 MB21.3 MB21.5 MB68.5 MB96.6%100.9%320.8%
4k/1b.png17.917.2 MB18.2 MB17.9 MB68.5 MB94.5%98.2%375.4%
4k/2a.png20.026.1 MB27.1 MB26.6 MB76.3 MB96.2%98.3%281.7%
4k/2b.png20.026.6 MB27.6 MB27.2 MB76.3 MB96.6%98.6%276.8%
4k/3a.png24.032.1 MB35.0 MB33.1 MB91.7 MB91.7%94.7%262.2%
4k/3b.png24.031.6 MB34.5 MB32.6 MB91.7 MB91.5%94.4%265.5%
alpha/1a.png0.02.8 KB2.9 KB3.0 KB144.5 KB95.3%100.3%4908.5%
alpha/1b.png0.02.8 KB3.0 KB3.0 KB144.5 KB95.2%99.9%4826.8%
blazediff/1a.png0.430.8 KB35.4 KB30.2 KB1.6 MB86.9%85.4%4770.7%
blazediff/1b.png0.430.9 KB35.4 KB30.3 KB1.6 MB87.1%85.4%4765.8%
blazediff/2a.png0.431.5 KB38.1 KB30.1 KB1.3 MB82.6%79.2%3610.7%
blazediff/2b.png0.432.8 KB39.8 KB31.5 KB1.3 MB82.3%79.2%3449.9%
blazediff/3a.png1.6815.5 KB877.0 KB835.0 KB6.2 MB93.0%95.2%727.6%
blazediff/3b.png1.6792.2 KB853.3 KB812.1 KB6.2 MB92.8%95.2%747.8%
blazediff/4a.png3.898.7 KB114.0 KB100.5 KB14.5 MB86.6%88.2%12998.3%
blazediff/4b.png3.898.3 KB114.1 KB100.4 KB14.5 MB86.1%88.0%12985.2%
page/1a.png58.911.1 MB12.0 MB11.1 MB225.2 MB92.5%92.5%1884.8%
page/1b.png58.911.0 MB11.9 MB11.0 MB225.2 MB92.5%92.5%1886.3%
page/2a.png41.710.3 MB11.0 MB10.4 MB159.4 MB93.9%94.6%1446.2%
page/2b.png41.710.4 MB11.0 MB10.5 MB159.4 MB94.0%94.8%1445.4%
pixelmatch/1a.png0.131.8 KB32.2 KB33.4 KB513.1 KB98.9%103.6%1593.4%
pixelmatch/1b.png0.131.9 KB32.2 KB33.4 KB513.1 KB98.9%103.5%1591.6%
pixelmatch/2a.png0.190.8 KB96.9 KB91.0 KB256.7 KB93.8%93.9%265.0%
pixelmatch/2b.png0.194.4 KB99.9 KB94.3 KB256.7 KB94.4%94.3%257.0%
pixelmatch/3a.png0.113.9 KB14.7 KB13.8 KB513.1 KB94.6%94.2%3497.0%
pixelmatch/3b.png0.113.7 KB14.3 KB13.5 KB513.1 KB95.7%94.5%3593.6%
pixelmatch/4a.png0.2240.1 KB254.1 KB241.3 KB706.5 KB94.5%95.0%278.0%
pixelmatch/4b.png0.2251.0 KB268.1 KB251.9 KB706.5 KB93.6%94.0%263.5%
pixelmatch/5a.png0.13.0 KB3.3 KB3.1 KB256.7 KB91.4%92.3%7693.1%
pixelmatch/5b.png0.13.2 KB3.3 KB3.2 KB256.7 KB98.5%98.4%7793.4%
pixelmatch/6a.png0.144.4 KB50.7 KB48.5 KB256.7 KB87.6%95.6%506.4%
pixelmatch/6b.png0.132.0 KB37.9 KB36.5 KB256.7 KB84.6%96.4%678.0%
pixelmatch/7a.png0.388.2 KB96.1 KB87.4 KB978.6 KB91.8%91.0%1018.8%
pixelmatch/7b.png0.387.3 KB94.8 KB86.5 KB978.6 KB92.1%91.2%1032.4%
same/1a.png1.7124.9 KB140.3 KB126.7 KB6.6 MB89.1%90.3%4847.0%
same/1b.png1.7124.9 KB140.3 KB126.7 KB6.6 MB89.1%90.3%4847.0%
TOTAL200.2 MB213.1 MB205.1 MB1.28 GB93.9%96.3%614.8%

Total compressed encode time: BlazeDiff is ~1% slower than image-rs, and it writes smaller files in total.

Switching

use blazediff_png::{decode, encode, EncodeOptions}; let bytes = std::fs::read("image.png")?; let image = decode(&bytes)?; // RGBA8: Image { data, width, height } let png = encode(&image, &EncodeOptions::default())?;

decode always returns RGBA8. If you read 16-bit or grayscale data in its native format, use decode_with and pick the output format.

When to keep image-rs

  • You need APNG.
  • You want a dependency tree with no C and no unsafe.
  • You already use the image crate for other formats.
Last updated on