使用Python中的自定义字体SVG到PNG

时间:2011-09-06 13:57:18

标签: python svg png librsvg

我正在使用基于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?

4 个答案:

答案 0 :(得分:2)

我花了一周时间研究这个问题并得出结论,使用自定义字体处理服务器端渲染/光栅化SVG的最佳方法是在服务器上安装这些字体。我尝试过的工具(rsvg,imagemagick,phantomjs,qtwebkit ......)无法处理网页字体和svg字体。

Google有several hundred fonts(并且还在增长),可以在服务器上下载和使用。

  • 下载OTF或TTF字体
  • 在服务器上安装它们并刷新字体缓存
  • 使用SVG文档中的字体系列名称替换外部字体的CSS定义。

如果您还需要在网页中使用这些相同的字体,您可以直接链接到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要检查的几件事情:

  • 字体源文件在您的系统或用户字体路径中
  • 即使SVG中包含空格,也不会引用SVG中的字体名称。 librsvg将假设引号是字体名称的一部分,它不会找到源文件。