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

2024-02-29

我正在使用基于 Cairo/RSVG 的解决方案将 SVG 光栅化为 PNG。 StackOverflow 上已经对它进行了描述在 Python 中将 SVG 转换为 PNG https://stackoverflow.com/questions/6589358/convert-svg-to-png-in-python。 但是,该解决方案似乎不适用于自定义字体。

我找到了本页描述嵌入 SVG 字体 http://frabru.de/c.php/article/SVGFonts-usage.

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

我尝试过 ImageMagick,结果与 Cairo 完全相同。

另一方面,使用所有 3 种字体嵌入方法,无论使用 Google Chrome 或webkit2png.py https://github.com/AdamN/python-webkit2png。但是,如果可能的话,我想避免在服务器上使用 QT WebKit,因为它是不简单的设置(包括 xvfb 等),而且我担心这可能不会非常有效或稳定。

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


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

谷歌有数百种字体 http://code.google.com/p/googlefontdirectory/(并且不断增长)可以在服务器上下载和使用。

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Python 中使用自定义字体将 SVG 转换为 PNG 的相关文章

随机推荐