ImageMagick SVG到PNG转换会删除渐变

时间:2015-02-04 22:02:37

标签: php svg imagemagick imagick imagemagick-convert

我尝试允许用户通过CMS上传SVG图像并生成回退PNG,以便当CMS在前端显示内容时,会显示旧版浏览器的PNG回退。

问题在于,当我上传SVG时,PNG输出有点偏离,渐变似乎缺失,如下面的屏幕截图所示。

SVG on the left PNG on the right

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

convert gallardo.svg gallardo.png

Imagick版本按other threads中的建议将背景设置为透明,但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
  • OSX Yosemite 10.10

1 个答案:

答案 0 :(得分:4)

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

这个问题几乎肯定是由该底层程序中的一个错误引起的 - 当你升级到它的新版本时,它肯定会消失。