imagemagick.net嵌入式字体

时间:2018-10-03 20:11:12

标签: azure svg imagemagick

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

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

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

非常感谢您的见解。

1 个答案:

答案 0 :(得分:2)

我对平台一无所知,但是我可以在ImageMagick中分享一些有关SVG流程的见解。 这不仅仅是一个漫长的评论,而不是一个答案

ImageMagick(在其顶部设置Magick.net)在光栅图像上执行任务,因此,在完成任何其他工作之前,必须将任何矢量输入“解码”为光栅图像。对于SVG图像,我知道ImageMagick可以通过三种方式将矢量图形呈现为经过身份验证的像素。

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

如果我将其映射出来,我会想象它看起来像这样。

SVG delegate map

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

我相信这是您要询问的选项,因为它将是必须安装ImageMagick的默认配置。要渲染字体,必须在系统上找到该字体并受freetype(.ttf.otf文件)支持。嵌入字体通常是@font-face CSS at-rule下内联的base64 ttf文件。如果是这样,则应该能够对文档进行预处理,将字体文件提取到本地/临时文件系统中,并在阅读SVG文档之前将其分配为MagickReadSettings.FontFamily。尽管我不确定这是否可以使用多种字体。

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

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

外部命令行(选项#3)

这将是您的最佳选择。可以更改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本身不符合您的要求。