Convert SVG to PNG in Python
Convert SVG to PNG in Python
Here is what I did using cairosvg:
from cairosvg import svg2png
svg_code =
<svg xmlns=http://www.w3.org/2000/svg width=24 height=24 viewBox=0 0 24 24 fill=none stroke=#000 stroke-width=2 stroke-linecap=round stroke-linejoin=round>
<circle cx=12 cy=12 r=10/>
<line x1=12 y1=8 x2=12 y2=12/>
<line x1=12 y1=16 x2=12 y2=16/>
</svg>
svg2png(bytestring=svg_code,write_to=output.png)
And it works like a charm!
See more: cairosvg document
The answer is pyrsvg – a Python binding for librsvg.
There is an Ubuntu python-rsvg package providing it. Searching Google for its name is poor because its source code seems to be contained inside the gnome-python-desktop Gnome project GIT repository.
I made a minimalist hello world that renders SVG to a cairo
surface and writes it to disk:
import cairo
import rsvg
img = cairo.ImageSurface(cairo.FORMAT_ARGB32, 640,480)
ctx = cairo.Context(img)
## handle = rsvg.Handle(<svg filename>)
# or, for in memory SVG data:
handle= rsvg.Handle(None, str(<svg data>))
handle.render_cairo(ctx)
img.write_to_png(svg.png)
Update: as of 2014 the needed package for Fedora Linux distribution is: gnome-python2-rsvg
. The above snippet listing still works as-is.
Convert SVG to PNG in Python
Install Inkscape and call it as command line:
${INKSCAPE_PATH} -z -f ${source_svg} -w ${width} -j -e ${dest_png}
You can also snap specific rectangular area only using parameter -j
, e.g. co-ordinate 0:125:451:217
${INKSCAPE_PATH} -z -f ${source_svg} -w ${width} -j -a ${coordinates} -e ${dest_png}
If you want to show only one object in the SVG file, you can specify the parameter -i
with the object id that you have setup in the SVG. It hides everything else.
${INKSCAPE_PATH} -z -f ${source_svg} -w ${width} -i ${object} -j -a ${coordinates} -e ${dest_png}