imagemagick.net 嵌入字体
imagemagick.net embedded fonts
是否有人对如何使用 ImageMagick.NET 将 SVG 转换为 PNG 有经验或见解,其中 SVG 具有自定义嵌入字体?
我已经看到 similar posts 了,但我对 ImageMagick.net 特别感兴趣,我想避免从命令行调用任何东西。我目前使用 Batik,但我想将其移动到 Azure,我不想通过启动 JVM 来执行 JAR 文件。
另外请注意,我的问题是我是从另一方获取 SVG 并且大多数字体都不是免费提供的,所以我不能只预安装所有可能的字体。
非常感谢您的任何见解。
我对 azure 平台一无所知,但我可以分享一些关于 ImageMagick 中 SVG 过程的见解。 与其说这是一个答案,不如说这是一个冗长的评论
ImageMagick(其中 Magick.net
设置在其之上)对光栅图像执行任务,因此在完成任何其他工作之前,任何矢量输入必须 "decoded" 进入光栅图像。对于 SVG 图像,我知道 ImageMagick 可以通过三种方式将矢量图形渲染为经过验证的像素。
- 使用原始的内部 MSVG 编码器绘制每个形状。
- 如果使用委托库支持进行编译,则将渲染工作传递给
librsvg
。 (通常在 *NIX 系统上)
- 调用外部命令行应用程序。与您提供的链接中引用的建议相同。
如果我把它画出来,我会想象它看起来像这样。
带 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
本身不符合您的要求。
是否有人对如何使用 ImageMagick.NET 将 SVG 转换为 PNG 有经验或见解,其中 SVG 具有自定义嵌入字体?
我已经看到 similar posts 了,但我对 ImageMagick.net 特别感兴趣,我想避免从命令行调用任何东西。我目前使用 Batik,但我想将其移动到 Azure,我不想通过启动 JVM 来执行 JAR 文件。
另外请注意,我的问题是我是从另一方获取 SVG 并且大多数字体都不是免费提供的,所以我不能只预安装所有可能的字体。
非常感谢您的任何见解。
我对
ImageMagick(其中 Magick.net
设置在其之上)对光栅图像执行任务,因此在完成任何其他工作之前,任何矢量输入必须 "decoded" 进入光栅图像。对于 SVG 图像,我知道 ImageMagick 可以通过三种方式将矢量图形渲染为经过验证的像素。
- 使用原始的内部 MSVG 编码器绘制每个形状。
- 如果使用委托库支持进行编译,则将渲染工作传递给
librsvg
。 (通常在 *NIX 系统上) - 调用外部命令行应用程序。与您提供的链接中引用的建议相同。
如果我把它画出来,我会想象它看起来像这样。
带 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
本身不符合您的要求。