ImageMagick SVG到PNG转换会删除渐变

我正在尝试允许用户通过CMS上传SVG图像并生成后备PNG,以便在 CMS在前端显示内容,为旧浏览器显示PNG后备。</ p>

问题是,当我上传SVG时,PNG输出有点偏离,渐变似乎丢失了 如下面的屏幕截图所示。</ p>

</ p>

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

 转换gallardo.svg gallardo.png 
</ code> </ pre>

Imagick版本将背景设置为透明,如其他线程但PNG输出与命令行相同。</ p>

  class ResampleSvgUpload 扩展DataExtension {

functi on onAfterUpload(){
if($ this-&gt; isSvg()){
$ this-&gt; resample();
}
}

函数onAfterWrite(){
if($ this-&gt; isSvg()){
$ this-&gt; resample();
}
}

函数isSvg(){
$ extension = strtolower($ this-&gt; owner-&gt ; getExtension());
return($ extension =='svg')? true:false;
}

函数resample(){
$ original = $ this-&gt; owner-&gt; getFullPath();
$ resampled = $ original。 '.PNG';

$ imagick = new Imagick($ original);
$ imagick-&gt; setBackgroundColor(new ImagickPixel('transparent'));
$ imagick-&gt; setImageFormat('png');
$ imagick-&gt ; writeImage($ resampled);
}
}
</ code> </ pre>

我正在使用:</ p>


  • ImageMagick 6.9.0-3 </ li>
  • Imagick 3.1.0RC2 </ li>
  • PHP 5.3.29 </ li>
  • OSX Yosemite 10.10 </ li> \ n </ ul>
    </ div>

展开原文

原文

I'm trying to allow users to upload an SVG image through a CMS and generate a fallback PNG so that when the CMS displays the content on the front end the PNG fallback is shown for older browsers.

The problem is that when I upload an SVG the PNG output is a bit off, gradients seem to be missing as shown in the screenshot below.

SVG on the left PNG on the right

In these tests I'm just using ImageMagick commandline as below but have tried it through the CMS upload using Imagick with the same result.

convert gallardo.svg gallardo.png

Imagick version sets background to transparent as suggested in other threads but PNG output is the same as commandline.

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);
    }
}

I'm using:

  • ImageMagick 6.9.0-3
  • Imagick 3.1.0RC2
  • PHP 5.3.29
  • OSX Yosemite 10.10

dqp10099
dqp10099 可能重复的stackoverflow.com/questions/10235426/...
5 年多之前 回复
dongying7667
dongying7667 如果下面的答案没有帮助,您是否可以在启用verbose命令的情况下发布输出结果,并发布示例pdf?
5 年多之前 回复

1个回答



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

问题几乎肯定是由于该错误引起的 底层程序 - 当你升级到它的新版本时,它会有希望消失。</ p>
</ div>

展开原文

原文

ImageMagick does not do the conversion of SVG itself, instead it delegates that task to a 3rd party program. You can find which program is being used by adding the -verbose option to the convert command.

The issue will almost certainly be being caused by a bug in that underlying program - and will hopefully go away when you upgrade to a newer version of it.

dounao2829
dounao2829 一个古老的问答,但仍然非常新。 这有助于我在Ubuntu 16上使用inkscape v0.91 - > v0.92。 优秀。
3 年多之前 回复
dongxi1879
dongxi1879 谢谢你的提示! 但是,它对我来说不起作用。 我不得不'重新安装imagemagick --use-rsvg'以使其正常工作。 现在就像魅力一样!
大约 5 年之前 回复
douquanhui5735
douquanhui5735 这解决了这个问题 - 我用“brew重新安装imagemagick --with-librsvg librsvg --use-rsvg”重新安装ImageMagick,转换现在可以正常工作
5 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐