| Crates.io | intvg |
| lib.rs | intvg |
| version | 0.1.7 |
| created_at | 2023-08-07 01:53:27.21093+00 |
| updated_at | 2024-06-14 15:21:42.880215+00 |
| description | lib/tool in Rust to load/save/render tvg file, parse from svg file by usvg |
| homepage | |
| repository | https://github.com/mhfan/intvg |
| max_upload_size | |
| id | 937603 |
| size | 948,472 |
A library/tool to load/save binary .tvg file, rendering to .png file powered by tiny-skia, parsing from .svg file powered by 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.
Build controlled by feature "b2d".
(cd 3rdparty && ./layout.sh) # just run once
cargo r -F b2d -- <path-to-svg/tvg> [<path-to-tvg/png>]
A built-in Rust binding for Blend2D, simpler than outdated blend2d-rs.
Build controlled by feature "evg".
(cd 3rdparty && ./layout.sh) # just run once
cargo r -F evg -- <path-to-svg/tvg> [<path-to-tvg/png>]
Built-in seems the only one Rust binding in public for GPAC/EVG.
Build controlled by feature "nvg".
cargo r -F nvg --bin nanovg -- <path-to-svg>
Refer to the SVG example in Femotovg, updated, rewritten and optimized the code, added Drag & Drop support.
Run the following command in the wcnvs sub-crate/project to start the Dioxus dev server:
dx serve --hot-reload
| 2D Engine | Timing | Performance | Note |
|---|---|---|---|
| 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 on MacBook Pro with Apple M1 Pro.