我有使用ImageMagick在Debian Stretch上运行的PHP代码。尝试将SVG转换为另一种格式。这是开始的方式
$im = new Imagick();
$im->readImageBlob($svg);
变量$svg
在字符串中包含有效的SVG代码。如果我将此字符串复制到扩展名为.svg
的文本文件中,则可以正常打开。但是readImageBlob
抛出一个异常,说no delegate for this image format
。
我看到了通过向系统安装更多软件包来解决的类似问题。但是我已经安装了libxml2-dev
,librsvg2-bin
,libmagickcore-6.q16-3-extra
和libfreetype6-dev
。
我不知道我还想念什么。
答案 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
如果我强制使用Imagemagick MSVG / XML,它的效果将不佳。
convert MSVG:test.svg test2.png