7 unstable releases (3 breaking)
0.5.0-rc1 | Apr 16, 2024 |
---|---|
0.5.0-rc0 | Apr 7, 2024 |
0.4.10 | Jan 15, 2024 |
0.4.0 | Nov 8, 2023 |
0.1.9 | Mar 29, 2023 |
#322 in Images
1,176 downloads per month
Used in 13 crates
(7 directly)
410KB
6K
SLoC
Zune-png
A fast, correct and safe png decoder
Limitations
- This decoder (currently) expands images with less than 8 bpp to be 8 bits(one byte) automatically. This may or may not be desired depending on your use cases.
Features
- Fast deflate decoder
- Vectorized filters and bit manipulation
- Memory friendly (few allocations)
- Zero unsafe outside of platform specific intrinsics
- Support for animated image decoding up until the post-processing.
Usage
First, include this in your Cargo.toml
[dependencies]
zune-png = "0.2.0"
Then you can access the decoder in your library/binary.
use zune_png::PngDecoder;
// decode bytes
let decoder = PngDecoder::new(b"bytes").decode().unwrap();
Debug vs release
The decoder heavily relies on platform specific intrinsics, namely AVX2 and SSE to gain speed-ups in decoding,
but they perform poorly in debug builds. To get reasonable performance even
when compiling your program in debug mode, add this to your Cargo.toml
:
# `zune-png` package will be always built with optimizations
[profile.dev.package.zune-png]
opt-level = 3
Benchmarks
The updated benchmarks comparing this decoder with other Rust and C decoders can be
found here with
the png
prefix. Benchmarks are updated regularly to keep up with optimizations added.