由于未找到委托,将 SVG 转换为另一种格式失败

Converting SVG to another format fail due to delegate not being found

我有 PHP 代码 运行 Debian stretch with ImageMagick。它尝试将 SVG 转换为另一种格式。这是它的开始

$im = new Imagick();
$im->readImageBlob($svg);

变量 $svg 在字符串中包含有效的 SVG 代码。如果我将此字符串复制到扩展名为 .svg 的文本文件中,那么它就可以正常打开。但是 readImageBlob 抛出异常 no delegate for this image format.

我看到通过向系统安装更多软件包解决了类似的问题。但我已经安装了 libxml2-devlibrsvg2-binlibmagickcore-6.q16-3-extralibfreetype6-dev

我不知道我还缺少什么。

我不得不在 $svg 前面加上 <?xml version="1.0" ?>,它起作用了。它至少确实读取了 SVG 并尝试创建 png/jpeg。不过,在转换过程中有一段文字放错了地方。所以总的来说任务还是失败了。但这是另一个问题。我认为问题得到了解答。

从 运行 下面的命令中 PHP exec()

你得到了什么

convert -list format

SVG 行应显示为 RSVG 或 MSVG/XML。它表明了吗?如果您需要 RSVG,则必须安装该委托,然后重新安装 Imagemagick,以便 Imagemagick 可以找到它。 Imagemagick 由 Imagick 使用。它们不一样。 RSVG 委托可以通过 Google 搜索或从 linuxfromscratch.org/blfs/view/svn/general/librsvg.html 找到。您的 svg 文件似乎在 Imagemagick 中使用 RSVG 为我正确呈现,但我不确定它应该是什么样子。它只是一组水平线。

我不太了解如何使用 readImageBlob()。只需使用 readImage(),您可以在其中提供保存的 svg 图像文件的路径。那应该有效。尝试一下,看看你得到了什么。

这是我在 Imagemagick 6.9.10.3 Q16 中使用 RSVG 2.42.2 得到的结果 Mac OSX 我将您的文本保存在一个名为 test.svg.[=15 的文件中=]

convert test.svg test.png

如果我强制使用 Imagemagick MSVG/XML,它看起来就不那么好了。

convert MSVG:test.svg test2.png