Преобразование ImageMagick SVG в PNG удаляет градиенты
Я пытаюсь разрешить пользователям загружать изображение SVG через CMS и создавать резервный PNG, чтобы, когда CMS отображает содержимое на интерфейсе, резервный PNG отображался для старых браузеров.
Проблема в том, что когда я загружаю SVG, вывод PNG немного отключен, градиенты, похоже, отсутствуют, как показано на скриншоте ниже.
В этих тестах я просто использую командную строку 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
1 answers
ImageMagick не выполняет преобразование SVG самостоятельно, вместо этого он делегирует эту задачу сторонней программе. Вы можете узнать, какая программа используется, добавив опцию -verbose
в команду конвертировать.
Проблема почти наверняка будет вызвана ошибкой в этой базовой программе - и, надеюсь, исчезнет, когда вы обновите ее до более новой версии.