2011-09-06 103 views
3

我正在使用基于开罗/ RSVG的解决方案将SVG转换为PNG。它已经在StackOverflow的Convert SVG to PNG in Python中描述过了。 但是,此解决方案似乎不适用于自定义字体。我找到了this page describing embedding SVG fonts使用Python中的自定义字体将SVG转换为PNG

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

我试过ImageMagick,结果和开罗一模一样。

另一方面,使用全部3种字体嵌入方法,WebKit中的字体都可以使用Google Chrome或webkit2png.py进行渲染。但是,如果可能的话,我想避免在服务器上使用QT WebKit,因为它是非常简单的设置(包括xvfb等),我担心这可能不会导致非常高效且不稳定。

是否有任何替代方法从Python渲染SVG到PNG?

回答

0

你可以尝试使用inkscape,或许这给你更好的结果:

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

蟒蛇运行,这是说明如下:Calling an external command in Python

+0

不太确定这是我想安装在服务器上的软件 – vartec

+1

@vartec:至少需要*某些第三方产品。不知道为什么Inkscape应该比任何其他解决方案更值得信赖。对于Windows,如果您不想安装该产品,也可以使用便携式版本http://portableapps.com/apps/graphics_pictures/inkscape_portable,可以直接运行,不需要任何管理员权限,也不需要整合到系统中。 –

+0

刚刚尝试过,根本不起作用。不仅不渲染自定义字体,而且不处理使用XLink插入的外部图像。 – vartec

2

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

谷歌有several hundred fonts(和增长),可以下载和使用的服务器上。

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

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

0

随着Imagemagick我仍然努力与svg栅格化安装在服务器上的字体,可用于某些操作,但使用-convert从.svg到.png ....失败似乎将每种类型的文字转换成宋体。我想这可能是与ImageMagick的或错误的.SVG需要一定的格式

0

几件事情检查与RSVG:

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