对于矢量图形格式svg,最近需要一个转换到其它图像格式的需求。打算用python实现。
网上看了不少资料,大多的解决方案是用 GTK+ (cairo),inkscrape,等系统tools-kit来转.非常的麻烦。
庆幸自已相信有更方便的办法,继续寻找与尝试着。最后发现python有纯py的库就能完成这类功能。那就是svglib。

首先 pip install svglib
然后数行代码就能搞定,非常棒。记录与分享于此。py2 py3 都能兼容


import svglib
from svglib.svglib import svg2rlg
from reportlab.graphics import renderPDF, renderPM

drawing = svg2rlg("drawing.svg")
renderPDF.drawToFile(drawing, "drawing.pdf")
renderPM.drawToFile(drawing, "fdrawing.png", fmt="PNG")
renderPM.drawToFile(drawing, "drawing.jpg", fmt="JPG")

#改一下svg源文件路径,直接运行测试一下就可以了。


另附一个svg文件(代码),可用来测试。粘贴到空白文本文件存成.svg文件即可。

<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg width="12cm" height="5.25cm" viewBox="0 0 1200 400"
 xmlns="http://www.w3.org/2000/svg" version="1.1">
<title>Example arcs01 - arc commands in path data</title>
<desc>Picture of a pie chart with two pie wedges and a picture of a line with arc blips</desc>
<rect x="1" y="1" width="1198" height="398" fill="none" stroke="blue" stroke-width="1" />

<path d="M300,200 h-150 a150,150 0 1,0 150,-150 z"  fill="red" stroke="blue" stroke-width="5" />
  <path d="M275,175 v-150 a150,150 0 0,0 -150,150 z" fill="yellow" stroke="blue" stroke-width="5" />

  <path d="M600,350 l 50,-25 
       a25,25 -30 0,1 50,-25 l 50,-25 
       a25,50 -30 0,1 50,-25 l 50,-25 
       a25,75 -30 0,1 50,-25 l 50,-25 
       a25,100 -30 0,1 50,-25 l 50,-25"
    fill="none" stroke="red" stroke-width="5"  />
</svg>