2015-04-30 4 views
1

У меня есть ImageMagick, установленный на моей Mac OS, Linux 64bit (2 системы) и RedHat.ImageMagick SVG to PNG не раскрашивает

У меня есть простой SVG файл с таким содержимым:

<?xml version="1.0" encoding="iso-8859-1"?> 
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> 
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" 
     width="100px" height="100px" viewBox="0 0 100 100" style="enable-background:new 0 0 100 100;" xml:space="preserve"> 
    <g> 
     <rect x="15" y="15" style="fill:none;" width="70" height="70"/> 
     <path d="M85,0H15H0v15v70v15h15h70h15V85V15V0H85z M85,85H15V15h70V85z"/> 
    </g> 
</svg> 

Когда я конвертировать его на MAC OSX, RedHat или даже одной из моей установки Linux с помощью:

convert -fill 'rgb(255,0,0)' image.svg test.png 

он преобразует файл правильно, то есть он меняет цвет на красный.

Однако, в других настройках Linux он не раскрашивает его, а остается в черном цвете.

На всех системах я установил ImageMagick из источника. Все имеют ту же версию. Все дает "rsvg-convert" -o "%o" "%i" когда я исполню:

convert -list delegate | grep 'svg => ' 

Но я не знаю, почему один из моей установки Linux не работает, как ожидалось.

+1

rgb принимает 3 аргумента (rgba займет 4). Устанавливает ли исправление проблемы? –

+0

Я поместил лишний аргумент здесь по ошибке. Я фактически использовал 3 аргумента, но он не работает ни – mahadazad

ответ

1

Добавить -verbose вашей команды новообращенной:

convert -verbose -fill 'rgba(255,0,0,0)' image.svg test.png 

Затем проверьте снова на каждом из ваших систем. Сравните выходные данные для каждого случая.

-verbose сообщение в терминале вывода каких именно делегат командной строки будет работать в фоновом режиме, чтобы добиться окончательного формата, ImageMagick может обрабатывать себя.

К примеру, на моей текущей системе (OSX Mavericks), потому что у меня другая установка от вашей, моя конверсия не заполняет красный в SVG, и я получаю, чтобы увидеть это в терминале:

"/opt/local/bin/inkscape" "/var/tmp/magick-31893m0w2-x4pHlPY" \ 
     --export-eps="/var/tmp/magick-31893y4-KtfXirywn" \ 
     --export-dpi="90,90" --export-background="rgb(100%,100%,100%)" \ 
     --export-background-opacity="1" > \ 
     "/var/tmp/magick-31893J8WlJy8Sn0uH" 2>&1 
/var/tmp/magick-31893M9guCq3EvFL71 PNG 80x80 80x80+0+0 8-bit sRGB 351B 0.000u 0:00.000 
/var/tmp/magick-31893y4-KtfXirywn PS 80x80 80x80+0+0 16-bit sRGB 351B 0.000u 0:00.000 
img.svg=>/var/tmp/magick-31893y4-KtfXirywn PS 80x80 80x80+0+0 16-bit sRGB 351B 0.000u 0:00.000 
img.svg=>out.png PS 80x80 80x80+0+0 8-bit sRGB 3c 463B 0.000u 0:00.000 
[ghostscript library] -q -dQUIET -dSAFER -dBATCH -dNOPAUSE -dNOPROMPT \ 
     -dMaxBitmap=500000000 -dAlignToPixels=0 -dGridFitTT=2 \ 
     "-sDEVICE=pngalpha" -dTextAlphaBits=4 -dGraphicsAlphaBits=4 \ 
     "-r72x72" -g80x80 "-sOutputFile=/var/tmp/magick-31893M9guCq3EvFL7%d" \ 
     "-f/var/tmp/magick-31893VjGeCPBsW7zN" \ 
     "-f/var/tmp/magick-31893OxqHgutvF5QZ" 

как вы можете видеть, в моем случае будет Inkscape в качестве делегата преобразующего SVG в EPS, затем Ghostscript конвертировать EPS в PNG (с альфа-каналом) ....

1

Попробуйте это:

convert -fill 'rgb(255,0,0)' MSVG:test.svg test.png 

Он использует собственный рендеринг SVG ImageMagick, MSVG, а не библиотеку RSVG. Больше информации здесь: http://imagemagick.org/Usage/draw/#svg

Однако MSVG не является полным SVG-конвертером, поэтому некоторые файлы SVG могут не отображаться правильно.

Смежные вопросы