Как SVG сконвертировать в JPG или PNG на C#?

268
08 апреля 2018, 23:09

Я генерирую SVG файлы на C#, необходимо используя C# отрендерить их в JPG или PNG. Как это можно сделать?

Интересны любые варианты, но ответом приму только тот который будет работать на shared хостинге, так как скрипт будет запускаться там. Хостинг ASP.NET MVC 5 - Smarterasp.

Answer 1

Библиотека SVG для C#.

Работает так:

SvgDocument svgDoc = SvgDocument.Open("myFile.svg");
System.Drawing.Bitmap bitmap = svgDoc.Draw();
bitmap.Save("outFile.jpg", ImageFormat.Jpeg);

Брать надо пакет не из NuGet так как там древняя версия и много багов, а прямо горячую, придётся скачать с github и скомпилировать.

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

Библиотека позволяет не только рендерить готовый SVG файл, но и создавать его используя свой API на лету.

Answer 2

1. Способ с использованием Inkscape.

Запускаем из командной строки такую команду

inkscape.exe -z "pathToSVGFile.svg" --export-png="pathToResultFile.png"

В данной ситуации inskape я прописал их в системные пути.

Как оказалось Inkscape не все файлы которые работают в браузере может преобразовать. Для корректной работы потребовалось атрибут href у use заменить на xlink:href и прописать в головном теге svg xmlns:xlink="http://www.w3.org/1999/xlink".

2. Способ с использованием node.js модуля svgexport

Устанавливаем модуль svgexport глобально

npm install svgexport -g

Запускаем команду из консоли

svgexport "FileNameWithPath.svg" "ResultFileNameWithPath.png" png 100%

Сила этого метода в том, что node.js svgexport использует браузерный движок phantom.js для рендера, который основан на WebKit модуле, а это означает что результат будет наиболее соответствовать отображению в браузерах с Chromium основой. Кроме того получится по максимуму использовать именно браузерный синтаксис.

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

Более подробно можно почитать тут и тут.

READ ALSO
Почему приходит пустая строка?

Почему приходит пустая строка?

Добрый день, отсылаю серверу данные:

258
Настройка зависимости в VS 2017

Настройка зависимости в VS 2017

Пробую создать проект по инструкции

231
C# сравнить порядок элементов в списках list1, list2

C# сравнить порядок элементов в списках list1, list2

Есть два списка list 1 и list 2 в них хранятся данные из БДКак мне сравнить данные и сделать перестановку, если в порядок элементов 1-ого и 2-ого списка...

298
Как передать скрыто аргумент?

Как передать скрыто аргумент?

Как передать скрыто аргумент? Как я понял, нужно работать с SystemSecurity

278