Thanks to visit codestin.com
Credit goes to lib.rs

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

#1246 in Images

Codestin Search App Codestin Search App Codestin Search App Codestin Search App Codestin Search App Codestin Search App Codestin Search App Codestin Search App Codestin Search App Codestin Search App Codestin Search App Codestin Search App Codestin Search App Codestin Search App Codestin Search App Codestin Search App Codestin Search App

3,229 downloads per month
Used in 15 crates (7 directly)

MIT OR Apache-2.0 OR Zlib

405KB
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.

Dependencies