Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/257.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php ImageMagick SVG到PNG的转换将删除渐变_Php_Svg_Imagemagick_Imagick_Imagemagick Convert - Fatal编程技术网

Php ImageMagick SVG到PNG的转换将删除渐变

Php ImageMagick SVG到PNG的转换将删除渐变,php,svg,imagemagick,imagick,imagemagick-convert,Php,Svg,Imagemagick,Imagick,Imagemagick Convert,我试图允许用户通过CMS上传SVG图像并生成一个备用PNG,这样当CMS在前端显示内容时,旧浏览器会显示PNG备用 问题是,当我上传一个SVG时,PNG输出有点失真,梯度似乎丢失了,如下面的屏幕截图所示 在这些测试中,我只使用ImageMagick命令行,如下所示,但使用Imagick通过CMS上传进行了尝试,结果相同 convert gallardo.svg gallardo.png Imagick版本按照中的建议将背景设置为透明,但PNG输出与命令行相同 class ResampleSv

我试图允许用户通过CMS上传SVG图像并生成一个备用PNG,这样当CMS在前端显示内容时,旧浏览器会显示PNG备用

问题是,当我上传一个SVG时,PNG输出有点失真,梯度似乎丢失了,如下面的屏幕截图所示

在这些测试中,我只使用ImageMagick命令行,如下所示,但使用Imagick通过CMS上传进行了尝试,结果相同

convert gallardo.svg gallardo.png
Imagick版本按照中的建议将背景设置为透明,但PNG输出与命令行相同

class ResampleSvgUpload extends DataExtension {

    function onAfterUpload() {
        if($this->isSvg()){
            $this->resample();
        }
    }

    function onAfterWrite() {
        if($this->isSvg()){
            $this->resample();
        }
    }

    function isSvg() {
        $extension = strtolower($this->owner->getExtension());
        return ($extension == 'svg') ? true : false;
    }

    function resample() {
        $original = $this->owner->getFullPath();
        $resampled = $original . '.png';    
        $imagick = new Imagick($original);
        $imagick->setBackgroundColor(new ImagickPixel('transparent'));
        $imagick->setImageFormat('png');
        $imagick->writeImage($resampled);
    }
}
我正在使用:

  • ImageMagick 6.9.0-3
  • Imagick 3.1.0RC2
  • PHP 5.3.29
  • 约塞米蒂10.10

ImageMagick本身不进行SVG转换,而是将该任务委托给第三方程序。通过向convert命令添加
-verbose
选项,可以找到正在使用的程序


该问题几乎肯定是由该基础程序中的错误引起的,当您升级到新版本时,该问题有望消失。

如果下面的答案没有帮助,您能否在启用verbose命令的情况下发布输出结果,以及发布一个示例pdf?此示例的可能副本解决了问题-我用“brew重新安装ImageMagick-with librsvg librsvg-use rsvg”重新安装了ImageMagick,转换现在可以正常工作感谢提示!然而,它并没有立即为我工作。我必须执行“brew重新安装imagemagick——使用rsvg”以使其正常工作。现在很有魅力!一个古老的问题和答案,但仍然非常流行。这对我在Ubuntu 16上使用inkscape v0.91->v0.92有帮助。杰出的