makepad-zune-png

Crates.iomakepad-zune-png
lib.rsmakepad-zune-png
version0.2.1
sourcesrc
created_at2023-09-20 07:18:40.861419
updated_at2023-09-20 07:18:40.861419
descriptionA fast, correct and safe png decoder
homepage
repositoryhttps://github.com/etemesi254/zune-image/tree/dev/zune-png
max_upload_size
id977875
size161,215
(makepaddev)

documentation

README

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.
  • No support for the non-standard APNG (animation) extension.

Features

  • Fast deflate decoder
  • Vectorized filters and bit manipulation
  • Memory friendly (few allocations)
  • Zero unsafe outside of platform specific intrinsics

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.

Commit count: 1717

cargo fmt