Imagick SVG转JPG错误,没有解码委托

12
我尝试了许多不同的解决方案,但无法使用Imagick::readImageBlob,需要帮助,谢谢。
错误信息:
Caught exception: no decode delegate for this image format `' @ error/blob.c/BlobToImage/364

代码:

$svg = file_get_contents($this->svg);
$image = new Imagick();
$image->readImageBlob($svg);
//...

SVG:

<?xml version="1.0" encoding="UTF-8" standalone="no"?> 
    <svg xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" version="1.1" width="928" height="933" id="parent">

        <image width="928" height="933" xlink:href="image.jpg" ></image>

        <path id="path1" fill="none" d="M100,656.5c-105.1-200.5-28.1-448,172-553s447.5-27.5,552.6,173s28.1,448-172,553 S205.1,856.9,100,656.5z"/>
        <text text-anchor="middle">
            <textPath xlink:href="#path1" startOffset="33.3333%">
                <tspan>top</tspan>
            </textPath>
        </text>

        <path id="path2" fill="none" d="M121.8,264.8C10.2,453.3,72.2,696.3,260.3,807.7s431,48.9,542.6-139.5 s49.5-431.5-138.5-542.8S233.3,76.4,121.8,264.8z"/>
        <text text-anchor="middle">
        <textPath xlink:href="#path2" startOffset="33.3333%">
            <tspan>bund</tspan></textPath>
        </text>
    </svg>

SVG是否在\Imagick::queryformats();中列出?您可能没有安装适当的库来读取SVG图像,例如RSVG。 - Danack
我看到SVG不在列表中,我在哪里可以找到正确的RSVG安装文件? - thegingerdk
你没有说明你的系统是什么。在CentOS上,可能需要执行yum install rsvg命令。 - Danack
抱歉,这是一个Ubuntu服务器,但我发现如果我添加了Imagick中缺失的项目,它就可以工作了。 - thegingerdk
什么是缺失的?我遇到了完全相同的问题。尝试对SVG进行base64解码,以便我可以将其转换为PNG。 - Native Coder
7个回答

9

对我来说这些依赖项丢失了(ubuntu 16.04):

sudo apt-get install libgraphicsmagick1-dev libmagickcore-dev libmagickcore-6.q16-2 libmagickcore-6.q16-2-extra

预期输出:
identify -list format | grep SVG
     MSVG  SVG       rw+   ImageMagick's own SVG internal renderer
      SVG  SVG       rw+   Scalable Vector Graphics (RSVG 2.40.13)
     SVGZ  SVG       rw+   Compressed Scalable Vector Graphics (RSVG 2.40.13)

1
Shell渲染了identify -list format | grep SVG的正确输出,但我仍然收到了“no decode delegate for this image format”的错误信息... 有什么想法吗? - Shmack

7
在尝试了@Native Coder和@karser的回答后,我的SVG仍然生成了相同的“未解码委托”的错误。在SVG内容的开头添加<?xml version="1.0" encoding="UTF-8" standalone="no"?>后,它开始工作了。同时需要检查您的XML是否有效。

1
对我有用。谢谢!(Ubuntu 18,PHP 7.4) - r34
我的SVG包含了那个XML行 :( - Shmack
也许检查一下它周围是否有额外的空格? - Antony

2

很遗憾,对我来说没有起作用(Ubuntu 20.04)。因此,似乎不是一个通用的解决方案。 - twigmac
在两个环境中安装inkscape对我来说都起作用了。 - r34

1

使用Ubuntu 20.04,我运行了下面的命令安装了libmagickcore-6软件包。

该软件包为MagickCore添加了对SVG、WMF、OpenEXR、DjVu和Graphviz的支持。有几个不同的版本,例如,其中一个版本是编译为16位通道深度和高动态范围(Q16HDRI)。

 sudo apt install libmagickcore-6*

使用上述命令,似乎我安装了所有不同的版本。不确定这是否是最好的和最有效的方法,但它确实解决了问题。

1

Docker镜像alpine,适合我使用:

RUN apk add --update imagemagick imagemagick-libs imagemagick-dev \
    && pecl install imagick \
    && docker-php-ext-enable imagick

0

对于未来阅读此文的任何人,我曾经遇到过完全相同的问题。问题在于我缺少了libxml2和librsvg2-bin。


0
对我来说,尝试了上述所有解决方案都没有结果,最后我安装了Inkscape(这是ImageMagick使用的软件),现在它完美地运行了!
sudo apt-get install inkscape

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接