11 个版本
0.2.1 | 2024 年 2 月 9 日 |
---|---|
0.2.0 | 2022 年 10 月 10 日 |
0.1.8 | 2022 年 10 月 9 日 |
0.1.7 | 2019 年 7 月 29 日 |
0.1.5 | 2017 年 12 月 28 日 |
#46 在 渲染
66 每月下载量
用于 omt
29KB
83 代码行
distance-field
文档
生成用于在着色器中渲染为伪矢量图像的距离场位图。
该库的一个示例用途是将资产图像自动转换为距离场。你可以通过以下类似的 build.rs
实现此功能
use std::fs::File;
use distance_field::DistanceFieldExt;
fn convert_image_to_dfield(input: &str, output: &str) {
// Load the 'input' image
let img = image::open(input).unwrap();
// Generate a distance field from the image
let outbuf = img.grayscale().distance_field(distance_field::Options {
size: (128, 128),
max_distance: 256,
..Default::default()
});
// Save it to 'output' as a PNG
image::DynamicImage::ImageLuma8(outbuf).save(output).unwrap();
}
fn main() {
convert_image_to_dfield("img/input.png", "output.png");
}
生成器二进制文件
检出仓库并 cd
进入它;然后运行
cargo run --example generator -- img/input.png output.png 64 64
这将以下图像作为输入
并生成一个 64x64 的距离场
现在我们可以使用生成的距离场来创建矢量图像。
使用距离场
首先我们需要通过线性插值将其放大
然后我们应用一个阈值函数
你可以看到,我们得到了与原始输入图像非常相似的东西,而且只是从一个 64x64 的图像中得到的!但它仍然非常像素化,看起来不像矢量图像。这可以通过不执行硬阈值而是允许一些灰色调来修复。
依赖关系
~6MB
~83K SLoC