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

Download history 54/week @ 2024-03-11 55/week @ 2024-03-18 22/week @ 2024-03-25 79/week @ 2024-04-01 18/week @ 2024-04-08 23/week @ 2024-04-15 25/week @ 2024-04-22 24/week @ 2024-04-29 22/week @ 2024-05-06 29/week @ 2024-05-13 84/week @ 2024-05-20 73/week @ 2024-05-27 40/week @ 2024-06-03 53/week @ 2024-06-10 62/week @ 2024-06-17 42/week @ 2024-06-24

每月下载量204
5个crates中使用(直接使用3个)

版权:Zlib/MIT

文件大小:55KB
代码行数:694(不包括注释)

nsvg 构建状态 构建状态 Crates.io

是优秀的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