1use macroquad::{prelude::ImageFormat, texture::Texture2D};
2use resvg::usvg_text_layout::{fontdb, TreeTextToPath};
3
4pub fn svg_to_png(svg_str: &str) -> Vec<u8> {
12 let opt = resvg::usvg::Options::default();
13 let mut tree = resvg::usvg::Tree::from_str(svg_str, &opt).unwrap();
14 let mut fontdb = fontdb::Database::new();
15 fontdb.load_system_fonts();
16 tree.convert_text(&fontdb, opt.keep_named_groups);
17 let pixmap_size = tree.size.to_screen_size();
18 let mut pixmap =
19 resvg::tiny_skia::Pixmap::new(pixmap_size.width(), pixmap_size.height()).unwrap();
20
21 resvg::render(
22 &tree,
23 resvg::usvg::FitTo::Original,
24 resvg::tiny_skia::Transform::default(),
25 pixmap.as_mut(),
26 )
27 .unwrap();
28 pixmap.encode_png().unwrap()
29}
30
31pub fn svg_to_texture(svg_str: &str) -> Texture2D {
35 let png_data = svg_to_png(&svg_str);
36 Texture2D::from_file_with_format(&png_data, Some(ImageFormat::Png))
37}