3 个版本 (破坏性更新)
0.3.0 | 2023 年 4 月 17 日 |
---|---|
0.2.0 | 2023 年 3 月 24 日 |
0.1.2 | 2023 年 1 月 26 日 |
0.1.1 |
|
0.1.0 |
|
#329 in 图像
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 build
和 cargo 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