我正在使用 MagickNet (ImageMagick for .NET) 来读取下面的 SVG 代码,其中包含 Windows 上“Symbol”真实类型字体的有效字符。字符为UF0B7(symbol.ttf字体的cmap表中的uniF0B7)。这是一个实心圆圈。我使用 ImageMagick 获得的图像包含一个内部写有 F0B7 的矩形。
这是我的包含这个特殊字符的 SVG 文件。它位于文本 XML 元素内(您可能会将其视为浏览器上的一个小方块):
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="main1" width="960" height="720">
<g transform="matrix(1.3333334 0 0 1.3333334 0 0)">
<path stroke="none" fill="#FFFFFF" fill-rule="evenodd" d="M0 0L720 0L720 540L0 540z" transform="matrix(1 0 0 1 0 0)" />
<text style="fill:#000000;font-family:Symbol;" font-size="32" transform="matrix(1 0 0 1 43.08661 129.5433)" fill-opacity="1" x="0.028347015" y="29.952" letter-spacing="-0.01"></text>
</g>
</svg>
这是我的 C# 代码:
byte[] imageData = File.ReadAllBytes(@"F:\test.svg");
using MagickImage image = new MagickImage(imageData);
image.Write(@"F:\test.jpg");
有没有办法让 ImageMagick 使用系统的 Symbol 字体和这种私人使用的字符(根据 unicode 标准)?这个字符和其他同类字符经常被 Powerpoint 软件用于子弹。我需要在我自己的软件中使用可用的库将 pptx 幻灯片转换为 svg,然后对其进行返工,将段落隔离在单独的 SVG 中,以生成幻灯片动画。为了将最终的 SVG 转换为图像,我还可以使用 SVG.Net 等其他库,但是这个也有其他问题。到目前为止,MagickNet 是最精确的,除了这个问题。