Преобразование ImageMagick SVG в PNG удаляет градиенты


Я пытаюсь разрешить пользователям загружать изображение SVG через CMS и создавать резервный PNG, чтобы, когда CMS отображает содержимое на интерфейсе, резервный PNG отображался для старых браузеров.

Проблема в том, что когда я загружаю SVG, вывод PNG немного отключен, градиенты, похоже, отсутствуют, как показано на скриншоте ниже.

SVG on the left PNG on the right

В этих тестах я просто использую командную строку ImageMagick, как показано ниже, но попробовал ее через загрузку CMS с помощью Воображайте с тем же результатом.

convert gallardo.svg gallardo.png

Версия Imagick устанавливает прозрачный фон, как предложено в других потоках, но вывод 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
Author: Community, 2015-02-05

1 answers

ImageMagick не выполняет преобразование SVG самостоятельно, вместо этого он делегирует эту задачу сторонней программе. Вы можете узнать, какая программа используется, добавив опцию -verbose в команду конвертировать.

Проблема почти наверняка будет вызвана ошибкой в этой базовой программе - и, надеюсь, исчезнет, когда вы обновите ее до более новой версии.

 4
Author: Danack, 2015-02-05 12:22:09