我正在使用基于Cairo / RSVG的解决方案将SVG光栅化为PNG。它已经在Convert SVG to PNG in Python中的StackOverflow上描述了。 但是,此解决方案似乎不适用于自定义字体。
我找到了this page describing embedding SVG fonts。
我试图通过XLink从外部SVG中包含它们,如示例中所述。我已经尝试将字体直接嵌入到同一个SVG文件中。失败了,我尝试了CSS Web Fonts语法。使用Cairo进行渲染时,这三种方法都不起作用(在Ubuntu的默认查看器Eye of GNOME中也不起作用)。
我尝试过ImageMagick,结果与开罗完全相同。
另一方面,使用所有3种字体嵌入方法,使用Google Chrome或webkit2png.py在WebKit中渲染字体。但是,如果可能的话,我想避免在服务器上使用QT WebKit,因为它是非平凡的设置(包括xvfb等),我担心这可能不会导致非常高效也不稳定。
有没有其他方法可以从Python渲染SVG到PNG?
答案 0 :(得分:2)
我花了一周时间研究这个问题并得出结论,使用自定义字体处理服务器端渲染/光栅化SVG的最佳方法是在服务器上安装这些字体。我尝试过的工具(rsvg,imagemagick,phantomjs,qtwebkit ......)无法处理网页字体和svg字体。
Google有several hundred fonts(并且还在增长),可以在服务器上下载和使用。
如果您还需要在网页中使用这些相同的字体,您可以直接链接到Google CDN以获取WOFF文件,以节省您自己的服务器时间和网络带宽。
答案 1 :(得分:0)
您可以尝试使用inkscape,也许这可以为您提供更好的结果:
inkscape inputfile.svg --export-png=exportfile.png
这里描述了从python运行它:Calling an external command in Python
答案 2 :(得分:0)
使用Imagemagick我仍然在使用服务器上安装的字体进行svg光栅化并且可以在某些操作中使用,但是在使用-convert从.svg到.png时失败....它似乎变成了每种类型的文字成arial。我认为这可能是ImageMagick或.svg中需要某种格式的错误
答案 3 :(得分:0)
RSVG要检查的几件事情: