ImageMagick SVG 到 PNG 的转换移除了渐变

ImageMagick SVG to PNG conversions removes gradients

我正在尝试允许用户通过 CMS 上传 SVG 图像并生成后备 PNG,这样当 CMS 在前端显示内容时,将为旧版浏览器显示 PNG 后备。

问题是当我上传 SVG 时,PNG 输出有点不正常,渐变似乎丢失了,如下面的屏幕截图所示。

在这些测试中,我只是使用如下所示的 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 本身不进行 SVG 的转换,而是将该任务委托给第 3 方程序。您可以通过向转换命令添加 -verbose 选项来查找正在使用的程序。

这个问题几乎肯定是由该底层程序中的错误引起的 - 并且当您升级到它的更新版本时有望消失。