#png #image-format #decoder #renderer #render #input #rendering

bin+lib tinyvg

Rust 对 tinyvg 图像格式的解码器和渲染器

3 个不稳定版本

0.2.1 2022年10月21日
0.2.0 2021年12月25日
0.1.0 2021年12月25日

解析器实现 中排名 1663

MIT 许可证

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