我想将大量 SVG 文件(包含线条图)渲染为 PNG 格式(可能还有其他格式),所以我打算编写一个脚本来帮我完成这项工作。问题是我需要选择一个程序来执行转换步骤。现有的解决方案是 rsvg 和 Inkscape,我不想使用其中任何一个。
当我使用 rsvg 渲染图像时,我注意到与其他线条相连的正交线条往往在其“内侧”有微弱的阴影,这些阴影会向一端逐渐消失(例如,a<rect/>
往往在每个边缘的内侧都有这些阴影,顺时针方向逐渐消失,但出于某种原因顶部除外)。如果不放大 3 倍或以上,几乎不可能看到这些阴影,但它们仍会使线条看起来模糊。如果将图像渲染成这样的光栅格式,我会觉得很草率,尤其是因为我的线条图包含许多正交线条。
ImageMagick 使用 rsvg 来处理 SVG 文件。这意味着我使用 ImageMagick 渲染的任何 SVG 都会遇到同样的问题。不过,如果我可以更改 SVG 委托,我不会介意使用它。
我不知道 Inkscape 的输出是什么样子,因为我已经很久没用它了。它依赖于一长串无用的 GNOME 库和程序,这些库和程序会把我的系统弄得一团糟,上次使用 GNOME 后,我花了很长时间清理系统。我不想再试一次,只是为了看看质量是否更好。
我最后尝试的是一个名为 Anti-Grain Geometry 的程序,它似乎无人维护并且无法编译。
答案1
我尝试了 PhatomJS 的渲染功能,它比 rsvg 创建了更清晰的渲染。
这个解决方案的缺点是:
对于我所做的事情来说,这是一个相当大的程序,大约有 15 MB
除了我之前的脚本之外,它还需要用 Javascript 编写脚本
它不像 rsvg 那样容易识别 SVG,这迫使人们不得不将 SVG 包装在 HTML 中
优点:
PhantomJS 依赖的常见依赖项很少,因此大多数用户都可以轻松安装它
它创造了通过网络获取文件的可能性
它解决了问题