RazrFalcon / resvg

An SVG rendering library.
Mozilla Public License 2.0
2.7k stars 218 forks source link

Unexpected empty image rendered #711

Closed sorairolake closed 7 months ago

sorairolake commented 7 months ago

Since resvg v0.38.0 or later, an unexpected empty image is rendered when inputting the following SVG image.

SVG image to input:

Input

Expected output PNG image:

Expected

Actual output PNG image:

Actual

Code:

use std::io::Write;

fn main() {
    let args: Vec<_> = std::env::args().collect();

    let opt = resvg::usvg::Options::default();

    let data = std::fs::read(&args[1]).unwrap();
    let tree = resvg::usvg::Tree::from_data(&data, &opt).unwrap();

    let pixmap_size = tree.size.to_int_size();
    let mut pixmap =
        resvg::tiny_skia::Pixmap::new(pixmap_size.width(), pixmap_size.height()).unwrap();
    resvg::render(
        &tree,
        resvg::tiny_skia::Transform::default(),
        &mut pixmap.as_mut(),
    );
    let image = pixmap.encode_png().unwrap();
    std::io::stdout().write_all(&image).unwrap();
}

Cargo.toml:

[dependencies]
resvg = { version = "0.39.0", default-features = false }
LaurenzV commented 7 months ago

The API has changed, you need to call tree.calculate_bounding_boxes() or tree.postprocess() before rendering it.

RazrFalcon commented 7 months ago

Here is how resvg should be used: https://github.com/RazrFalcon/resvg/blob/master/crates/resvg/examples/minimal.rs