#placeholder #image #blurhash #encode-decode

fast-blurhash

这是一个更快的 BlurHash 算法实现,用于生成更美观的网站和移动应用的占位符。

2 个稳定版本

1.0.1 2023 年 3 月 5 日
1.0.0 2023 年 3 月 4 日

1047算法

Apache-2.0

41KB
621

Crates.io

更快的 BlurHash

这是一个更快的 BlurHash 算法实现,用于生成更美观的网站和移动应用的占位符。此库包含编码和解码函数,以最小化分配向量的数量,从而减少内存占用。基础 83 编码和解码也都很快速!

致谢

BlurHash 算法的原始实现可以在这里找到。

用法

安装

fast_blurhash 可在 crates.io 上找到

使用 cargo add 命令

cargo add fast_blurhash

或将 crate 添加到您的 Cargo.toml 中

[dependencies]
fast_blurhash = "1"

从图像生成 blurhash

从图像生成 blurhash

use fast_blurhash::compute_dct;

let (width, height) = todo!("Get image width and height");
let image: Vec<u32> = todo!("Load the image");
let blurhash = compute_dct(&image, width, height, 3, 4).into_blurhash();

您也可以传递一个足够长的迭代器以避免复制数据

use fast_blurhash::compute_dct;

let (width, height) = todo!("Get image width and height");
let image: Vec<u32> = todo!("Load the image");
let blurhash = compute_dct_iter(image.iter(), width, height, 3, 4).into_blurhash();

compute_dct 可以使用的支持类型

类型 别名 处置 备注
[f32; 3] 线性 [红,绿,蓝] 通道位于线性空间中
[u8; 3], &[u8; 3] RGB [红,绿,蓝]
[u8; 4], &[u8; 4] RGBA [红,绿,蓝,透明度] 透明度将被忽略
u32 0xAARRGGBB 其中 A 是透明度 透明度将被忽略

此 crate 还支持使用您自定义的类型(请参阅 trait AsLinear 和文档中的示例)。

从 blurhash 生成占位符

从 blurhash 生成图像

use fast_blurhash::decode;

let blurhash = "LlMF%n00%#MwS|WCWEM{R*bbWBbH";
let image: Vec<u32> = decode(&blurhash, 1.).unwrap().to_rgba(32, 32);

可用的生成函数

函数 返回类型 处置 备注
to_image<\T>(width, height, fn(Linear) -> T) Vec<\T> Linear: [红,绿,蓝] Linear 是一个表示线性空间中颜色的内置类型。
to_rgb8(width, height) Vec<[u8; 3]> [红,绿,蓝]
to_rgba8(width, height) Vec<[u8; u4]> [红,绿,蓝,透明度] 透明度总是 255
to_rgba(width, height) Vec<\u32> 0xAARRGGBB 其中 A 是透明度 透明度总是 255

文档

更多文档可以在 rust 文档中找到。

待办事项

  • 添加文档
  • 添加解码
  • 发布到 crate.io

贡献 & 反馈

如果您有任何反馈,请提出问题。如果您遇到任何错误或不受欢迎的行为,请提出问题。

该项目欢迎贡献,请随时提交您的 pull request!

许可

fast-blurhash 在 Apache License 2.0 许可下提供。有关更多信息,请参阅 LICENSE 文件。

无运行时依赖