有没有人对如何使用ImageMagick.NET将SVG转换为PNG有经验或见解,其中SVG有定制的嵌入式字体?
我已经看过类似员额了,但是我对ImageMagick.net特别感兴趣,我想避免从命令行调用任何东西。我目前使用Batik,但是我想将它移到Azure,并且我不想通过启动JVM来执行JAR文件。
此外,我的问题是,我得到的SVG从另一方和大多数字体是不免费的,所以我不能只是预装所有潜在的字体。
非常感谢你的洞察力。
发布于 2018-10-04 18:02:47
我什么都不知道

azure平台,但我可以分享一些关于ImageMagick内部SVG过程的见解。这与其说是回答,不如说是冗长的评论。
ImageMagick ( Magick.net设置在此之上)对光栅图像执行任务,因此任何矢量输入都必须“解码”为光栅图像,然后才能完成任何其他工作。对于SVG图像,我知道ImageMagick可以将矢量图形呈现为经过验证的像素的三种方法。
librsvg。(通常在*NIX系统上)如果我把它画出来,我会想象它会是这样的。

带有MSVG的SVG字体(选项1)
我相信这是您询问的选项,因为它将是必须ImageMagick安装的默认配置。要呈现字体,必须在系统上找到字体,并由freetype (.ttf或.otf文件)支持。嵌入式字体通常是在base64 CSS 在先下内联附加的@font-face ttf文件。如果这是真的,您应该能够对文档进行预处理,将字体文件解压缩到本地/临时文件系统,并在读取SVG文档之前将其分配给MagickReadSettings.FontFamily。虽然我不确定这是否适用于多种字体。
带有RSVG的SVG字体(选项2)
librsvg为SVG规范提供了比内部呈现器更多的支持,但也为外部资源提供了更严格的方法。还有一个公开发行,它增加了对@font-face的支持,所以您可能不得不做选项1。
外部命令-行(选项3)
这是你最好的选择。ImageMagick的delegate.xml文件可以修改为调用其他实用程序。例如,Inkscape可以通过以下规则由ImageMagick调用。
<delegate decode="svg" command="inkscape.exe -e %o %i"/>虽然我不确定inkscape是否是一个很好的例子,因为愿望清单上仍然列出了对CSS字体的支持。
TL;博士
..。使用ImageMagick.NET将SVG转换为PNG,其中SVG有自定义的嵌入式字体?
总之,它归结为正确的工具,为正确的工作。如果您唯一的用例是将SVG+CSS转换为PNG,并且没有额外的光栅操作任务,那么像batik这样的直接实用程序比ImageMagick更合适。不管你喜欢与否,安装一个JRE来执行JAR文件可能是最好的选择。Magick.net本身并不满足您的要求。
https://stackoverflow.com/questions/52634959
复制相似问题