1个不稳定版本
使用旧Rust 2015
0.1.8 | 2022年8月26日 |
---|
#335 in 渲染
170KB
54 行
距离场
警告
这是一个临时分支,直到发布新的上游版本针对image≥0.24.2
一个用于生成距离场位图的Rust库/可执行文件,用于在着色器中渲染伪向量图像
文档
生成器二进制文件
检出仓库并 cd
进入;然后运行
cargo run --example generator -- img/input.png output.png 64 64
这将使用以下图像作为输入
并生成一个64x64的距离场
现在我们可以使用生成的距离场来创建矢量图像。
使用距离场
首先我们需要使用线性插值将其放大
然后应用阈值函数
您可以看到,我们得到的是非常类似于原始输入图像的东西,而且只从一个64x64的图像中获取!但它仍然非常像素化,并不像矢量图像。这可以通过不进行硬阈值,而是允许一些灰度调色来实现。
库
该库的一个示例用法是将资产图像自动转换。您可以通过添加类似于以下内容的 build.rs
来实现这一点
extern crate image;
extern crate distance_field;
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");
}
并将以下内容添加到 Cargo.toml
[packages]
build = "build.rs"
[build-dependencies]
distance-field = "0.1"
image = "0.22"
依赖项
~13MB
~60K SLoC