1 unstable release
0.1.0 | Oct 29, 2023 |
---|
#6 in #dynamic-image
Used in leptos_image_optimizer
15KB
272 lines
If you want to read Read me in English go to this Read me README
SVG to PNG
이 리포는 svg 파일을 png 로 바꾸어 저장 하거나 image crate 에 호환되는 Dynamic Image 타입을 만들기 위해서 생성한 리포 입니다.
Dependency
[dependencies]
image = { version = "0.24.7"}
rsvg = "0.4.0"
cairo-rs = "0.4.1"
cairo-rs 의 버전은 0.4.1 버전이상을 사용해야 합니다. 이는 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)
Dependencies
~16MB
~261K SLoC