9个不稳定版本
使用旧的Rust 2015
0.5.1 | 2019年9月3日 |
---|---|
0.5.0 | 2018年6月18日 |
0.4.0 | 2018年4月8日 |
0.3.2 | 2018年4月3日 |
0.1.0 | 2017年12月5日 |
在图像分类中排名418
每月下载量204次
在5个crates中使用(直接使用3个)
文件大小:55KB
代码行数:694(不包括注释)
nsvg

是优秀的NanoSVG C库的友好Rust包装器。
提供了一种简单的方式来解析和光栅化SVG,无论你想要多大的比例。它被编写为在视频游戏中方便地拥有适合用户所选分辨率的缩放UI元素,但也可以用于简单的文件转换。
NanoSVG支持广泛的SVG功能,其中大多数矢量元素都得到了完全支持。
光栅化器完全在CPU上运行,没有外部依赖。质量将相当接近从Inkscape导出的位图。光栅化器基于stb_truetype
中的那个,所有光栅都将抗锯齿。你可以在这里了解更多信息这里。
有更快基于GPU的解决方案来渲染矢量图形,但NanoSVG的简单性和它没有依赖性是一个巨大的优势,并且应该可以跨平台运行。
用法
在您的Cargo.toml
依赖项中包含nsvg
。
[dependencies]
nsvg = "0.5.1"
要包含没有image
依赖项的nsvg
,请在您的Cargo.toml
中添加它,而不使用默认依赖项。
[dependencies.nsvg]
version = "0.5.1"
default-features = false
现在您可以解析和光栅化SVG。使用比例参数来生成更大或更小的光栅化图像。宽高比将始终保持不变。
extern crate nsvg;
use std::path::Path;
fn main() {
let path = Path::new("examples/example.svg");
// Load and parse the svg
let svg = nsvg::parse_file(path, nsvg::Units::Pixel, 96.0).unwrap();
// Create a scaled raster
let scale = 2.0;
let image = svg.rasterize(scale);
}
不支持的SVG元素
由于其主要用于解析和光栅化矢量图形,因此nsvg不支持某些SVG功能
-
文本元素被忽略,尽管文本可以简单地转换为路径,并且仍然可以很好地工作
-
嵌入的位图图像被忽略
-
脚本将被忽略
-
动画将被忽略
如果您遇到任何未按预期光栅化的内容,请先尝试将其转换为路径。
开发中
默认情况下,nsvg将使用预构建的FFI绑定,但您可以通过运行以下命令手动重新生成:
cargo build --features bindgen
这将也将绑定复制到src
目录。如果需要更新绑定(例如升级NanoSVG时),它们应被提交到版本控制。
确保您有libclang-dev
可用,以便bindgen可以正常工作。
cargo test
以运行测试。
提供了一个示例,您可以使用以下命令运行:
cargo run --example svg_to_png
这将将example.svg
矢量图形转换为PNG。PNG将写入工作目录,文件名为example_output.png
。
另请参阅
https://github.com/memononen/nanosvg
https://github.com/rezrov/libnanosvg
许可
NanoSVG采用zlib许可
Sutte Hakkun标志由Nico Vliek绘制,是任天堂的注册商标。仅用于演示目的。
Mr Disk由Eoin Stanley绘制,是任天堂的注册商标。仅用于演示目的。
其他内容采用MIT许可
依赖项
~12MB
~81K SLoC