#png #decoder #png-decoder

no-std makepad-zune-png

快速、正确且安全的 png 解码器

1 个不稳定版本

0.2.1 2023年9月20日

#594 in 图像

Download history 43/week @ 2024-03-24 75/week @ 2024-03-31 26/week @ 2024-04-07 27/week @ 2024-04-14 28/week @ 2024-04-21 15/week @ 2024-04-28 35/week @ 2024-05-05 30/week @ 2024-05-12 32/week @ 2024-05-19 25/week @ 2024-05-26 34/week @ 2024-06-02 31/week @ 2024-06-09 42/week @ 2024-06-16 33/week @ 2024-06-23 27/week @ 2024-06-30 16/week @ 2024-07-07

每月 121 次下载
8 个 crate 中使用(通过 makepad-widgets

MIT 或 Apache-2.0 或 Zlib

375KB
5.5K SLoC

Zune-png

快速、正确且安全的 png 解码器

限制

  • 此解码器(目前)自动将小于 8 bpp 的图像扩展到 8 位(一个字节)。这取决于您的用例,可能需要或不需要。
  • 不支持非标准的 APNG(动画)扩展。

特性

  • 快速 deflate 解码器
  • 向量化过滤和位操作
  • 内存友好(少量分配)
  • 平台特定内建函数之外无不安全操作

使用方法

首先,在您的 Cargo.toml 中包含以下内容

[dependencies]
zune-png = "0.2.0"

然后您可以在您的库/二进制文件中访问解码器。

use zune_png::PngDecoder;
// decode bytes
let decoder = PngDecoder::new(b"bytes").decode().unwrap();

调试与发布

解码器严重依赖于平台特定内建函数,即 AVX2 和 SSE 以在解码中获得速度提升,但在调试构建中表现不佳。为了在调试模式下编译程序时获得合理的性能,请将以下内容添加到您的 Cargo.toml

# `zune-png` package will be always built with optimizations
[profile.dev.package.zune-png]
opt-level = 3

基准测试

与 Rust 和 C 解码器比较的更新基准测试可以在 这里 找到,前缀为 png。基准测试定期更新以跟上优化添加。

依赖关系