我正在使用基于 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(使用前将#替换为@)