PHP конвертирует SVG в Jpg с отсутствующими элементами

Я использую php imagemagic для преобразования svg в jpg, и я использую команду ниже для преобразования.

convert -de density 250 source.svg target.jpg

Я могу успешно преобразовать svg в jpg, но некоторые элементы в svg отсутствуют. Пожалуйста, проверьте пример ниже

Введите SVG  введите описание изображения здесь

Выходной JPG

введите описание изображения здесь

Здесь хорошо видно, что светло-серые оттенки по бокам заменены на белый цвет. Может кто-нибудь дайте мне знать, как это исправить.

К вашему сведению, вот ссылка для загрузки актуального SVG

https://drive.google.com/file/d/1vC5yaXds7ogcsTWjaDzkXZZFyKzLCsgf/view?usp=sharing


person Aravinthan M    schedule 11.09.2018    source источник


Ответы (2)


Какой модуль рендеринга SVG вы используете? Это может быть внутренний Imagemagick MSVG / XML, делегат RSVG или Inkscape (в порядке увеличения функциональности). Вы можете узнать это, добавив -verbose в командную строку.

convert -verbose -density 250 source.svg target.jpg


Я использовал Imagemagick 6.9.10.11 Q16 Mac OSX с его внутренним средством визуализации MSVG / XML, RSVG 2.42.2_2 и Inkscape 0.92.3_4. Все три дали разные результаты. RSVG был худшим. Inkscape был лучшим. Вот мои результаты с использованием вашей команды.

convert -density 250 MSVG:source.svg target_msvg.jpg


введите описание изображения здесь

convert -density 250 RSVG:source.svg target_rsvg.jpg


 введите описание изображения здесь

convert -density 250 source.svg target_inkscape.jpg


 введите описание изображения здесь

Обычно RSVG работает лучше, чем MSVG Imagemagick. Но здесь, похоже, дела обстоят хуже. Это могло быть связано с тем, как я изменил свой файл delegates.xml, чтобы иметь возможность запускать RSVG во время установки Inkscape. Также средство визуализации MSVG было улучшено за последние несколько выпусков. Таким образом, более старая версия может не дать такого хорошего результата.

person fmw42    schedule 11.09.2018
comment
Подробная команда convert -verbose -de density 250 source.svg target.jpg приведена ниже. mvg: / tmp / magick-LSfBdmJW = ›/ tmp / magick-LSfBdmJW MVG 1246x1076 1246x1076 + 0 + 0 16-битный DirectClass 15,5 КБ 0,430u 0: 00,439 / var / www / html / img / simulator / tmp / 575562 / sourceImageTopFront .svg SVG 1246x1076 1246x1076 + 0 + 0 16-битный DirectClass 15.5KB 0.000u 0: 00.000 /var/www/html/img/simulator/tmp/575562/sourceImageTopFront.svg=›/var/www/html/img/simulator /tmp/575562/sourceImageTopFront.jpg SVG 1246x1076 1246x1076 + 0 + 0 16-битный DirectClass 106KB 0.020u 0: 00.019 - person Aravinthan M; 12.09.2018
comment
конвертировать -список форматов | grep SVG Эта команда привела к следующему результату: MSVG -w + Собственный внутренний рендерер SVG ImageMagick SVG -w + Масштабируемая векторная графика SVGZ -w + Сжатая масштабируемая векторная графика - person Aravinthan M; 12.09.2018
comment
Все еще сталкиваюсь с той же проблемой. К вашему сведению, я использую ImageMagic 7.0.8-11 - person Aravinthan M; 12.09.2018
comment
Установите Inkscape, и вы должны получить то, что я указал выше для результата Inkscape, если это правильный результат. - person fmw42; 12.09.2018

Наконец я нашел обходной путь для этого. Я преобразовал svg в изображение холста (формат base64) через javascript, а через php я преобразовал данные base64 в изображение jpg.

person Aravinthan M    schedule 12.09.2018