lib_tsshow 2.1.1

A visualiser for template-switch alignments
Documentation
use resvg::usvg::Options;

pub mod error;
pub mod plain_text;
pub mod svg;
pub mod ts_arrangement;

pub fn svg_to_png(svg_in: &[u8], zoom: f32) -> Vec<u8> {
    log::info!("Converting SVG to PNG");

    let mut options = Options::default();
    options.fontdb_mut().load_system_fonts();
    let svg = resvg::usvg::Tree::from_data(svg_in, &options).unwrap();

    let raster_image_size = svg.size();
    let raster_image_width = (raster_image_size.width().ceil() * zoom) as u32;
    let raster_image_height = (raster_image_size.height().ceil() * zoom) as u32;
    log::info!("PNG size: {raster_image_width}x{raster_image_height}",);

    let mut raster_image =
        resvg::tiny_skia::Pixmap::new(raster_image_width, raster_image_height).unwrap();
    resvg::render(
        &svg,
        resvg::usvg::Transform::from_scale(zoom, zoom),
        &mut raster_image.as_mut(),
    );
    raster_image.encode_png().unwrap()
}