#jpeg #compression #port #compressing #safety #tool #lepton

bin+lib lepton_jpeg

Rust 版 Lepton JPEG 压缩库

3 个版本 (破坏性更新)

0.3.0 2023 年 4 月 17 日
0.2.0 2023 年 3 月 24 日
0.1.2 2023 年 1 月 26 日
0.1.1 2023 年 1 月 26 日
0.1.0 2023 年 1 月 26 日

#329 in 图像

Apache-2.0

355KB
7.5K SLoC

Lepton JPEG 压缩 Rust 端口

这是 Dropbox 在此位置发布的 C++ Lepton JPEG 压缩工具的端口:dropbox/lepton: Lepton 是一种工具和文件格式,用于无损压缩 JPEG 文件,平均压缩率为 22%。 (github.com)

由于对 C++ 代码进行全面安全审计的工作量很大,并且 Dropbox 已经弃用了该代码库,因此我们创建了库的 Rust 端口,它具有与 Rust 提供的所有安全特性几乎相同的性能特征。

Lepton 压缩库

库的源代码位于 src 目录中,集成测试位于 test 目录中。images 文件夹下有各种测试图像。

构建

如果您已安装 Rust 1.65 或更高版本(旧版本将警告不稳定功能,如作用域线程),则构建项目相当简单。cargo buildcargo test 执行您期望的操作,而 cargo build --release 创建优化后的发布版本。

某些操作已矢量化,例如使用 Wide crate 的 IDCT,因此如果您启用 +AVX2,可以获得显著的性能提升。

运行

该项目中包含了一个名为 lepton_jpeg_util.exe 的包装器。它可以用于压缩/解压缩,并可以验证给定JPEG的端到端测试。如果输入文件有 .jpg 扩展名,则将其编码。如果输入文件有 .lep 扩展名,则将其解码回原始的 .jpg

它支持以下选项

lepton_jpeg_util.exe[options] <inputfile> [<outputfile>]

Option 描述
-threads:n 以最多 n 个线程运行。对于编码,这限制了从解码器获得的并行性数量。
-dump 将 JPG 或 LEP 文件的 内容导出,使用 -all 选项时,也会导出系数图像块
-noprogressive 如果遇到的是渐进文件而不是尝试编码,将引发错误
-verify 读取、编码和解码,以验证是否存在精确匹配。未指定输出文件。
-iter:n 运行操作 N 次迭代。当我们在一个分析器中运行时很有用。

设计

到库整体设计的链接

贡献

您可以通过多种方式参与此项目,例如

  • 提交错误和功能请求,并帮助我们验证它们被检查进来的情况
  • 审查 源代码更改 或作为拉取请求提交您自己的功能。
  • 该库只使用 稳定功能,因此如果您想利用 SIMD 功能,例如 AVX2,请使用 Wide crate(以 idct.rs 为例),而不是内省。

行为准则

此项目已采用 Microsoft 开源行为准则。有关更多信息,请参阅 行为准则常见问题解答 或通过 [email protected] 联系以提出任何额外的问题或意见。

许可

版权(c)微软公司。保留所有权利。

根据 Apache 2.0 许可证授权。

依赖

~5–16MB
~191K SLoC