2 个稳定版本
1.0.1 | 2023 年 3 月 5 日 |
---|---|
1.0.0 | 2023 年 3 月 4 日 |
1047 在 算法 中
41KB
621 行
更快的 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 文件。