Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Python中的自定义字体将SVG转换为PNG_Python_Svg_Png_Librsvg - Fatal编程技术网

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

使用Python中的自定义字体将SVG转换为PNG,python,svg,png,librsvg,Python,Svg,Png,Librsvg,我正在使用基于Cairo/RSVG的解决方案将SVG光栅化为PNG。这已经在StackOverflow中描述过了。 但是,此解决方案似乎不适用于自定义字体 我找到了 我尝试通过XLink从外部SVG中包含它们,如示例中所述。我已经尝试将字体直接嵌入到同一个SVG文件中。由于失败了,我尝试了CSS Web字体语法。使用Cairo进行渲染时,这三种方法都不起作用(在Ubuntu默认的GNOME查看器中也不起作用) 我试过ImageMagick,结果和Cairo完全一样 另一方面,在所有3种字体嵌入方

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

我找到了

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

我试过ImageMagick,结果和Cairo完全一样

另一方面,在所有3种字体嵌入方法中,字体在WebKit中都可以很好地呈现,可以使用Google Chrome,也可以使用Google Chrome。然而,如果可能的话,我希望避免在服务器上使用QT WebKit,因为它的设置非常繁琐(包括xvfb等),我担心这可能不会带来非常高效和稳定的结果

有没有其他方法可以从Python将SVG呈现为PNG

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

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

这里描述了从python运行此功能:

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

谷歌有(而且还在增长)可以在服务器上下载和使用的功能

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

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

对于Imagemagick,我仍然难以使用安装在服务器上并可用于某些操作的字体进行svg栅格化,但是使用-convert from.svg to.png时失败。。。。它似乎把每一种文本都变成了arial。我认为这可能是ImageMagick的一个缺陷,或者.svg中需要的某种格式。使用RSVG需要检查以下几点:

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

我不太确定这是我想安装的软件servers@vartec:至少,您需要一些第三方产品。不知道为什么inkscape比任何其他解决方案都更值得信赖。对于Windows,如果你不想安装它,也有一个可移植的版本,可以开箱即用,没有任何管理权限,也没有将自身集成到系统中。只是尝试了一下,根本不起作用。不仅不呈现自定义字体,而且也不处理使用XLink插入的外部图像。我使用了这个适用于PNG的替代方案:注意(据我所知),您不能使用css样式标记中引用的字体,这些字体不是直接安装在您的计算机上的(即带有url的字体,url引用web服务器上的字体)。它们需要安装在您的计算机上。在那之后,ImageMagick对我很有吸引力。