Php 由于找不到委托,将SVG转换为其他格式失败

Php 由于找不到委托,将SVG转换为其他格式失败,php,svg,debian,imagemagick,Php,Svg,Debian,Imagemagick,我用ImageMagick在Debian stretch上运行PHP代码。它尝试将SVG转换为另一种格式。这就是它的开始 $im = new Imagick(); $im->readImageBlob($svg); 变量$svg在字符串中包含有效的svg代码。如果我将这个字符串复制到一个扩展名为.svg的文本文件中,那么它就可以正常打开。但是,readImageBlob抛出一个异常,表示该图像格式没有委托 我已经看到通过在系统中安装更多的软件包来解决类似的问题。但是我已经安装了libxm

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

$im = new Imagick();
$im->readImageBlob($svg);
变量
$svg
在字符串中包含有效的svg代码。如果我将这个字符串复制到一个扩展名为
.svg
的文本文件中,那么它就可以正常打开。但是,
readImageBlob
抛出一个异常,表示该图像格式没有委托

我已经看到通过在系统中安装更多的软件包来解决类似的问题。但是我已经安装了
libxml2-dev
librsvg2-bin
libmagickcore-6.q16-3-extra
libfreetype6-dev


我不知道我还遗漏了什么。

我不得不用
预先编写
$svg
,它成功了。它至少读取SVG并尝试创建png/jpeg。不过,在转换过程中,有一段文字放错了位置。所以这项任务总体上还是失败的。但这是另一个问题。我想问题已经回答了。

从PHP exec()运行以下命令可以得到什么

转换-列表格式

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

我对使用readImageBlob()知之甚少。只需使用readImage(),其中提供保存的svg图像文件的路径。这应该行得通。试试看你能得到什么

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

convert test.svg test.png

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

convert MSVG:test.svg test2.png

SVG文件的第一行是什么?可能有一些注释、空格和/或XML头
Imagick::readImageBlob
无法理解。还可以尝试为该方法设置“虚拟”文件名<代码>$im->readImageBlob($svg,'filename.svg')Imagick::readImageBlob-从
二进制字符串中读取图像。您发送的是ascii数据,而不是二进制数据。因此,将字符串保存到文本文件并使用readImage()。渲染质量取决于使用哪个SVG渲染器Imagemagick。通过
转换列表格式
可以看到这一点。Imagemagick可以使用Inkscape、RSVG委托或其自己的内部MSVG/XML呈现程序,按从最佳到最差的质量顺序排列。您最好安装Inkscape,如果找到它,Imagemagick将使用它。接下来,将RSVG委托安装到imagemagick,并根据需要重新编译imagemagick。如果您发布SVG文件,我可以使用RSVG使用Imagemagick对其进行测试。@fmw42我找不到有关SVG委托的此类信息。我在哪里可以得到更多的细节?我确实没有安装Inkscape。这是我的图片,它实际上是由Google ChartsInDect生成的一个图,它似乎使用了MSVG而不是RSVG。RSVG做得很正确。你可以在这里看到三列,但它们都是零,所以它们显示为细线。用于我的MSVG将单词“千兆字节”放在了错误的位置。Imagemagick是从debian软件包安装的。librsvg2-bin随后也作为另一个包安装。但它仍然使用msvgimagick,必须知道或重新编译才能找到RSVG。如果您的Imagemagick版本为6.7.9-0或在2012-08-14之后进行了修补,则作为您的主机安装Inkscape。Imagemagick随后将找到Inkscape并使用它代替RSVG或MSVG