[ENG-1668] Update resvg and related code (#2177)

deps: update `resvg` and related code
This commit is contained in:
jake 2024-03-07 18:22:04 +00:00 committed by GitHub
parent 71272d5976
commit 6ed0d5edfb
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 13 additions and 16 deletions

View file

@ -15,7 +15,7 @@ heif = ["dep:libheif-rs", "dep:libheif-sys"]
[dependencies]
image = { workspace = true }
once_cell = { workspace = true }
rspc = { workspace = true, optional = true } # error conversion
rspc = { workspace = true, optional = true } # error conversion
specta = { workspace = true, optional = true }
serde = { workspace = true, optional = true, features = ["derive"] }
thiserror = { workspace = true }
@ -25,7 +25,7 @@ bincode = { version = "2.0.0-rc.3", features = [
"derive",
"alloc",
], optional = true }
resvg = "0.36.0"
resvg = "0.40.0"
# both of these added *default* bindgen features in 0.22.0 and 2.0.0 respectively
# this broke builds as we build our own liibheif, so i disabled their default features

View file

@ -6,7 +6,7 @@ use resvg::{
tiny_skia::{self},
usvg,
};
use usvg::{fontdb, TreeParsing, TreeTextToPath};
use usvg::fontdb;
#[derive(PartialEq, Eq)]
pub struct SvgHandler {}
@ -20,33 +20,30 @@ impl ImageHandler for SvgHandler {
)]
fn handle_image(&self, path: &Path) -> Result<DynamicImage> {
let data = self.get_data(path)?;
let rtree = usvg::Tree::from_data(&data, &usvg::Options::default()).map(|mut tree| {
let mut fontdb = fontdb::Database::new();
fontdb.load_system_fonts();
tree.convert_text(&fontdb);
resvg::Tree::from_usvg(&tree)
})?;
let mut fontdb = fontdb::Database::new();
fontdb.load_system_fonts();
let rtree = usvg::Tree::from_data(&data, &usvg::Options::default(), &fontdb)?;
let (scaled_w, scaled_h) =
scale_dimensions(rtree.size.width(), rtree.size.height(), SVG_TARGET_PX);
scale_dimensions(rtree.size().width(), rtree.size().height(), SVG_TARGET_PX);
let size = if rtree.size.width() > rtree.size.height() {
rtree.size.to_int_size().scale_to_width(scaled_w)
let size = if rtree.size().width() > rtree.size().height() {
rtree.size().to_int_size().scale_to_width(scaled_w)
} else {
rtree.size.to_int_size().scale_to_height(scaled_h)
rtree.size().to_int_size().scale_to_height(scaled_h)
}
.ok_or(Error::InvalidLength)?;
let transform = tiny_skia::Transform::from_scale(
size.width() as f32 / rtree.size.width(),
size.height() as f32 / rtree.size.height(),
size.width() as f32 / rtree.size().width(),
size.height() as f32 / rtree.size().height(),
);
let Some(mut pixmap) = tiny_skia::Pixmap::new(size.width(), size.height()) else {
return Err(Error::Pixbuf);
};
rtree.render(transform, &mut pixmap.as_mut());
resvg::render(&rtree, transform, &mut pixmap.as_mut());
image::RgbaImage::from_raw(pixmap.width(), pixmap.height(), pixmap.data().into())
.map_or_else(