imagemagick.net 嵌入字体

imagemagick.net embedded fonts

是否有人对如何使用 ImageMagick.NET 将 SVG 转换为 PNG 有经验或见解,其中 SVG 具有自定义嵌入字体?

我已经看到 similar posts 了,但我对 ImageMagick.net 特别感兴趣,我想避免从命令行调用任何东西。我目前使用 Batik,但我想将其移动到 Azure,我不想通过启动 JVM 来执行 JAR 文件。

另外请注意,我的问题是我是从另一方获取 SVG 并且大多数字体都不是免费提供的,所以我不能只预安装所有可能的字体。

非常感谢您的任何见解。

我对 平台一无所知,但我可以分享一些关于 ImageMagick 中 SVG 过程的见解。 与其说这是一个答案,不如说这是一个冗长的评论

ImageMagick(其中 Magick.net 设置在其之上)对光栅图像执行任务,因此在完成任何其他工作之前,任何矢量输入必须 "decoded" 进入光栅图像。对于 SVG 图像,我知道 ImageMagick 可以通过三种方式将矢量图形渲染为经过验证的像素。

  1. 使用原始的内部 MSVG 编码器绘制每个形状。
  2. 如果使用委托库支持进行编译,则将渲染工作传递给 librsvg。 (通常在 *NIX 系统上)
  3. 调用外部命令行应用程序。与您提供的链接中引用的建议相同。

如果我把它画出来,我会想象它看起来像这样。

带 MSVG 的 SVG 字体(选项 #1)

我相信这是您询问的选项,因为它是必须安装 ImageMagick 的默认配置。对于要呈现的字体,字体必须在系统上找到,并且受 freetype 支持(.ttf.otf 文件)。嵌入式字体通常是在 @font-face CSS at-rule 下内联附加的 base64 ttf 文件。如果这是真的,您应该能够预处理文档,将字体文件提取到 local/temporary 文件系统,并在读取 SVG 文档之前用 MagickReadSettings.FontFamily 分配它。虽然我不确定这是否适用于多种字体。

带有 RSVG 的 SVG 字体(选项 #2)

librsvg 为 SVG 规范提供比内部渲染器更多的支持,但也对外部资源实施更严格的方法。还有一个 open issue 添加了对 @font-face 的支持,因此无论如何您可能不得不选择选项 #1。

外部命令行(选项 #3)

这将是您的最佳选择。例如ImageMagick的delegate.xml file can be altered to call other utilities. Inkscape,ImageMagick可以通过以下规则调用..

<delegate decode="svg" command="inkscape.exe -e %o %i"/>

虽然我不确定 inkscape 是否是一个很好的例子,因为对 CSS 字体的支持仍然列在 wishlist.

TL;DR

... convert SVG to PNG using ImageMagick.NET where the SVG has custom embedded fonts?

总而言之,它归结为 适合工作的正确工具。如果您唯一的用例是将 SVG+CSS 转换为 PNG,并且您没有额外的光栅操作任务,那么像 batik 这样的直接实用程序比 ImageMagick 更合适。不管喜欢与否,安装 JRE 来执行 JAR 文件可能是最佳选择。 Magick.net 本身不符合您的要求。