4

我正在使用基于 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,结果和 Cairo 完全一样。

另一方面,对于所有 3 种字体嵌入方法,使用 Google Chrome 或webkit2png.py都可以在 WebKit 中很好地呈现字体。但是,如果可能的话,我想避免在服务器上使用 QT WebKit,因为它是不平凡的设置(包括 xvfb 等),我担心这可能不会导致非常高效和稳定。

有没有从 Python 将 SVG 渲染为 PNG 的替代方法?

4

4 回答 4

5

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

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

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

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

于 2012-11-03T23:14:09.437 回答
1

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

 inkscape inputfile.svg --export-png=exportfile.png

这里描述了从 python 运行它:Calling an external command in Python

于 2011-09-06T14:29:10.340 回答
0

使用 Imagemagick,我仍然在使用安装在服务器上并且可以在某些操作中使用的字体进行 svg 光栅化,但是在使用 -convert from .svg to .png 时失败......似乎将每种类型的文本都变成了 arial . 我认为这可能是 ImageMagick 的错误或 .svg 中所需的某种格式

于 2013-07-11T13:58:28.237 回答
0

使用 RSVG 检查的几件事:

  • 字体源文件在您的系统或用户字体路径中
  • SVG 中的字体名称没有被引用,即使它们包含空格。librsvg 将假定引号是字体名称的一部分,它不会找到源文件。
于 2016-06-05T20:56:07.087 回答