
[](https://codecov.io/gh/mhfan/intvg)
[](https://crates.io/crates/intvg)
[](https://deps.rs/repo/github/mhfan/intvg)
[](https://opensource.org/licenses/MIT)
# Another [TinyVG](https://tinyvg.tech/) image parser & renderer in Rust
A library/tool to load/save binary .tvg file, rendering to .png file powered by [tiny-skia](https://github.com/RazrFalcon/tiny-skia), parsing from .svg file powered by [usvg](https://github.com/RazrFalcon/resvg/tree/master/crates/usvg), with least external dependencies, simple and concise Rust code.
TinyVG textual representation (.tvgt) is only for debugging/development purposes which can be easily achieved with `#[derive(Debug)]` and `println!("{:?}, commands)` or `dbg!(commands)` in Rust.
## Binding [GPAC/EVG](https://github.com/gpac/gpac/tree/master/src/evg) 2D rendering engine
Build controlled by feature `"evg"`.
Built-in seems the only one Rust binding for GPAC/EVG.
## Binding [Blend2D](https://github.com/blend2d/blend2d) rendering engine
Build controlled by feature `"b2d"`.
A built-in Rust binding for Blend2D, simpler than outdated [blend2d-rs](https://github.com/Veykril/blend2d-rs).
## A SVG Renderer/Viewer powered by [Femtovg](https://github.com/Femtovg/Femtovg)
Build controlled by feature `"nvg"`.
Refer to the SVG example in Femotovg, updated, rewritten and optimized the code.
## Another SVG/TinyVG Viewer based on [HTML5/Web 2D Canvas API](https://developer.mozilla.org/en-US/docs/Web/API/Canvas_API)
In the sub-crate `wcnvs`.
## Rendering performance comparison
| Femtovg: | 1.65 ms | 606.8 fps | max performance |
| Blend2D: | 1.94 ms | 515.5 fps | float/double |
| CanvasAPI: | 2.00 ms | 500.0 fps | bad T accuracy? |
| tiny_skia: | 5.10 ms | 195.9 fps | |
| GPAC/EVG: | 7.96 ms | 125.6 fps | floating point |
| GPAC/EVG: | 18.07 ms | 55.3 fps | fixed-point math |
Test rendering [Ghostscript_Tiger.svg](https://commons.wikimedia.org/wiki/File:Ghostscript_Tiger.svg) on _MacBook Pro_ with _Apple M1 Pro_.
* <https://www.nan.fyi/svg-paths>