使用ImageMagick将SVG与自定义字体转换为PNG

时间:2012-03-23 09:48:10

标签: svg imagemagick

我正在使用ImageMagick将SVG转换为PNG,所有工作都像魅力一样,直到我尝试使用@ font-face然后在SVG文件中添加自定义字体。在Batik中,这个工作正常但现在在ImageMagick中,我无法让它工作。

我可以将字体更改为“convert -list font”中列出的字体,但我可能不得不经常更改字体,所以我想指向转换时的字体文件,而不是使用font-face或其他解决方案不要物。

SVG文件也可以包含多个字体系列,我的ImageMagick安装包含rsvg委托。

有什么想法吗?谢谢!

4 个答案:

答案 0 :(得分:1)

尝试rsvg-convert包提供的librsvg2(命令行程序)。

我在Amazon Linux上遇到与ImageMagick相同的问题(但在我的Ubuntu桌面上却没有)。 我认为ImageMagick的SVG处理相当差。它无法正确识别“display:none”样式属性。

答案 1 :(得分:0)

可以从命令行运行Inkscape。它有很多选项可以进行转换(参见man inkscape),通过--verb和--select选项甚至可以允许您在GUI内部执行操作。

正如halfer指出的那样,转换速度也相当快。但请注意,其渲染器设计用于交互式显示,而不是rsvg执行的单遍静态显示,因此在某些情况下rsvg可能更快。此外,在Web服务器上安装Inkscape有时会出现问题,原因很简单,因为此GUI应用程序会依赖大量依赖项。

当我们将这些命令行选项添加到Inkscape时,部分原因是因为rsvg缺乏对许多SVG功能的支持,包括字体。从那时起rsvg已经改进,我认为它现在应该支持通过font-face属性替换字体。最常见的问题是在rsvg看不到的地方安装了字体(也许专有字体在发行版中保存在不同的路径中?)

祝你好运,如果你理清的话,请告诉我们。

答案 2 :(得分:0)

我曾经有一堆SVG文件,每个文件一页(整本书)。字体是自动生成的,每页一个。字符编码是非标准的,我相信只有页面中实际使用的字符才会放入字体中。即使使用data-uris将字体嵌入到SVG中,我使用的所有程序(Imagemagick,Inkscape,rsvg-convert)都无法显示它们。只有Firefox能够正确呈现页面。这是我所做的:

首先,我创建了一个包含所有页面的简单HTML:

<html>
    <body>
         <img src="p001.svg" />
         <img src="p002.svg" />

然后,我在Firefox中打开了HTML。花了一些时间,但渲染了整本书。

然后,我将整个页面打印为PDF。我首先将打印选项设置为不打印页眉/页脚。

结果是一个大型的PDF文件,大小为几兆字节(那里也有光栅图像)。

这不是最简单的解决方案,但它可行。遗憾的是,没有其他SVG渲染器比Firefox中的渲染器好。

希望这对某人有帮助。

答案 3 :(得分:0)

在要求将html渲染到图像后,我得到了这个答案,但它也适用于SVG:https://stackoverflow.com/a/56194265/118125

"/Applications/Google Chrome.app/Contents/MacOS/Google Chrome" --headless --screenshot --window-size=256,256 --default-background-color=0 image.svg

它会根据 Google Chrome 呈现的内容生成一个screenshot.png文件。

相关问题