resvg is an SVG rendering library.
resvg can be used as:
to render SVG files based on a static SVG Full 1.1 subset to raster images or to a backend's canvas (e.g. to a QWidget via QPainter).
The core idea is to make a fast, small, portable, multiple-backend SVG library designed for edge-cases.
Another major difference from other SVG rendering libraries is that resvg does a lot of preprocessing before rendering. It converts an input SVG into a simplified one called Micro SVG and only then it begins rendering. So it's very easy to implement a new rendering backend. And you can also access Micro SVG as XML directly via usvg tool.
resvg is aiming to support only the static
SVG subset; e.g. no a
, script
, view
or cursor
elements, no events and no animations.
A list of unsupported features can be found here.
SVG Tiny 1.2 and SVG 2.0 are not supported and not planned.
Results of the static subset of the SVG test suite:
Results of the resvg test suite:
You can find a complete table of supported features here. It also includes alternative libraries.
Note that all tested applications have a different SVG support, which impacts the performance.
Also, we do not test against Chrome, Firefox, Inkscape and Batik because they have a huge startup time.
QRasterPaintEngine
is slow..svgz
to .svg
beforehand.resvg
is slower than librsvg
because the Oxygen icon theme uses Gaussian blur heavily,
and librsvg
has a faster blur implementation.
Also, librsvg
uses native cairo
clipping, which is incorrect but faster.filter
, clipPath
, mask
and pattern
that are heavily used in the Oxygen icon theme.
So it's actually very slow.resvg
– rendering backends implementation
usvg
– an SVG simplification toolroxmltree
– a DOM-like XML tree
xmlparser
– an XML parsersvgtypes
– SVG types parser and writersimplecss
– a simple CSS2 parserttf-parser
– a TrueType/OpenType parserxmlwriter
– a simple XML writerrctree
– a DOM-like treeresvg-qt
– minimal bindings to [Qt]resvg-skia
– minimal bindings to [Skia]All other dependencies aren't written by me for this project.
bindings
– minimal bindings to Qt and Skia used by resvgcapi
– C interface for resvgdocs
– basic documentationexamples
– usage examples for resvg as a librarysrc
– source codetesting-tools
– scripts used for testingtools
– useful toolsusvg
– an SVG simplification library used by resvgunsafe
,
but since all backends are implemented via FFI, we are stuck with unsafe
anyway.
Also, usvg
uses unsafe for fonts memory mapping.resvg is licensed under the MPLv2.0.