【问题标题】:ImageMagick SVG to PNG conversions removes gradientsImageMagick SVG 到 PNG 的转换消除了渐变
【发布时间】:2015-04-04 14:55:37
【问题描述】:

我正在尝试允许用户通过 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 6.9.0-3
  • Imagick 3.1.0RC2
  • PHP 5.3.29
  • OSX 优胜美地 10.10

【问题讨论】:

标签: php svg imagemagick imagick imagemagick-convert


【解决方案1】:

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

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

【讨论】:

  • 这解决了问题 - 我使用“brew reinstall imagemagick --with-librsvg librsvg --use-rsvg”重新安装了 ImageMagick,现在转换可以正常工作
  • 感谢您的提示!但是,它并没有立即为我工作。我必须做'brew reinstall imagemagick --use-rsvg'才能让它工作。现在像魅力一样工作!
  • 一个古老的问题和答案,但仍然是最新的。这有助于我在 Ubuntu 16 上使用 inkscape v0.91 -> v0.92。很棒。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-08
  • 2012-04-08
  • 2021-05-08
  • 2015-11-18
  • 2018-10-26
相关资源
最近更新 更多