52 releases (18 breaking)

0.18.0 Sep 27, 2024
0.17.0 Apr 18, 2024
0.16.0 Feb 23, 2024
0.14.0 Sep 28, 2023
0.0.7 Feb 27, 2015

#9 in Images

Download history 16429/week @ 2024-09-20 16368/week @ 2024-09-27 16106/week @ 2024-10-04 16033/week @ 2024-10-11 18696/week @ 2024-10-18 16850/week @ 2024-10-25 15755/week @ 2024-11-01 13248/week @ 2024-11-08 15726/week @ 2024-11-15 17677/week @ 2024-11-22 21007/week @ 2024-11-29 24725/week @ 2024-12-06 23482/week @ 2024-12-13 9638/week @ 2024-12-20 6813/week @ 2024-12-27 15360/week @ 2025-01-03

60,394 downloads per month
Used in 245 crates (126 directly)

Apache-2.0 OR MIT

85KB
2.5K SLoC

SVG Package Documentation Build

The package provides an SVG composer and parser.

Example: Composing

use svg::Document;
use svg::node::element::Path;
use svg::node::element::path::Data;

let data = Data::new()
    .move_to((10, 10))
    .line_by((0, 50))
    .line_by((50, 0))
    .line_by((0, -50))
    .close();

let path = Path::new()
    .set("fill", "none")
    .set("stroke", "black")
    .set("stroke-width", 3)
    .set("d", data);

let document = Document::new()
    .set("viewBox", (0, 0, 70, 70))
    .add(path);

svg::save("image.svg", &document).unwrap();

Example: Parsing

use svg::node::element::path::{Command, Data};
use svg::node::element::tag::Path;
use svg::parser::Event;

let path = "image.svg";
let mut content = String::new();
for event in svg::open(path, &mut content).unwrap() {
    match event {
        Event::Tag(Path, _, attributes) => {
            let data = attributes.get("d").unwrap();
            let data = Data::parse(data).unwrap();
            for command in data.iter() {
                match command {
                    &Command::Move(..) => { /**/ },
                    &Command::Line(..) => { /**/ },
                    _ => {}
                }
            }
        }
        _ => {}
    }
}

Contribution

Your contribution is highly appreciated. Do not hesitate to open an issue or a pull request. Note that any contribution submitted for inclusion in the project will be licensed according to the terms given in LICENSE.md.

No runtime deps