Image crate是 Rust 最受欢迎的图像处理库,现已发布新版本!它为各种图像格式带来了加速和其他增强功能。
JPEG格式
此版本从jpeg-decoder切换到 zune-jpeg crate 以解码 JPEG 图像。这带来了巨大的性能改进。
zune-jpeg的性能与 libjpeg-turbo, 不相上下,libjpeg-turbo 是一个经过广泛优化的库,其中的汇编比 C 语言多,在纯 Rust 中匹配这种性能是一项了不起的成就!
由于这一变化,不再支持几乎只用于医学成像的晦涩难懂的“无损 JPEG”格式。如果您需要处理无损 JPEG,我们建议直接使用 jpeg-decoder。
此更改还允许对内存限制提供适当的支持。 jpeg-decoder
可以分配可能无限的内存量,同时 zune-jpeg
允许设置内存限制。
PNG 格式
该 png
板条箱的性能有所提高,这在很大程度上要归功于在 Chromium 中将其用于 PNG 解码的持续努力。
为了实现它, png
crate 不仅需要和 libpng 一样快(已经有一段时间了),而且还需要匹配 Chromium 的 SIMD 优化分叉的速度 libpng
。我们正在取得良好的进展,并且非常接近!
其中一项优化(对没有透明度的图像进行 Paeth 取消过滤)需要显式 SIMD,并且无法通过自动矢量化实现。为了避免引入 unsafe
代码,它是使用可移植 SIMD API 实现的。如果您需要最佳性能,请使用夜间编译器和 png
板条箱上的 unstable
功能。
GIF 动图
除了性能改进之外(是的,这里也是 - 而且它已经足够快了!),API 现在允许在动画 GIF 中并行解码和编码帧,让您将性能提升到一个全新的水平。
此版本还具有更低的内存使用率,删除了最后的 unsafe
代码,并通过在帧上 Decoder
实现 Iterator
以及其他增强功能使 API 更加友好。
WebP 网络
纯 Rust WebP 解码器现在可以投入生产了!
一段时间以来,它一直是默认设置, image
但在某些边缘情况下会导致不正确的解码。现在已经在数千张真实世界的图像上进行了测试,所有剩余的分歧都已得到修复。它的输出通常逐位匹配 libwebp
。
如果您以前因为正确性问题而一直在使用 libwebp
,您现在可以切换到 image-webp
并且再也不必处理在野外利用的破坏性缓冲区溢出!
虽然正确性应该非常好,但解码器的性能仍然不如 libwebp
汇编优化。非常欢迎提高性能的 PR!
在此版本中,有损编码器已依赖 libwebp
并已删除。您仍然可以使用 webp
板条箱对 image
板条箱加载的图像进行编码,请参阅此处。
image
现在还包括一个用于 WebP 的内存安全无损编码器。压缩速度非常快,但生成的文件比创建 libwebp
的文件大(即使它们已经击败了 PNG)。甚至更高的压缩比模式的贡献也将非常受欢迎。
API 更改
在许多解码器上添加了 BufRead + Seek
绑定。这使我们能够避免在解码开始之前复制内存中已有的数据,并在将来解锁进一步的优化。
删除了增量解码。只有一小部分解码器支持它。删除它使我们能够使 ImageDecoder
特征对象安全。
For other, relatively minor changes please see the full changelog.
对于其他相对较小的更改,请参阅完整的更改日志。
更多信息查看 GitHub, https://github.com/image-rs/image
rustyscript: Rust中轻松集成JS
这个 crate 旨在提供一种快速简单的方法来从 rust 中集成运行时 javacript 或打字稿组件。 默认情况下,正在运行的代码完全从主机沙盒化,没有文件系统或网络访问权限。支持异步 JS 代码(我建议在创建运行时使用 timeout 选项)。加载的 JS 模块可以导入其他模块。Typescript 默认支持,并将转译为 JS 执行。
``
use rustyscript::{json_args, Runtime, Module, Error};
let module = Module::new(
"test.js",
"
rustyscript.register_entrypoint(
(string, integer) => {
console.log(`Hello world: string=${string}, integer=${integer}`);
return 2;
}
)
"
);
let value: usize = Runtime::execute_module(
&module, vec![],
Default::default(),
json_args!("test", 5)
)?;
assert_eq!(value, 2);
rxpipes - 一个 2D 终端屏保
这不是一个非常有用的纳米项目,但仍然比hello world大一点。这是一个“屏幕保护程序”,灵感来自用于终端的 pipes.sh(以及 Windows 的旧屏幕保护程序)。它使用交叉项进行绘图和输入。
特征:
- 6 个可用的计件集(或图块集)。
- 每个管道都有自己的颜色;可用的调色板包括:无(无色)、基色(由终端主题定义的 16 种颜色)和 RGB。
- 多变的FPS。
- 可以更改管道的最小和最大长度。
- 可以更改绘制的最大字符数。若要忽略此设置,请通过 CLI 指定 0。当达到此数字时,屏幕将被清除。
- 转动管道的概率是可变的,它以十进制形式 (0 .. 1) 的百分比给出。
- 屏幕保护程序可以通过按空格键暂停,用 q、Q 或转义键关闭。
更多信息查看 GitHub,https://github.com/inunix3/rxpipes
From 日报小组 [倪步烤Neo]
社区学习交流平台订阅:
评论区
写评论还没有评论