php - ImageMagick SVG 到 PNG 转换删除渐变

标签 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 优胜美地 10.10

最佳答案

ImageMagick 本身并不执行 SVG 转换,而是将该任务委托(delegate)给第三方程序。您可以通过在转换命令中添加 -verbose 选项来查找正在使用哪个程序。

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

关于php - ImageMagick SVG 到 PNG 转换删除渐变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28332339/

相关文章:

c++ - 如何配置 ImageMagick 不使用任何临时文件?

imagemagick - ruby & RMagick : determining real width & height of text

php - 如何处理在多个页面上使用的表单?

PHP mysql子查询过滤

php - 为什么使用 unset() 函数将数组转换为对象?

CSS:在 IE 中背景图像的 URL 参数中使用原始 svg

php - 如何使用 Laravel 迁移将时间戳列的默认值设置为当前时间戳?

javascript - 如何使画笔的范围与父元素的大小相匹配?

angular - SVG 标记方向箭头出现在 DOM 中,但标记本身不可见

imagemagick - 如何在 Electron 应用程序内安装 imagemagick