在 Python 中使用自定义字体将 SVG 转换为 PNG

var*_*tec 4 python svg png librsvg

我正在使用基于 Cairo/RSVG 的解决方案将 SVG 光栅化为 PNG。它已经在 StackOverflow 上的Convert SVG to PNG in Python 中进行了描述。但是,此解决方案似乎不适用于自定义字体。

我发现这个页面描述了嵌入 SVG 字体

我尝试通过 XLink 从外部 SVG 中包含它们,如示例中所述。我尝试将字体直接嵌入到同一个 SVG 文件中。失败了,我尝试了 CSS Web Fonts 语法。在使用 Cairo 渲染时,这 3 种方法都不起作用(在 Ubuntu 的默认查看器 Eye of GNOME 中也不起作用)。

我试过 ImageMagick,结果与开罗完全相同。

另一方面,使用所有 3 种字体嵌入方法,字体在 WebKit 中呈现得很好,无论是使用 Google Chrome 还是webkit2png.py。但是,如果可能的话,我想避免在服务器上使用 QT WebKit,因为它的设置很重要(包括 xvfb 等),而且恐怕这可能不会导致非常高效或稳定。

有没有其他方法可以从 Python 将 SVG 渲染为 PNG?

g r*_*g r 5

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

Google 有数百种字体(并且还在不断增加),可以在服务器上下载和使用。

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

如果您还需要在网页中使用这些相同的字体,您可以将 WOFF 文件直接链接到 Google CDN,以节省您自己的服务器时间和网络带宽。


Doc*_*own 0

您可以尝试使用inkscape,也许这会给您更好的结果:

 inkscape inputfile.svg --export-png=exportfile.png
Run Code Online (Sandbox Code Playgroud)

此处描述了从 python 运行此命令:Calling an external command in Python