在使用SVG具有自定义嵌入字体的ImageMagick.NET中,是否有人有经验或见识如何将SVG转换为PNG?
我已经看过similar posts了,但是我对ImageMagick特别感兴趣。 net ,我想避免从命令行调用任何东西。我目前使用的是Batik,但是我想将其移至Azure,并且不想通过启动JVM来执行JAR文件。
另外请注意,我的问题是我从另一方获得SVG,并且大多数字体不是免费提供的,所以我不能只是预安装所有潜在字体。
非常感谢您的见解。
答案 0 :(得分:2)
我对azure平台一无所知,但是我可以在ImageMagick中分享一些有关SVG流程的见解。 这不仅仅是一个漫长的评论,而不是一个答案
ImageMagick(在其顶部设置Magick.net
)在光栅图像上执行任务,因此,在完成任何其他工作之前,必须将任何矢量输入“解码”为光栅图像。对于SVG图像,我知道ImageMagick可以通过三种方式将矢量图形呈现为经过身份验证的像素。
librsvg
。 (通常在* NIX系统上)如果我将其映射出来,我会想象它看起来像这样。
我相信这是您要询问的选项,因为它将是必须安装ImageMagick的默认配置。要渲染字体,必须在系统上找到该字体并受freetype(.ttf
或.otf
文件)支持。嵌入字体通常是@font-face
CSS at-rule下内联的base64 ttf文件。如果是这样,则应该能够对文档进行预处理,将字体文件提取到本地/临时文件系统中,并在阅读SVG文档之前将其分配为MagickReadSettings.FontFamily
。尽管我不确定这是否可以使用多种字体。
librsvg
为SVG规范提供了比内部渲染器更多的支持,但也对外部资源实施了更多受限制的方法。还有一个open issue为@font-face
添加了支持,因此您可能还是不得不执行选项#1。
这将是您的最佳选择。可以更改ImageMagick的delegate.xml文件以调用其他实用程序。例如,Inkscape可以由ImageMagick使用以下规则来调用。
<delegate decode="svg" command="inkscape.exe -e %o %i"/>
尽管我不确定{\ 3}上是否仍列出了对CSS字体的支持,但inkscape是否是一个很好的例子。
TL; DR
...使用SVG具有自定义嵌入字体的ImageMagick.NET将SVG转换为PNG吗?
所有功能,归纳为适合正确工作的正确工具。如果您唯一的用例是将SVG + CSS转换为PNG,并且没有其他栅格处理任务,那么像batik
这样的直接实用程序比ImageMagick更合适。不管喜欢与否,安装JRE来执行JAR文件可能是最好的选择。 Magick.net
本身不符合您的要求。