我尝试允许用户通过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);
}
}
我正在使用:
答案 0 :(得分:4)
ImageMagick不会转换SVG本身,而是将该任务委托给第三方程序。您可以通过将-verbose
选项添加到convert命令来查找正在使用的程序。
这个问题几乎肯定是由该底层程序中的一个错误引起的 - 当你升级到它的新版本时,它肯定会消失。