#dynamic-image #svg #png #file #convert

svg_to_png

将SVG转换为PNG和动态图像

1 个不稳定版本

0.1.0 2023年10月29日

#925 in 图像

每月45次下载
用于 leptos_image_optimizer

MIT 协议

15KB
272

如果您想用英文阅读README,请访问这个README README

SVG to PNG

此仓库是为了将svg文件转换为png格式或创建与image crate兼容的Dynamic Image类型而创建的。

依赖

[dependencies]
image = { version = "0.24.7"}
rsvg = "0.4.0"
cairo-rs = "0.4.1"

必须使用0.4.1版本或更高版本的cairo-rs。这是因为在rsvg中使用cairo-rs的版本为0.4.1,版本更改会导致类型变化,从而引起问题。

使用方法

https://github.com/jinseok9338/svg_to_png/assets/27854958/e2e3451e-8d92-43e1-8f15-aee097afca34


let handler = get_svg_handler(Path::new(TEST_FILE_PATH));
        assert_eq!(handler.is_ok(), true);
        let handler = handler.unwrap();
        println!("{:?}", handler);
        let surface = render_image(handler.width, handler.height, handler.handle, None);
        assert_eq!(surface.is_ok(), true);
        println!("{:?}", surface);
        let _ = save_png_to_path(&Path::new("./src/assets/example.png"), &surface.unwrap());

如下所示,使用get_svg_handler创建Handle后,通过render_image创建ImageSurface,然后使用save_png_to_path保存png文件。

let handler = get_svg_handler(Path::new(TEST_FILE_PATH));
        assert_eq!(handler.is_ok(), true);
        let handler = handler.unwrap();
        let surface = render_image(handler.width, handler.height, handler.handle, None);
        assert_eq!(surface.is_ok(), true);
        let image = make_surface_into_dynamic_image(&mut surface.unwrap());
        assert_eq!(image.is_ok(), true);

或者可以通过调用make_surface_into_dynamic_image来创建DynamicImage类型。→ 然后可以使用image crate进行webp或图像缩放等操作。

附加测试我测试了多个svg文件。(2023/10/29) -> 动画无法运行。测试了将文件转换为webp格式。(2023/10/29)

依赖

~26MB
~273K SLoC