usvg
An SVG simplification library.
0.48.1
25M downloads/mo
#1863 most downloaded on crates.io
linebender/resvg
What this package is like to depend on
Last release 21 days ago
02 Aug 2026
Release timing varies
gaps range from 1 weeks to 9 months
Nearly every release is documented
notes for 55 of 57 stable releases
Nothing withdrawn
no release was ever pulled
8 years old
57 releases · first in 2018
4 releases in the last 12 months
see the full history below
Release timeline
57 releases · Apr 2018 to Aug 2026Releases
latest 57-
0.48.102 Aug 2026Release notes
Open source →resvg-0.*.0.tar.xzis a sources archive with vendored Rust dependenciesresvg-explorer-extension.exeis an SVG thumbnailer for Windows Explorer
Check CHANGELOG.
Release notes
Open source →This release has an MSRV of 1.85.0 for
usvgandresvgand the C API.Changed
- MSRV lowered from 1.89 to 1.85. (#1109)
- Downgraded strict-num dependency to 0.1.1. This prevents duplicate versions from being included (#1110)
Fixed
- Fixed an
as_mut_slicefuture-compatibility warning. (#1108)
-
0.48.002 Aug 2026Release notes
Open source →resvg-0.*.0.tar.xzis a sources archive with vendored Rust dependenciesresvg-explorer-extension.exeis an SVG thumbnailer for Windows Explorer
Check CHANGELOG.
Release notes
Open source →This release has an MSRV of 1.89.0 for
usvgandresvgand the C API.The big change in this release is that text support is now backed by
skrifaandharfrustrather thanttf-parserandrustybuzz:- Moves resvg onto an actively maintained font stack.
- Should have faster and more correct text rendering.
- Will enable further improvements to things like variable font rendering in future.
- May impact binary size (expected +~500kb for people not otherwise including fontations dependencies in their tree).
- May result in small rendering changes compared to older versions of resvg.
Added
- New
svgzandwriterfeature gates to reduce the number of required dependencies. (#1088 by @reed-smout) - Warnings when parsing malformed paths. (#1011)
- A
Displayimplementation forUnits. (#986)
Changed
- MSRV bumped from 1.87 to 1.89. The requirement comes from
font-types. - Text shaping now uses
harfrustinstead ofrustybuzz, and font parsing usesskrifa(fontations) instead ofttf-parser. (#922 by @nicoburns) - Filter input dimension checks are now debug-only assertions. (#991)
Fixed
- Glyph advances are now calculated correctly. (#1043 by @fundon)
- Text nodes now inherit their absolute transform. (#1040 by @fundon)
- Fixes related to non-finite values. (#1049 by @SAY-5)
- Transforms are no longer applied twice in
abs_transform. (#1056 by @fundon) fris now resolved for radial gradients referenced viahref. (#1098 by @T1mVo)- Panic in
feCompositewith thearithmeticoperator when the filter region is larger than the clamped layer. (#1021, #1007) - Application of
transform(and other group properties likeopacity) on a nestedsvgelement. - The missing dimension of an
svgwith onlywidthorheightspecified is now computed from itsviewBoxaspect ratio. (#1045) - The
wghtvariation coordinate is now set even whenfont-weighthas its default value. (#1099) - The unprefixed
hrefattribute now takes precedence over the deprecatedxlink:hrefwhen both are present, as required by SVG 2. (#1015) - Incorrect y-axis offsets when transforming
feSpotLightsources. (#1052) - Panics caused by bounding boxes that exceed the supported integer range. (#989)
-
0.47.009 Feb 2026Release notes
Open source →resvg-0.*.0.tar.xzis a sources archive with vendored Rust dependenciesresvg-explorer-extension.exeis an SVG thumbnailer for Windows Explorer
Check CHANGELOG.
Release notes
Open source →This release has an MSRV of 1.87.0 for
usvgandresvgand the C API.Added
- Focal radius (
fr) supported for Radial Gradients. (#1014 by @wmedrano) - Support for variable fonts based on font-variation-settings CSS property. (#997 by @oetiker)
Changed
tiny-skiahas a major version bump from 0.11 to 0.12.
-
0.46.011 Jan 2026Release notes
Open source →resvg-0.*.0.tar.xzis a sources archive with vendored Rust dependenciesresvg-explorer-extension.exeis an SVG thumbnailer for Windows Explorer
Check CHANGELOG.
-
0.45.117 Apr 2025Release notes
Open source →resvg-0.*.0.tar.xzis a sources archive with vendored Rust dependenciesresvg-explorer-extension.exeis an SVG thumbnailer for Windows Explorer
Check CHANGELOG.
Release notes
Open source →Changed
- Support SVGs without the xmlns attribute on the root (#892)
- Add optimization for paths with markers in paint-order but no actual markers (#887)
Removed
- tools/kde-dolphin-thumbnailer. This was never a released tool, and it doesn't support current versions of KDE/dolphin ([#897][] by [@DJMcNab][])
-
0.45.026 Feb 2025Release notes
Open source →viewsvgis a simple application that showcases resvg capabilitiesresvg-0.*.0.tar.xzis a sources archive with vendored Rust dependenciesresvg-explorer-extension.exeis an SVG thumbnailer for Windows Explorer
Check CHANGELOG.
Release notes
Open source →This is the first release under the stewardship of [Linebender][], who is now responsible for maintenance of this crate. Many thanks to Yevhenii Reizner for the years of hard work that he has poured into this and other crates.
Please note that the license of this project changed from
MPL-2.0toApache-2.0 OR MIT. See resvg#838 for more information.This release has an MSRV of 1.65 for
usvgand 1.67.1 forresvgand the C API.Added
- Support for the
background-colorattribute. - Support for additional
image-renderingattributes. - Support for the
!importantCSS flag. - Support for Luma JPEG images.
- (c-api)
resvg_options_set_stylesheet. Thanks to [@michabay05][]. - (svgtypes) Support for floating point hue in
hsl()andhsla().
Changed
- License to
Apache-2.0 OR MIT. See resvg#838 for more information. - Updated WebP decoder for bug fixes and improved performance. Thanks to [@Shnatsel][].
- MSRV of resvg and c-api bumped to 1.67.1.
fontdbandrustybuzzhave been updated.- Updated other dependencies.
- (svgtypes) Simplified color component rounding and bounds checking.
- Improved handling of paths with paint order
markersbut no actual markers.
Fixed
- Relative unit handling when
usereferencessymbol. - (svgtypes) Rounding of hues in HSL to RGB conversion.
- (svgtypes) Rounding of alpha.
-
0.44.028 Sep 2024Release notes
Open source →viewsvgis a simple application that showcases resvg capabilitiesresvg-0.*.0.tar.xzis a sources archive with vendored Rust dependenciesresvg-explorer-extension.exeis an SVG thumbnailer for Windows Explorer
Check CHANGELOG.
Release notes
Open source →Added
- Stylesheet injection support. Thanks to @LaurenzV.
- (c-api)
resvg_get_object_bbox - (c-api)
cargo-cmetadata. Thanks to @lu-zero. - Implement
Fromforfontdbandusvgfont types. Thanks to @dhardy.
Changed
- (c-api)
resvg_get_image_bboxreturns a layer and not object bounding box now. Useresvg_get_object_bboxto preserve the old behavior.
Fixed
- (svgtypes) Path parsing with
SorTsegments afterA. - Bounding box calculation for the root group used for
viewBoxflattening.
-
0.43.010 Aug 2024Release notes
Open source →viewsvgis a simple application that showcases resvg capabilitiesresvg-0.*.0.tar.xzis a sources archive with vendored Rust dependenciesresvg-explorer-extension.exeis an SVG thumbnailer for Windows Explorer
Check CHANGELOG.
Release notes
Open source →Added
- Support WebP images. Thanks to @notjosh.
Changed
- Use
zune-jpeginstead ofjpeg-decoder. Thanks to @mattfbacon. - Update dependencies.
Fixed
-
0.42.001 Jun 2024Release notes
Open source →viewsvgis a simple application that showcases resvg capabilitiesresvg-0.*.0.tar.xzis a sources archive with vendored Rust dependenciesresvg-explorer-extension.exeis an SVG thumbnailer for Windows Explorer
Release notes
Open source →Added
resvgcan render color fonts now, aka Emojis.<br> In TrueType terms,COLRv0,COLRv1(mostly),sbix,CBDTandSVGtables are supported.<br> Thanks to @LaurenzV.- Fonts matching and fallback can be controlled by the caller via
usvg::FontResolvernow. Thanks to @LaurenzV. usvg::Options::font_resolver. Similar tousvg::Options::image_href_resolverwe already had.usvg::Options::fontdb- Support double-quoted FuncIRIs, aka
url("#id"). imageelement viewbox flattening.<br> Instead of havingusvg::Image::view_boxthat the caller should handle themselves, we instead replace it withtransformand optionalclip-path. This greatly simplifiesimagerendering.usvg::Image::size- Tree viewbox flattening.<br>
Similar to
imageabove, but affects the rootsvgelement instead. patternviewbox flattening.<br> Similar toimageabove, but for patterns.- Improve vertical text rendering. Thanks to @LaurenzV.
Changed
usvg::fontdb::Databaseshould be set inusvg::Optionsand not passed to the parser separately now.usvg::Optionsandusvg::ImageHrefResolverhave a lifetime now.- Replace
usvg::Visibilityenum with justbool. usvg::Path::visibility()is replaced withusvg::Path::is_visible()usvg::Image::visibility()is replaced withusvg::Image::is_visible()usvg::TextSpan::visibility()is replaced withusvg::TextSpan::is_visible()- Always represent
feImagecontent as a link to an element.<br> In SVG,feImagecan contain a link to an element or a base64 image data, just likeimage. From now, the inlined base64 data will always be represented by a link to an actualimageelement.
will be parsed as<filter> <feImage xlink:href="data:image/png;base64,..."/> </filter>
This simplifies<image id="image1" xlink:href="data:image/png;base64,..."/> <filter> <feImage xlink:href="#image1"/> </filter>feImagerendering, since we don't have to handle both cases now. - The
--list-fontsresvg argument can be used without providing an SVG file now. Can simply callresvg --list-fontsnow. - The
--list-fontsresvg argument includes generic font family names as well now. - Make sure all warning and errors are printed to stderr. Thanks to @ahaoboy.
Removed
usvg::ViewBox,usvg::AspectRatio,usvg::Aligntypes. Nol longer used.usvg::filter::Image::aspect. No longer needed.usvg::filter::Image::rendering_mode. No longer needed.usvg::filter::Image::data. Useusvg::filter::Image::rootinstead.usvg::Tree::view_box. No longer needed.usvg::Image::view_box. No longer needed.usvg::Image::pattern. No longer needed.usvg::utils::align_pos. No longer needed.usvg::Visibility. No longer needed.- (c-api)
resvg_get_image_viewbox. Useresvg_get_image_sizeinstead.
Fixed
context-fillhandling. Thanks to @LaurenzV.
-
0.41.003 Apr 2024Release notes
Open source →viewsvgis a simple application that showcases resvg capabilitiesresvg-0.*.0.tar.xzis a sources archive with vendored Rust dependenciesresvg-explorer-extension.exeis an SVG thumbnailer for Windows Explorer
Release notes
Open source →Added
context-fillandcontext-strokesupport. Thanks to @LaurenzV.usvg::Text::layouted(), which returns a list of glyph IDs. It can be used to manually draw glyphs, unlike withusvg::Text::flattened(), which returns just vector paths. Thanks to @LaurenzV.
Fixed
- Missing text when a
textelement uses multiple fonts and one of them produces ligatures. - Absolute transform propagation during
useresolving. - Absolute transform propagation during nested
svgresolving. Node::abs_transformdocumentation. The current element's transform is included.
-
0.40.017 Feb 2024Release notes
Open source →Added
usvg::TreeisSend + Synccompatible now.usvg::WriteOptions::preserve_textto control howusvggenerates an SVG.usvg::Image::abs_bounding_box
Changed
- All types in
usvgare immutable now. Meaning thatusvg::Treecannot be modified after creation anymore. - All struct fields in
usvgare private now. Use getters instead. - All
usvg::Treeparsing methods require thefontdbargument now. - All
defschildren like gradients, patterns, clipPaths, masks and filters are guarantee to have a unique, non-empty ID. - All
defschildren like gradients, patterns, clipPaths, masks and filters are guarantee to haveuserSpaceOnUseunits now. NoobjectBoundingBoxunits anymore. usvg::Maskis allowed to have no children now.- Text nodes will not be parsed when the
textbuild feature isn't enabled. usvg::Tree::clip_paths,usvg::Tree::masks,usvg::Tree::filtersreturns a pre-collected slice of unique nodes now. It's no longer a closure and you do not have to deduplicate nodes by yourself.usvg::filter::Primitive::x,y,widthandheightmethods were replaced withusvg::filter::Primitive::rect.- Split
usvg::Tree::paint_serversintousvg::Tree::linear_gradients,usvg::Tree::radial_gradients,usvg::Tree::patterns. All three returns pre-collected slices now. - A
usvg::Pathno longer can have an invalid bbox. Paths with an invalid bbox will be rejected during parsing. - All
usvgmethods that return bounding boxes return non-optionalRectnow. NoNonZeroRectas well. usvg::Text::flattenedreturns&Groupand notOption<&Group>now.usvg::ImageHrefDataResolverFnandusvg::ImageHrefStringResolverFnrequirefontdb::Databaseargument.- All shared nodes are stored in
Arcand notRc<RefCell>now. resvg::render_nodenow includes filters bounding box. Meaning that a node with a blur filter no longer be clipped.- Replace
usvg::utils::view_box_to_transformwithusvg::ViewBox::to_transform. - Rename
usvg::XmlOptionsintousvg::WriteOptionsand embedxmlwriter::Options.
Removed
usvg::Tree::postprocess()andusvg::PostProcessingSteps. No longer needed.usvg::ClipPath::units(),usvg::Mask::units(),usvg::Mask::content_units(),usvg::Filter::units(),usvg::Filter::content_units(),usvg::LinearGradient::units(),usvg::RadialGradient::units(),usvg::Pattern::units(),usvg::Pattern::content_units()andusvg::Paint::units(). They are alwaysuserSpaceOnUsenow.usvg::Units. No longer needed.
Fixed
- Text bounding box is accounted during SVG size resolving. Previously, only paths and images were included.
- Font selection when an italic font isn't explicitly marked as one.
- Preserve
imageaspect ratio when onlywidthorheightare present. Thanks to @LaurenzV.
-
0.39.006 Feb 2024Release notes
Open source →Added
fontshorthand parsing. Thanks to @LaurenzV.usvg::Group::abs_bounding_boxusvg::Group::abs_stroke_bounding_boxusvg::Path::abs_bounding_boxusvg::Path::abs_stroke_bounding_boxusvg::Text::abs_bounding_boxusvg::Text::abs_stroke_bounding_box
Changed
- All
usvg-*crates merged into one. There is just theusvgcrate now, as before.
Removed
usvg::Group::abs_bounding_box()method. It's a field now.usvg::Group::abs_filters_bounding_box()usvg::TreeParsing,usvg::TreePostProcandusvg::TreeWritingtraits. They are no longer needed.
Fixed
font-familyparsing. Thanks to @LaurenzV.- Absolute bounding box calculation for paths.
-
0.38.021 Jan 2024Release notes
Open source →Added
- Each
usvg::Nodestores its absolute transform now.Node::abs_transform()executes in constant time now. usvg::Tree::calculate_bounding_boxesto calculate all bounding boxes beforehand.usvg::Node::bounding_boxwhich returns a precalculated node's bounding box in object coordinates.usvg::Node::abs_bounding_boxwhich returns a precalculated node's bounding box in canvas coordinates.usvg::Node::stroke_bounding_boxwhich returns a precalculated node's bounding box, including stroke, in object coordinates.usvg::Node::abs_stroke_bounding_boxwhich returns a precalculated node's bounding box, including stroke, in canvas coordinates.- (c-api)
resvg_get_node_stroke_bbox usvg::Node::filters_bounding_boxusvg::Node::abs_filters_bounding_boxusvg::Tree::postprocess
Changed
resvgrendersusvg::Treedirectly again.resvg::Treeis gone.usvgno longer usesrctreefor the nodes tree implementation. The tree is a regularenumnow.- A caller no longer need to use the awkward
*node.borrow(). - No more panics on incorrect mutable
Rc<RefCell>access. - Tree nodes respect tree's mutability rules. Before, one could mutate tree nodes when the tree
itself is not mutable. Because
Rc<RefCell>provides a shared mutable access.
- A caller no longer need to use the awkward
- Filters, clip paths, masks and patterns are stored as
Rc<RefCell<T>>instead ofRc<T>. This is required for proper mutability sinceNodeitself is no longer anRc. - Rename
usvg::NodeKindintousvg::Node. - Upgrade to Rust 2021 edition.
Removed
resvg::Tree. No longer needed.resvgcan renderusvg::Treedirectly once again.rctree::Nodemethods. TheNodeAPI is completely different now.usvg::NodeExt. No longer needed.usvg::Node::calculate_bbox. Useusvg::Node::abs_bounding_boxinstead.usvg::Tree::convert_text. Useusvg::Tree::postprocessinstead.usvg::TreeTextToPathtrait. No longer needed.
Fixed
- Mark
mask-typeas a presentation attribute. - Do not show needless warnings when parsing some attributes.
feImagerendering with a non-default position. Thanks to @LaurenzV.
- Each
-
0.37.016 Dec 2023Release notes
Open source →Added
usvgcan write text back to SVG now. Thanks to @LaurenzV.--preserve-textflag to theusvgCLI tool. Thanks to @LaurenzV.- Support
transform-originproperty. Thanks to @LaurenzV. - Support non-default markers order via
paint-order. Previously, only fill and stroke could have been swapped. Thanks to @LaurenzV. usvg_tree::Text::flattenedthat will contain a flattened/outlined text.usvg_tree::Text::bounding_box. Will be set only after text flattening.- Optimize
usvg_tree::NodeExt::abs_transformby storing absolute transforms in the tree instead of calculating them each time.
Changed
usvg_tree::Text::positionswas replaced withusvg_tree::Text::dxandusvg_tree::Text::dy.<br>usvg_tree::CharacterPosition::xandusvg_tree::CharacterPosition::yare gone. They were redundant and you should useusvg_tree::TextChunk::xandusvg_tree::TextChunk::yinstead.usvg_tree::LinearGradient::idandusvg_tree::RadialGradient::idare moved tousvg_tree::BaseGradient::id.- Do not generate element IDs during parsing. Previously, some elements like
clipPaths andfilters could have generated IDs, but it wasn't very reliable and mostly unnecessary. Renderer doesn't rely on them and usvg writer would generate them anyway. - Text-to-paths conversion via
usvg_text_layout::Tree::convert_textno longer replaces original text elements with paths, but instead puts them intousvg_tree::Text::flattened.
Removed
- The
transformfield fromusvg_tree::Path,usvg_tree::Imageandusvg_tree::Text. Onlyusvg_tree::Groupcan have it.<br> It doesn't break anything, because those properties were never used before anyway.<br> Thanks to @LaurenzV. usvg_tree::CharacterPositionusvg_tree::Path::text_bbox. Useusvg_tree::Text::bounding_boxinstead.usvg_text_layout::TextToPathtrait forTextnodes. Only the whole tree can be converted at once.
Fixed
- Path object bounding box calculation. We were using point bounds instead of tight contour bounds. Was broken since v0.34
- Convert text-to-paths in embedded SVGs as well. The one inside the
Imagenode. Thanks to @LaurenzV. - Indirect
text-decorationresolving in some cases. Thanks to @LaurenzV. - (usvg) Clip paths writing to SVG. Thanks to @LaurenzV.
-
0.36.005 Oct 2023Release notes
Open source →Added
stroke-linejoin=miter-clipsupport. SVG2. Thanks to @torokati44.- Quoted FuncIRI support. Like
fill="url('#gradient')". SVG2. Thanks to @romanzes. - Allow float values in
rgb()andrgba()colors. SVG2. Thanks to @yisibl. auto-start-reversevariant support toorientin markers. SVG2. Thanks to @EpicEricEE.
Changed
- Update dependencies.
Fixed
-
0.35.028 Jun 2023Release notes
Open source →Fixed
- Panic when an element is completely outside the viewbox.
Removed
FillPaintandStrokePaintfilter inputs support. It's a mostly undocumented SVG feature that no one supports and no one uses. And it was adding a significant complexity to the codebase.usvg::filter::Filter::fill_paintandusvg::filter::Filter::stroke_paint.BackgroundImage,BackgroundAlpha,FillPaintandStrokePaintfromusvg::filter::Input.usvg::Group::filter_fill_paintandusvg::Group::filter_stroke_paint.
-
0.34.128 May 2023Release notes
Open source →Fixed
- Transform components order. Affects only
usvgSVG output and C API.
- Transform components order. Affects only
-
0.34.027 May 2023Release notes
Open source →Changed
usvgusestiny-skiageometry primitives now, including thePathcontainer.<br> The main difference compared to the oldusvgprimitives is thattiny-skiausesf32instead off64. So while in theory we could loose some precision, in practice,f32is used mainly as a storage type and precise math operations are still done usingf64.<br>tiny-skiaprimitives are move robust, strict and have a nicer API.<br> More importantly, this change reduces the peak memory usages for SVGs with large paths (in terms of the number of segments). And removes the need to convertusvg::PathDataintotiny-skia::Pathbefore rendering. Which was just a useless reallocation.- All numbers are stored as
f32instead off64now. - Because we use
tiny-skia::Pathnow, we allow quadratic curves as well. This includesusvgCLI output. - Because we allow quadratic curves now, text might render slightly differently (better?). This is because TrueType fonts contain only quadratic curves and we were converting them to cubic before.
usvg::Pathno longer implementsDefault. Useusvg::Path::newinstead.- Replace
usvg::Rectwithtiny_skia::NonZeroRect. - Replace
usvg::PathBboxwithtiny_skia::Rect. - Unlike the old
usvg::PathBbox,tiny_skia::Rectallows both width and height to be zero. This is not an error. usvg::filter::Turbulence::base_frequencywas split intobase_frequency_xandbase_frequency_y.usvg::NodeExt::calculate_bboxno longer includes stroke bbox.- (c-api) Use
floatinstead ofdoubleeverywhere. - The
svgfilterscrate was merged intoresvg. - The
rosvgtreecrate was merged intousvg-parser. usvg::Group::filter_fillmoved tousvg::filter::Filter::fill_paint.usvg::Group::filter_strokemoved tousvg::filter::Filter::stroke_paint.
Remove
usvg::Point. Usetiny_skia::Pointinstead.usvg::FuzzyEq. Useusvg::ApproxEqUlpsinstead.usvg::FuzzyZero. Useusvg::ApproxZeroUlpsinstead.- (c-api)
resvg_path_bbox. Useresvg_rectinstead. svgfilterscrate.rosvgtreecrate.
Fixed
- Write
transformonclipPathchildren inusvgSVG output. - Do not duplicate marker children IDs.
Previously, each element resolved for a marker would preserve its ID.
Affects only
usvgSVG output and doesn't affect rendering.
-
0.33.017 May 2023Release notes
Open source →Added
- A new rendering algorithm.<br>
When rendering isolated groups,
aka layers, we have to know the layer bounding box beforehand, which is ridiculously hard in SVG.<br>
Previously, resvg would simply use the canvas size for all the layers.
Meaning that to render a 10x10px layer on a 1000x1000px canvas, we would have to allocate and then blend
a 1000x1000px layer, which is just a waste of CPU cycles.<br>
The new rendering algorithm is able to calculate layer bounding boxes, which dramatically improves
performance when rendering a lot of tiny layers on a large canvas.<br>
Moreover, it makes performance more linear with a canvas size increase.<br>
The paris-30k.svg
sample from google/forma is rendered 115 times faster on M1 Pro now.
From ~33760ms down to ~290ms. 5269x3593px canvas.<br>
If we restrict the canvas to 1000x1000px, which would contain only the actual
paris-30k.svgcontent, then we're 13 times faster. From ~3252ms down to ~253ms. resvg::Tree, aka a render tree, which is an even simpler version ofusvg::Tree.usvg::Treehad to be converted intoresvg::Treebefore rendering now.
Changed
- Restructure the root directory. All crates are in the
cratesdirectory now. - Restructure tests. New directory structure and naming scheme.
- Use
resvg::Tree::renderinstead ofresvg::render. - resvg's
--export-area-drawingoption uses calculated bounds instead of trimming excessive alpha now. It's faster, but can lead to a slightly different output. - (c-api) Removed
fit_toargument fromresvg_render. - (c-api) Removed
fit_toargument fromresvg_render_node. usvg::ScreenSizemoved toresvg.usvg::ScreenRectmoved toresvg.- Rename
resvg::ScreenSizeintoresvg::IntSize. - Rename
resvg::ScreenRectintoresvg::IntRect.
Removed
filterbuild feature fromresvg. Filters are always enabled now.resvg::FitTousvg::utils::view_box_to_transform_with_clipusvg::Size::to_screen_size. Useresvg::IntSize::from_usvginstead.usvg::Rect::to_screen_size. Useresvg::IntSize::from_usvg(rect.size())instead.usvg::Rect::to_screen_rect. Useresvg::IntRect::from_usvginstead.- (c-api)
resvg_fit_to - (c-api)
resvg_fit_to_type
Fixed
- Double quotes parsing in
font-family.
- A new rendering algorithm.<br>
When rendering isolated groups,
aka layers, we have to know the layer bounding box beforehand, which is ridiculously hard in SVG.<br>
Previously, resvg would simply use the canvas size for all the layers.
Meaning that to render a 10x10px layer on a 1000x1000px canvas, we would have to allocate and then blend
a 1000x1000px layer, which is just a waste of CPU cycles.<br>
The new rendering algorithm is able to calculate layer bounding boxes, which dramatically improves
performance when rendering a lot of tiny layers on a large canvas.<br>
Moreover, it makes performance more linear with a canvas size increase.<br>
The paris-30k.svg
sample from google/forma is rendered 115 times faster on M1 Pro now.
From ~33760ms down to ~290ms. 5269x3593px canvas.<br>
If we restrict the canvas to 1000x1000px, which would contain only the actual
-
0.32.023 Apr 2023Release notes
Open source →Added
- Clipping and masking is up to 20% faster.
mask-typeproperty support. SVG2usvg_tree::MaskTypeusvg_tree::Mask::kind- (rosvgtree) New SVG 2 mask attributes.
Changed
BackgroundImageandBackgroundAlphafilter inputs will produce the same output asSourceGraphicandSourceAlpharespectively.
Removed
enable-backgroundsupport. This feature was never supported by browsers and was deprecated in SVG 2. To my knowledge, only Batik has a good support of it. Also, it's a performance nightmare, which caused multiple issues in resvg already.usvg_tree::EnableBackgroundusvg_tree::Group::enable_backgroundusvg_tree::NodeExt::filter_background_start_node
Fixed
- Improve rectangular clipping anti-aliasing quality.
- Mask's RGB to Luminance converter was ignoring premultiplied alpha.
-
0.31.010 Apr 2023Release notes
Open source →Added
usvg::Tree::paint_serversusvg::Tree::clip_pathsusvg::Tree::masksusvg::Tree::filtersusvg::Node::subroots- (usvg)
--coordinates-precisionand--transforms-precisionwriting options. Thanks to @flxzt.
Fixed
fill-opacityandstroke-opacityresolving.- Double
transformwhen resolvingsymbol. symbolclipping when its viewbox is the same as the document one.- (usvg) Deeply nested gradients, patterns, clip paths, masks and filters were ignored during SVG writing.
- Missing text in nested clip paths and mask, text decoration patterns, filter inputs and feImage.
-
0.30.026 Mar 2023Release notes
Open source →Added
- Readd
usvgCLI tool. Can be installed via cargo as before.
Changed
- Extract most
usvginternals into newusvg-treeandusvg-parsercrates.usvg-treecontains just the SVG tree and all the types.usvg-parserparsers SVG intousvg-tree. Andusvgis just an umbrella crate now. - To use
usvg::Tree::from*methods one should import theusvg::TreeParsingtrait now. - No need to import
usvg-text-layoutmanually anymore. It is part ofusvgnow. rosvgtreeno longer reexportssvgtypes.rosvgtree::Node::attributereturns just a string now.rosvgtree::Node::find_attributereturns just arosvgtree::Nodenow.- Rename
usvg::Stretchintousvg::FontStretch. - Rename
usvg::Styleintousvg::FontStyle. usvg::FitTomoved toresvg::FitTo.usvg::IsDefaulttrait is private now.
Removed
rosvgtree::FromValue. Due to Rust's orphan rules this trait is pretty useless.
Fixed
- Recursive markers detection.
- Skip malformed
transformattributes without skipping the whole element. - Clipping path rectangle calculation for nested
svgelements. Thanks to @LaurenzV. - Panic when applying
text-decorationon text with only one cluster. Thanks to @LaurenzV. - (Qt API) Image size wasn't initialized. Thanks to @missdeer.
resvgCLI allows files with XML DTD again.- (svgtypes) Handle implicit MoveTo after ClosePath segments.
- Readd
-
0.29.006 Feb 2023Release notes
Open source →Added
resvgCLI loads system fonts only when an input SVG has text nodes now. Fonts loading is an IO-heavy operation and by avoiding it we can speed upresvgexecution.usvg::Group::should_isolateusvg::Tree::has_text_nodes
Changed
- Some
usvginternals were moved into the newrosvgtreecrate. - Dummy groups are no longer removed. Use
usvg::Group::should_isolateto check if a group affects rendering. usvg-text-layout::TreeTextToPath::convert_textno longer has thekeep_named_groupsargument.- MSRV bumped to 1.65
- Update dependencies.
Removed
usvg::Options::keep_named_groups. Dummy groups are no longer removed.- (c-api)
resvg_options_set_keep_named_groups - (Qt API)
ResvgOptions::setKeepNamedGroups
Fixed
- Missing
font-familyhandling. font-weightresolving.
-
0.28.003 Dec 2022Release notes
Open source →Added
usvg::Textandusvg::NodeKind::Text.
Changed
usvgisn't converting text to paths by default now. A caller must callusvg::Tree::convert_textorusvg::Text::convertfromusvg-text-layoutcrate on demand.usvgtext layout implementation moved intousvg-text-layoutcrate.- During SVG size recovery, when no
width,heightandviewBoxattributes have been set, text nodes are no longer taken into an account. This is because a text node has no bbox before conversion into path(s), which we no longer doing during parsing. usvgis purely an SVG parser now. It doesn't convert text to paths and doesn't write SVG anymore.usvg::filter::ConvolveMatrixDatamethods are fields now.
Removed
usvgCLI binary. No alternatives for now.- All
usvgbuild features.filter. Filter elements are always parsed byusvgnow.text. Text elements are always parsed byusvgnow.export.usvgcannot write an SVG anymore.
usvg::Tree::to_string.usvgcannot write an SVG anymore.usvg::TransformFromBBoxtrait. This is just a regularusvg::Transformmethod now.usvg::OptionsRef.usvg::Optionsis enough from now.usvg::Options::fontdb. Used only byusvg-text-layoutnow.--dump-svgfromresvg.
-
0.27.026 Nov 2022Release notes
Open source →Added
lengthAdjustandtextLengthattributes support.- Support automatic
imagesize detection.widthandheightattributes can be omitted or set toautoonimagenow. SVG2
Fixed
--query-allflag inresvgCLI.- Percentage values resolving.
-
0.26.121 Nov 2022 -
0.26.020 Nov 2022Release notes
Open source →Added
- Minimal
dominant-baselineandalignment-baselinesupport. mix-blend-modeandisolationsupport. SVG2- Allow writing resvg output to stdout.
- Allow disabling text kerning using
kerning="0"andstyle="font-kerning:none". SVG2 - Allow
<percentage>values foropacity,fill-opacity,stroke-opacity,flood-opacityandstop-opacityattributes.<br> You can writeopacity="50%"now. SVG2
Changed
- Disable focal point correction on radial gradients to conform with SVG 2. SVG2
- Update
feMorphologyradius value resolving.
Fixed
- Do not clip nested
svgwhen only theviewBoxattribute is present.
- Minimal
-
0.25.030 Oct 2022Release notes
Open source →Added
- Partial
paint-orderattribute support. Markers can only be under or above the shape.
Fixed
- Compilation issues caused by
rustybuzzupdate.
- Partial
-
0.24.022 Oct 2022Release notes
Open source →Added
- CSS3
writing-modevariantsvertical-rlandvertical-lr. Thanks to yisibl. - (tiny-skia) AArch64 Neon SIMD support. Up to 3x faster on Apple M1.
Changed
usvg::Treestores onlyGroup,PathandImagenodes now. Instead of emulating an SVG file structure, where gradients, patterns, filters, clips and masks are part of the nodes tree (usually inside thedefselement), we reference them usingRcfrom now. This change makesusvga bit simpler. MakesusvgAPI way easier, since instead of looking for a node viausvg::Tree::defs_by_idthe caller can access the type directly viaRc. And makes creation of customusvg::Trees way easier.clip_path,maskandfiltersusvg::Groupfields storeRcinstead ofStringnow.usvg::NodeExt::unitswas moved tousvg::Paint::units.usvg::filter::ImageKind::Usestoresusvg::Nodeinstead ofString.usvg::PathDatastores commands and points separately now to reduce overall memory usage.usvg::PathDatasegments should be accessed viasegments()now.- Most numeric types have been moved to the
strict-numcrate. - Rename
NormalizedValueintoNormalizedF64. - Rename
PositiveNumberintoPositiveF64. - Raw number of numeric types should be accessed via
get()method instead ofvalue()now. usvg::TextSpan::font_sizeisNonZeroPositiveF64instead off64now.- Re-export
usvgandtiny-skiadependencies inresvg. - Re-export
roxmltreedependency inusvg. - (usvg) Output float precision is reduced from 11 to 8 digits.
Removed
usvg::Tree::create.usvg::Treeis an open struct now.usvg::Tree::root. It's a public field now.usvg::Tree::svg_node. Replaced withusvg::Treepublic fields.defs,is_in_defs,append_to_defsanddefs_by_idfromusvg::Tree. We no longer emulate SVG structure. No alternative.usvg::Tree::is_in_defs. There are nodefsanymore.usvg::Paint::Link. We store gradient and patterns directly inusvg::Paintnow.usvg::Svg. No longer needed.sizeandview_boxareusvg::Treefields now.usvg::SubPathIterandusvg::PathData::subpaths. No longer used.
Fixed
- Path bbox calculation scales stroke width too. Thanks to growler.
- (tiny-skia) Round caps roundness.
- (xmlparser) Stack overflow on specific files.
- (c-api)
resvg_is_image_emptyoutput was inverted.
- CSS3
-
0.23.011 Jun 2022Release notes
Open source →Added
#RRGGBBAAand#RGBAcolor notation support. Thanks to demurgos.
Fixed
- Panic during recursive
patternresolving. Thanks to FylmTM. - Spurious warning when using
--export-id. Thanks to benoit-pierre.
-
0.22.021 Feb 2022Release notes
Open source →Added
- Support
svgreferenced byuse. External SVG files are still not supported.
Changed
ttf-parser,fontdbandrustybuzzhave been updated.
- Support
-
0.21.013 Feb 2022Release notes
Open source →Added
usvg::ImageHrefResolverthat allows a customxlink:hrefhandling. Thanks to antmelnyk.usvg::Options::image_href_resolver- Support for GIF images inside the
<image>element. - (fontdb) Support for loading user fonts on Windows.
- (fontdb) Support for parsing fontconfig config files on Linux. For now, only to retrieve a list of font dirs.
Changed
- MSRV bumped to 1.51
usvg::ImageKindstores data asArc<Vec<u8>>and not justVec<u8>now.
Fixed
- Every nested
svgelement defines a new viewBox now. Previously, we were always using the root one. - Correctly handle SVG size calculation when SVG doesn't have a size and any elements.
- Improve groups ungrouping speed.
-
0.20.030 Dec 2021Release notes
Open source →Changed
resvg::renderandresvg::render_nodeaccept a transform now.- (c-api)
resvg_renderandresvg_render_nodeaccept a transform now. usvg::Coloris a custom type and not asvgtypes::Colorreexport now.usvg::Colordoesn't contain alpha anymore, which have been added in v0.16 Alpha would be automatically flattened. This makes Micro SVG compatible with SVG 1.1 again.- (c-api) Rename
RESVG_FIT_TO_*intoRESVG_FIT_TO_TYPE_*.
Fixed
- The
--backgroundargument inresvgcorrectly handles alpha now. - Fix building usvg without filter feature but with export.
-
0.19.004 Oct 2021Release notes
Open source →Added
- Better text-on-path converter accuracy by accounting the current transform.
Changed
usvg::NodeExt::abs_transformincludes current node transform now.- Improved turbulence filter performance. Thanks to akindle.
- Multiple dependencies updated.
-
0.18.012 Sep 2021Release notes
Open source →Added
filterbuild feature. Enabled by default.usvg::PathBboxandresvg_path_bbox(to C API).
Changed
- (usvg) All filter related types are under the
filtermodule now. - (usvg) Remove
Feprefix from all filter types. - (c-api)
resvg_get_node_bboxreturnsresvg_path_bboxnow.
Fixed
- Horizontal and vertical lines processing.
- C API building without the
textfeature.
-
0.17.004 Sep 2021Release notes
Open source →Added
tiny-skiaupdated with support of images larger than 8000x8000 pixels.feDropShadowsupport. SVG2<filter-value-list>support. Meaning that thefilterattribute can have multiple values now. Likeurl(#filter1) blur(2). SVG2- All filter functions. SVG2
- Support all new
feBlendmodes. SVG2 - Automatic SVG size detection when
width/height/viewBoxis not set. Thanks to reknih. usvg::Options::default_size--default-widthand--default-heightto usvg.
Changed
usvg::Group::filteris a list of filter IDs now.usvg::FeColorMatrixKind::Saturateaccepts any positivef64value now.svgfilters::ColorMatrix::Saturateaccepts any positivef64value now.- Fonts memory mapping was split into a separate build feature:
memmap-fonts. Now you can build resvg/usvg withsystem-fonts, but withoutmemmap-fonts. Enabled by default. - The
--dump-svgargument in resvg CLI tool should be enabled using--features dump-svgnow. No enabled by default. usvg::Tree::to_stringis behind theexportbuild feature now.
Fixed
- When writing SVG,
usvgwill usergba()notations for colors instead of#RRGGBB.
-
0.16.022 Aug 2021Release notes
Open source →Added
- CSS3 colors support. Specifically
rgba,hsl,hslaandtransparent. SVG2 - Allow missing
rx/ryattributes onellipse. SVG2 - Allow markers on all shapes. SVG2
textPathcan reference basic shapes now. SVG2usvg::OptionsRef, which is a non-ownedusvg::Optionsvariant.simplecssupdated with CSS specificity support.turnangle unit support. SVG2- Basic
font-variant=small-capssupport. No font fallback. --export-area-pageto resvg.--export-area-drawingto resvg.
Changed
resvg::render_noderequiresusvg::Treenow.usvg::Colorgained analphafield.
Removed
usvg::Node::tree. Cannot be implemented efficiently anymore.usvg::SystemFontDB. No longer needed.
Fixed
patternscaling.- Greatly improve
symbolresolving speed inusvg. - Whitespaces trimming on nested
tspan.
- CSS3 colors support. Specifically
-
0.15.013 Jun 2021Release notes
Open source →Added
- Allow reading SVG from stdin in
resvgbinary. --id-prefixtousvg.FitTo::Sizeresvgbinary accepts--widthand--heightargs together now. Previously, only--widthor--heightwere allowed.usvg::Path::text_bbox- The maximum number of SVG elements is limited by 1_000_000 now. Mainly to prevent a billion laugh style attacks.
- The maximum SVG elements nesting is limited by 1024 now.
usvg::Error::ElementsLimitReached
Changed
- Improve clipping and masking performance on large images.
- Remove layers caching. This was a pointless optimization.
- Split Preprocessing into Reading and Parsing in
resvg --perf. usvg::XmlOptionsrewritten.usvg::Tree::to_stringrequires a reference toXmlOptionsnow.
Removed
usvg::Tree::from_file. Usefrom_dataorfrom_strinstead.usvg::Error::InvalidFileSuffixusvg::Error::FileOpenFailed- (c-api)
RESVG_ERROR_INVALID_FILE_SUFFIX
Fixed
- Ignore tiny blur values. It could lead to a transparent image.
usestyle propagation when used withsymbol.- Vertical text layout with relative offsets.
- Text bbox calculation.
usvguses font metrics instead of path bbox now.
- Allow reading SVG from stdin in
-
0.14.117 Apr 2021Release notes
Open source →Added
- Allow
hrefwithout thexlinknamespace. This feature is part of SVG 2 (which we do not support), but there are more and more files like this in the wild.
Changed
- (usvg) Do not write
usvg:versionto the output SVG.
Fixed
- (usvg)
overflow='inherit'resolving. - (usvg) SVG Path length calculation that affects
startOffsetproperty intextPath. - (usvg) Fix
feImageresolving when the linked element hasopacity,clip-path,maskand/orfilterattributes. - (usvg) Fix chained
feImageresolving. - CLI arguments processing.
- Allow
-
0.14.009 Mar 2021 -
0.13.120 Jan 2021 -
0.13.004 Jan 2021Release notes
Open source →Added
--resources-diroption to CLI tools.- (usvg)
Tree::from_xmltree
Changed
- Remove the
Imagestruct.render()andrender_node()methods now accepttiny_skia::PixmapMut. - Update
fontdb. - Update
tiny-skia. - (c-api)
resvg_sizeusesdoubleinstead ofuint32_tnow. - (qt-api)
defaultSize()anddefaultSizeF()methods now return SVG size and not SVG viewbox size. - (usvg)
Options::pathchanged toOptions::resources_dirand requires a directory now. - (c-api)
resvg_options_set_file_pathchanged toresvg_options_set_resources_dirand requires a directory now. - (qt-api)
ResvgOptions::setFilePathchanged toResvgOptions::setResourcesDirand requires a directory now.
Fixed
- Support multiple values inside a
text-decorationattribute.
Removed
Image. Usetiny_skia::PixmapMutinstead.- (c-api)
resvg_imagestruct andresvg_image_*methods.resvgrenders onto the provided buffer now. - (c-api)
resvg_color, because unused.
-
0.12.005 Dec 2020Release notes
Open source →Changed
- resvg no longer requires a C++ compiler!
tiny-skiawas updated to a pure Rust version, which means thatresvgno longer depends onclangand should work on 32bit targets.rustybuzzwas updated to a pure Rust version.tools/explorer-thumbnaileris back and written in Rust now. Thanks to gentoo90.
Fixed
- (usvg) Do not panic when a font has a zero-sized underline thickness.
- (usvg) Multiple
textPathprocessing fixes by chubei-oppen. - (qt-api)
boundsOnElementandboundingBoxwere returning transposed bounds.
-
0.11.004 Jul 2020Release notes
Open source →Highlights
- All backends except Skia were removed. Skia is the only official one from now.
- New C API implementation.
Added
- Support for user-defined fonts in usvg, resvg and C API.
--serif-family,--sans-serif-family,--cursive-family,--fantasy-family--monospace-family,--use-font-file,--use-fonts-dir,--skip-system-fontsand--list-fontsoptions to all CLI tools.- New tests suite. Instead of testing against the previous build, now we're testing against
prerendered PNG images. Which is way faster.<br>
And you can test resvg without the internet connection now.<br>
And all you need is just
cargo test.
Changed
- Library uses an embedded Skia by default now.
- Switch
harfbuzz_rswithrustybuzz. - Rendering doesn't require
usvg::Optionsnow. - (usvg) The
fontdbmodule moved into its own crate. - (usvg)
fontconfigis no longer used for matching generic fonts on Linux. Mainly because it's very slow. - (usvg) When an
imageelement contains a file path, the file will be loaded into memory now, instead of simply storing a file path. And will be dumped as base64 on SVG save. In case of an SVG image, it will be loaded as aTreeand saved as base64 encoded XML on save. - (usvg)
ImageDatareplaced withImageKind. - (usvg) Fonts database is empty by default now and should be filled manually.
- (c-api) Almost a complete rewrite.
Removed
- All backends except the Skia one.
Optionsfrom all backends. We don't use it anymore.- (usvg)
ImageFormat. - (c-api) Rendering on a backends canvas no longer supported. Was constantly misused.
-
0.10.019 Jun 2020Release notes
Open source →Changed
- The
resvgcrate has been split into four: resvg-cairo, resvg-qt, resvg-skia and resvg-raqote.<br/> So from now, instead of enabling a required backend via cargo features, you should select a required backend-specific crate.<br/> This allows us to have a better integration with a selected 2D library.<br/> And we also have separated C API implementations now.<br/> And each backend has its own vendored archive too. - (qt-backend) Use
QImageinstead of Rust libraries for raster images loading.
Removed
- The
resvgcrate. Use backend-specific crates. tools/rendersvg. Each backend has its own CLI tool now.tools/usvg.usvgimplements CLI by default now.- (c-api)
resvg_*_render_to_filemethods. - (qt-backend)
jpeg-decoderandpngdependencies.
- The
-
0.9.103 Jun 2020Release notes
Open source →Fixed
- Stack overflow when
enable-backgroundandfilterare set on the same element. - Grayscale PNG loading.
- Allow building on BSD.
- (usvg) Font fallback when shaping produces a different amount of glyphs.
- (usvg) Ignore a space after the last character during
letter-spacingprocessing. - (usvg)
marker-endrendering when the last segment is a curve with the second control point that coincides with end point. - (usvg) Accept embedded
imagedata without mime. - (usvg) Fonts search in a home directory on Linux.
- (usvg)
dycalculation fortextPaththanks to Stoeoef - (usvg)
textPathresolving when a referenced path has a transform.<br/> Thanks to Stoeoef. - (usvg) Load user fonts on macOS too.
- (xmlparser) Parsing comment before DTD.
- Stack overflow when
-
0.9.018 Jan 2020Release notes
Open source →Added
feConvolveMatrix,feMorphology,feDisplacementMap,feTurbulence,feDiffuseLightingandfeSpecularLightingsupport.BackgroundImage,BackgroundAlpha,FillPaintandStrokePaintsupport as a filter input.- Load grayscale raster images.
enable-backgroundsupport.- resvg/usvg can be built without text rendering support now.
OutputImage::make_vecandOutputImage::make_rgba_vec.feImagewith a reference to an internal element.
Changed
feCompositek1-4 coefficients can have any number now. This matches browsers behaviour.- Use
flate2instead oflibflatefor GZip decoding. - (usvg)
fillandstrokeattributes will always be set forpathnow. - (usvg)
g,pathandimagecan now be set insidedefs. Required byfeImage. - (c-api) Rename
resvg_*_render_to_imageintoresvg_*_render_to_file.
Fixed
- (usvg) Transform processing during text-to-path conversion.
feCompositewith fully transparent region was producing an invalid result.- Fallback to
matrixinfeColorMatrixwhentypeis not set or invalid. - ID preserving for
useelements. feFloodwith subregion andprimitiveUnits=objectBoundingBox.- (harfbuzz_rs) Memory leak.
-
0.8.017 Aug 2019Release notes
Open source →Added
- A Skia backend thanks to JaFenix.
feComponentTransfersupport.feColorMatrixsupport.- A better CSS support.
- An
*.otffonts support. - (usvg)
dx,dyare supported insidetextPathnow. - Use a box blur for
feGaussianBlurwithstdDeviation>=2. This is 4-8 times faster than IIR blur. Thanks to Shnatsel.
Changed
- All backends are using Rust crates for raster images loading now.
- Use
pico-argsinstead ofgumdropto reduced the build time oftools/rendersvgandtools/usvg. - (usvg) The
xmlwriteris used for SVG generation now. Almost 2x faster than generating ansvgdom. - (usvg) Optimize font database initialization. Almost 50% faster.
- Use a lower PNG compression ratio to speed up PNG generation. Depending on a backend and image can be 2-4x faster.
OutputImage::save->OutputImage::save_png.- (usvg)
Path::segments->Path::data. - Cairo backend compilation is 2x faster now due to overall changes.
- Performance improvements (Oxygen Icon theme SVG-to-PNG):
- cairo-backend: 22% faster
- qt-backend: 20% faster
- raqote-backend: 34% faster
Fixed
- (qt-api) A default font resolving.
- (usvg)
baseline-shiftprocessing insidetextPath. - (usvg) Remove all
trefelement children. - (usvg)
trefwithxml:spaceresolving. - (usvg) Ignore nested
tref. - (usvg) Ignore invalid
clipPathchildren that were referenced viause. - (usvg)
currentColorwill always fallback to black now. Previously,strokewas set tononewhich is incorrect. - (usvg)
usecan reference an element inside a non-SVG element now. - (usvg) Collect all styles for generic fonts and not only Regular.
- (usvg) Parse only presentation attributes from the
styleelement and attribute.
Removed
- (cairo-backend)
gdk-pixbufdependency. - (qt-backend) JPEG image format plugin dependency.
svgdomdependency.
-
0.7.019 Jun 2019Release notes
Open source →Added
- New text layout implementation:
textPathsupport.writing-modesupport, aka vertical text.- Text BIDI reordering.
- Better text shaping.
word-spacingis supported for all backends now.harfbuzzdependency.- Subscript, superscript offsets are extracted from font and not hardcoded now.
shape-rendering,text-renderingandimage-renderingsupport.- The
arithmeticoperator forfeComposite. - (usvg)
--quietargument. - (c-api)
resvg_get_image_bbox. - (qt-api)
ResvgRenderer::boundingBox. - (resvg) A raqote backend thanks to jrmuizel. Still experimental.
Changed
- Text will be converted into paths on the
usvgside now. - (resvg) Do not rescale images before rendering. This is faster and better.
- (usvg) An
imageelement with a zero or negative size will be skipped now. Previously, a linked image size was used, which is incorrect. - Geometry primitives (
Rect,Size, etc) are immutable and always valid now. - (usvg) The default
color-interpolation-filtersattribute will not be exported now.
Removed
- (usvg) All text related structures and enums. Text will be converted into
Pathnow. InitObjectandinit()because they are no longer needed.- (c-api)
resvg_handle,resvg_init,resvg_destroy. - (c-api)
resvg_cairo_get_node_bboxandresvg_qt_get_node_bbox. Use backend-independentresvg_get_node_bboxinstead. - (cairo-backend)
pangodependency. - (resvg)
Backend::calc_node_bbox. UseNode::calculate_bbox()instead.
Fixed
letter-spacingon cursive scripts (like Arabic).- (rctree) Prevent stack overflow on a huge, deeply nested SVG.
- (c-api)
resvg_is_image_emptywas always returningfalse. - (resvg) Panic when
filterwithobjectBoundingBoxwas set on an empty group. - (usvg)
maskwithobjectBoundingBoxresolving. - (usvg)
pattern'sviewBoxattribute resolving viahref. - (roxmltree) Namespace resolving.
- New text layout implementation:
-
0.6.116 Mar 2019Release notes
Open source →Fixed
- (usvg)
transformmultiplication. - (usvg)
useinsideclipPathresolving.
- (usvg)
-
0.6.015 Mar 2019Release notes
Open source →Added
- Nested
baseline-shiftsupport. - (qt-api)
renderToImage. - (usvg) A better algorithm for unused defs (
defselement children, like gradients) removal. - (usvg)
Error::InvalidSize. - (c-api)
RESVG_ERROR_INVALID_SIZE.
Changed
- (usvg) A major rewrite.
baseline-shiftwithsub,superand percent values calculation.- Marker resolving moved completely to
usvg. - If an SVG doesn't have a valid size than an error will occur. Previously, an empty tree was produced.
- (qt-api)
rendermethods areconstnow. - (usvg) Disable default attributes exporting.
Removed
- (usvg) Marker element and attributes. Markers will be resolved just like
usenow.
Fixed
- (resvg) During the
tspanrendering, thetextbbox will be used instead of thetspanbbox itself. This is the correct behaviour by the SVG spec. - (cairo-backend)
font-familyparsing. - (usvg)
filter:noneprocessing. - (usvg)
textinsidetextprocessing. - (usvg) Endless loop during
useresolving. - (usvg) Endless loop when SVG has indirect recursive
xlink:hreflinks. - (usvg) Endless loop when SVG has recursive
marker-*links. - (usvg) Panic during
useresolving. - (usvg) Panic during inherited attributes resolving.
- (usvg) Groups regrouping.
- (usvg)
dx/dyprocessing ontext. - (usvg)
textAnchorresolving. - (usvg) Ignore
fill-ruleontext. - (svgtypes) Style with comments parsing.
- (roxmltree) Namespaces resolving.
- Nested
-
0.5.004 Jan 2019Release notes
Open source →Added
markersupport.- Partial
baseline-shiftsupport. letter-spacingsupport.- (qt-backend)
word-spacingsupport. Does not work on the cairo backend. - tools/explorer-thumbnailer
- tools/kde-dolphin-thumbnailer
Fixed
- Object bounding box calculation.
- Pattern scaling.
- Nested
objectBoundingBoxsupport. - (usvg)
coloronuseresolving. - (usvg)
offsetattribute resolving inside thestopelement. - (usvg) Ungrouping of groups with non-inheritable attributes.
- (usvg)
rotateattribute resolving. - (usvg) Paths without stroke and fill will no longer be removed. Required for a proper bbox resolving.
- (usvg) Coordinates resolving when units are
userSpaceOnUse. - (usvg) Groups regrouping. Caused an incorrect rendering of
clipPaththat hadfilteron a child. - (usvg) Style attributes resolving on the root
svgelement. - (usvg)
SmoothCurveToandSmoothQuadraticconversion. - (usvg)
symbolresolving. - (cairo-backend) Font ascent calculation.
- (qt-backend) Stroking of LineTo specified as CurveTo.
- (svgdom)
stroke-miterlimitattribute parsing. - (svgdom)
lengthandnumberattribute types parsing. - (svgdom)
offsetattribute parsing. - (svgdom) IRI resolving order when SVG has duplicated ID's.
-
0.4.013 Dec 2018Release notes
Open source →Added
- (resvg) Initial filters support.
- (resvg) Nested
clipPathandmasksupport. - (resvg) MSVC support.
- (rendersvg)
font-family,font-sizeandlanguagesto args. - (usvg)
systemLanguageattribute support. - (usvg) Default font family and size is configurable now.
- (c-api)
RESVG_ERROR_PARSING_FAILED. - (c-api)
font_family,font_sizeandlanguagestoresvg_options. - (qt-api)
ResvgRenderer::setDevicePixelRatio.
Changed
- (rendersvg) Use
gumdropinstead ofgetopts. - (c-api) Qt wrapper is header-only now.
Fixed
- (cairo-backend) Text layout.
- (cairo-backend) Rendering of a zero length subpath with a square cap.
- (qt-backend) Transform retrieving via Qt bindings.
- (resvg) Recursive SVG images via
imagetag. - (resvg) Bbox calculation of the text with rotate.
- (resvg) Invisible elements processing.
- (qt-api) SVG from QByteArray loading when data is invalid.
- (usvg)
displayattribute processing. - (usvg) Recursive
maskresolving. - (usvg)
inheritattribute value resolving. - (svgdom) XML namespaces resolving.
Removed
- (rendersvg)
failuredependency.
-
0.3.012 Sep 2018Release notes
Open source →Added
- (c-api)
resvg_is_image_empty. - (c-api)
resvg_errorenum. - (c-api) Qt wrapper.
- (resvg) Advanced text layout support (lists of x, y, dx, dy and rotate).
- (resvg) SVG support for
imageelement. - (usvg)
symbolelement support. - (usvg) Nested
svgelements support. - (usvg) Paint fallback resolving.
- (usvg) Bbox validation for shapes that use painting servers.
- (svgdom) Elements from ENTITY resolving.
Changed
- (c-api)
resvg_parse_tree_from_file,resvg_parse_tree_from_dataresvg_cairo_render_to_imageandresvg_qt_render_to_imagewill return an error code now. - (cairo-backend) Use
gdk-pixbufcrate instead ofimage. - (resvg)
Render::render_to_imageandRender::render_node_to_imagewill returnOptionand notResultnow. - (resvg) New geometry primitives implementation.
- (resvg) Rename
render_*modules tobackend_. - (rendersvg) Use
getoptsinstead ofclapto reduce the executable size. - (svgtypes)
StreamExt::parse_iriandStreamExt::parse_func_iriwill parse not only well-formed data now.
Fixed
- (qt-backend) Gradient with
objectBoundingBoxrendering. - (qt-backend) Text bounding box detection during the rendering.
- (cairo-backend)
imageelement clipping. - (cairo-backend) Layers management.
- (c-api)
resvg_get_node_transformwill return a correct transform now. - (resvg)
text-decorationthickness. - (resvg)
patternscaling. - (resvg)
imagewithout size rendering. - (usvg) Panic during
visibilityresolving. - (usvg) Gradients with one stop resolving.
- (usvg)
useattributes resolving. - (usvg)
clipPathandmaskattributes resolving. - (usvg)
offsetattribute instopelement resolving. - (usvg) Incorrect
font-sizeattribute resolving. - (usvg) Gradient stops resolving.
- (usvg)
switchelement resolving. - (svgdom) Mixed
xml:spaceprocessing. - (svgtypes)
Paint::from_spanpoor performance.
Removed
- (c-api)
resvg_error_msg_destroy. - (resvg)
parse_rtree_*methods. Useusvg::Tree::from_instead. - (resvg)
Error.
- (c-api)
-
0.2.023 May 2018Release notes
Open source →Added
- (svg) Partial
clipPathsupport. - (svg) Partial
masksupport. - (svg) Partial
patternsupport. - (svg)
preserveAspectRatiosupport. - (svg) Check that an external image is PNG or JPEG.
- (rendersvg) Added
--query-alland--export-idarguments to render SVG items by ID. - (rendersvg) Added
--perfargument for a simple performance stats.
Changed
- (resvg) API is completely new.
Fixed
font-sizeattribute inheritance duringuseresolving.
- (svg) Partial
-
0.1.126 Apr 2018Nothing published for this version
-
0.1.024 Apr 2018Nothing published for this version