我正在使用ImageMagick将SVG转换为PNG,所有工作都像魅力一样,直到我尝试使用@ font-face然后在SVG文件中添加自定义字体。在Batik中,这个工作正常但现在在ImageMagick中,我无法让它工作。
我可以将字体更改为“convert -list font”中列出的字体,但我可能不得不经常更改字体,所以我想指向转换时的字体文件,而不是使用font-face或其他解决方案不要物。
SVG文件也可以包含多个字体系列,我的ImageMagick安装包含rsvg委托。
有什么想法吗?谢谢!
答案 0 :(得分:1)
尝试rsvg-convert
包提供的librsvg2
(命令行程序)。
我在Amazon Linux上遇到与ImageMagick相同的问题(但在我的Ubuntu桌面上却没有)。 我认为ImageMagick的SVG处理相当差。它无法正确识别“display:none”样式属性。
答案 1 :(得分:0)
可以从命令行运行Inkscape。它有很多选项可以进行转换(参见man inkscape
),通过--verb和--select选项甚至可以允许您在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
文件。