由于找不到代理,因此无法将SVG转换为其他格式

时间:2018-06-28 12:21:44

标签: php svg debian imagemagick

我有使用ImageMagick在Debian Stretch上运行的PHP代码。尝试将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

我不知道我还想念什么。

2 个答案:

答案 0 :(得分:2)

我必须在$svg前面加上<?xml version="1.0" ?>,它才有效。至少它确实读入了SVG,并尝试创建png / jpeg。但是,在转换过程中,一段文本被放错了位置。因此,总体而言任务仍然失败。但这是另一个问题。我认为问题已经解决。

答案 1 :(得分:1)

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

convert -list format

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

我对使用readImageBlob()不太了解。只需使用readImage(),即可在其中提供保存的svg图像文件的路径。那应该工作。尝试一下,看看会得到什么。

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

convert test.svg test.png

enter image description here

如果我强制使用Imagemagick MSVG / XML,它的效果将不佳。

convert MSVG:test.svg test2.png

enter image description here