azure - imagemagick.net 嵌入字体

标签 azure svg imagemagick

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

我见过similar posts关于这一点,但我对 ImageMagick.net 特别感兴趣,并且我想避免从命令行调用任何内容。我目前使用 Batik,但我想将其移至 Azure,并且不想启动 JVM 以便执行 JAR 文件。

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

非常感谢您的见解。

最佳答案

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

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

  1. 使用原始的内部 MSVG 编码器来绘制每个形状。
  2. 如果使用委托(delegate)库支持进行编译,则将渲染工作传递给 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"/>

虽然我不确定 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 本身无法满足您的要求。

关于azure - imagemagick.net 嵌入字体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52634959/

相关文章:

Azure 日志显示 : "The supplied notification payload is invalid" for official Xamarin. Android 示例

Azure 数据工厂 - 如果在数据库表中找不到文件则复制事件

azure - 如何在Xamarin移动应用程序中安全地调用具有函数级别授权的Azure Function?

node.js - 如何阻止 Azure DocumentDB 模拟器将 localhost 重定向到 HTTPS?

php - 使用 PHP 从 .pdf 中提取页面

imagemagick - 如何在Windows 7上安装ImageMagick(二)

javascript - 如何向从文件动态加载的 SVG 元素添加事件监听器?

javascript - SVG 鼠标指针位置

javascript - 如何使我的 n-resize 显示正确?

c++ - 在 Qt Creator 中使用 Magick++