所以我想从python代码中渲染SVG具有目标分辨率WxH(具有SVG文本作为str,就像我动态生成的那样):
<svg width="200" height="200" viewBox="0 0 220 220"
xmlns="http://www.w3.org/2000/svg">
<filter id="displacementFilter">
<feTurbulence type="turbulence" baseFrequency="0.05"
numOctaves="2" result="turbulence"/>
<feDisplacementMap in2="turbulence" in="SourceGraphic"
scale="50" xChannelSelector="R" yChannelSelector="G"/>
</filter>
<circle cx="100" cy="100" r="100"
style="filter: url(#displacementFilter)"/>
</svg>
转换为PNG图像。如何在Python中做这样的事情?
有多种解决方案可用于在python中将SVGS转换为PNGS,但并非所有解决方案都适用于您的特定用例,因为您正在使用SVG过滤器。
solution | filter works? | α频道? | 直接从python调用? | cairosvg | 一些* | 对 | 对 |
---|---|---|---|
svglib | 没有 | 没有 | 对 |
inkscape | 对 | 对 | 通过subprocess |
魔杖 | 对 | 对 | 对 |
可以使用CairoSVG
CairoSVG在PyPI上可用,您可以使用pip安装它:
pip3 install cairosvg
在你的代码:
import cairosvg
width = 640
height = 480
cairosvg.svg2png(url='logo.svg', write_to='image.png', output_width=width, output_height=height)