3 个不稳定版本
0.2.1 | 2022年10月21日 |
---|---|
0.2.0 | 2021年12月25日 |
0.1.0 | 2021年12月25日 |
在 解析器实现 中排名 1663
83KB
1K SLoC
tinyvg-rs
这是 tinyvg 图像格式的 Rust 实现。它提供了一个可执行程序,可以从 TinyVG 输入文件渲染 PNG 图像,以及一个库,可以渲染 PNG 图像或 piet::RenderContext
支持的任何格式。
依赖项
除了一个之外的所有依赖项都由 cargo 管理。这个程序/库依赖于 cairo 来渲染 PNG。您应该能够使用您的操作系统包管理器安装 cairo。
可执行文件
安装
$ cargo install tinyvg
使用方法
tinyvg 0.1.0
TinyVG to PNG renderer
USAGE:
tinyvg [OPTIONS] <input>
FLAGS:
-h, --help Prints help information
-V, --version Prints version information
OPTIONS:
-o <output> Optional output path. If not specified, uses the input path with a `.png` suffix
ARGS:
<input> Input path to TinyVG binary file
库使用
use tinyvg::Decoder;
use std::fs::File;
fn main() -> eyre::Result<()> {
// Build a decoder from a `std::io::Read`. Here a file is used, but any type
// that implements `Read` can be used.
let decoder = Decoder::new(File::open("data/shield.tvg")?);
let image = decoder.decode()?;
let mut out = File::create("out.png")?;
// Render the image to a PNG file. Here a file is used, but any type
// that implements `std::io::Write` can be used.
image.render_png(&mut out)?;
Ok(())
}
功能
render-png
(默认) - 启用将 TinyVG 图像渲染为 PNG 文件的功能。禁用此功能将删除 cairo 依赖项。如果您已经使用 piet 与其他后端一起使用,这可能很有用。
开发
测试
有一些文档测试可以验证某些文件可以无错误地解码和渲染,但目前还没有多少自动测试。我不确定如何有效地编写等式测试而不编写大量的代码。有一个示例程序会遍历 data
目录并将所有 .tvg
文件渲染成同名 .png
文件。这可以用来验证示例图像的渲染行为。
$ cargo run --example render-all
path render time
data/app_icon.tvg 78.94075ms
data/chart.tvg 14.194083ms
data/comic.tvg 23.534791ms
data/everything.tvg 21.251875ms
data/flowchart.tvg 5.075ms
data/shield.tvg 597.916µs
data/tiger.tvg 35.942166ms
$ open data/tiger.png
还有一个 criterion 基准测试套件,用于测试解码和渲染。
$ cargo bench
TinyVG/decode/tiger.tvg time: [135.98 us 136.65 us 137.34 us]
TinyVG/render/tiger.tvg time: [27.541 ms 27.629 ms 27.744 ms]
依赖项
~4.5–6.5MB
~118K SLoC