【问题标题】:SVG to PNG with custom fonts in Python在 Python 中使用自定义字体的 SVG 到 PNG
【发布时间】:2011-11-11 09:01:24
【问题描述】:

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

我找到了this page describing embedding SVG fonts

我已尝试通过 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?

【问题讨论】:

标签: python svg png librsvg


【解决方案1】:

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

Google 拥有可以在服务器上下载和使用的 several hundred fonts(并且还在不断增加)。

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

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

【讨论】:

  • 注意(据我所知),您不能使用未直接安装在您的机器上的 css 样式标签中引用的字体(即带有引用字体的 url 的字体在网络服务器上)。它们需要安装在您的机器上。在那之后,ImageMagick 对我来说就像一个魅力。
【解决方案2】:

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

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

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

【讨论】:

  • 不太确定这是我想在服务器上安装的软件
  • @vartec:至少,你需要一些第三方产品。不知道为什么 inkscape 应该比任何其他解决方案或多或少值得信赖。对于Windows,还有一个便携版portableapps.com/apps/graphics_pictures/inkscape_portable,如果你不想安装这个东西,可以开箱即用,没有任何管理员权限,也不需要集成到系统中。
  • 刚试过,完全不行。不仅不渲染自定义字体,也不处理使用 XLink 插入的外部图像。
【解决方案3】:

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

【讨论】:

    【解决方案4】:

    使用 RSVG 需要检查的几件事:

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

    【讨论】:

      猜你喜欢
      • 2013-03-07
      • 2017-05-12
      • 2021-11-08
      • 2016-10-12
      • 1970-01-01
      • 2013-01-14
      • 2017-10-13
      • 1970-01-01
      • 2022-01-24
      相关资源
      最近更新 更多