1 unstable release
0.1.0 | Aug 2, 2024 |
---|
#214 in Graphics APIs
1,166 downloads per month
49KB
1K
SLoC
librsvg-rebind
The librsvg-rebind crates allow to use librsvg's C-API from rust. Since librsvg is written in Rust, a native Rust API does exist. However, statically linking the library into a binary might not be desired in all cases. In these cases, librsvg can be linked dynamically and can reduce the Rust binary size by about 5 MB.
lib.rs
:
Rust librsvg bindings
This package contains safe Rust bindings for the librsvg C library.
Since librsvg is written in Rust, the native rsvg
crate is available
to use the same features. One of the main purposes of librsvg-rebind
is to reduce the binary sice.
To use this package, the librsvg-2 library has to be available on the system.
If you use the native rsvg
crate, this is not required.
Example
use librsvg_rebind::prelude::*;
let handle = librsvg_rebind::Handle::from_file("../../rsvg/example.svg")
.unwrap()
.unwrap();
let (width, height) = handle.intrinsic_size_in_pixels().unwrap();
let surface =
cairo::ImageSurface::create(cairo::Format::ARgb32, width as i32, height as i32).unwrap();
let context = cairo::Context::new(&surface).unwrap();
let viewport = librsvg_rebind::Rectangle::new(0., 0., height, width);
handle.render_document(&context, &viewport).unwrap();
let mut output_file = std::fs::File::create("/dev/null").unwrap();
surface.write_to_png(&mut output_file).unwrap();
Dependencies
~7–15MB
~227K SLoC