26

У меня есть набор значков SVG, которые я хотел бы использовать для разработки приложения в VB.Net 2010, и, поскольку он не поддерживает обработку значков SVG, мне необходимо преобразовать эти значки в PNG или ICO, с предпочтением выходное разрешение. Я нашел такой инструмент командной строки для Ubuntu, который называется rsvgconvert . Есть ли у нас такой инструмент для Windows?

12 ответов12

18

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

Лучше попробуйте Inkscape в командной строке:

inkscape in.svg --export-png=out.png

11

ImageMagick имеет инструмент командной строки, который доступен для Linux и Windows (и других). Инструмент конвертера обычно называется "конвертировать". Вот некоторая документация по использованию.

И вот где вы можете получить установщик Windows.

6

Командная строка не работала из коробки, плюс я хотел, чтобы 100 файлов были конвертированы. Вот как я сделал это работает с Windows 7:

  1. установить Inkscape - не портативный!

  2. Скопируйте все ваши SVG-файлы в одну папку, например, "C:\svgs\" там:

  3. вы создаете файл convert.bat с этой строкой внутри:

    FOR %%A IN (*.svg) DO "C:\Program Files (x86)\Inkscape\inkscape.exe" --export-png=%%A.png
    

    (укажите правильную папку вашей установки):

  4. откройте CMD как администратор! Для этого нажмите клавишу WIN, введите cmd, щелкните правой кнопкой мыши «cmd.exe» и выберите "Запуск от имени администратора".

  5. перейдите к своему «C:\svgs\» и введите convert.bat - все svg-файлы будут преобразованы в PNG.

  6. Используйте проводник Windows для поиска преобразованных файлов PNG. На моем ПК они были в папке: C:\Users\myname\AppData\Local\VirtualStore\Program Files (x86)\Inkscape\svgs

Надеюсь, это поможет.


Поскольку разрешение для командной строки можно было установить только фиксированным, насколько я мог видеть, в итоге я использовал инструмент InkscapeBatch. Там я мог бы установить DPI для увеличения всех изображений относительно.

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

После того, как вы нажмете "Готово", вам нужно нажать кнопку «Запустить пакетный конвертер ...» на панели инструментов:

3

InkscapeBatch делает работу на Windows. Требуется Inkscape.

2

Для преобразования SVG в PNG я обнаружил, что cairosvg (https://cairosvg.org/) работает лучше, чем ImageMagick. Шаги для установки и запуска всех файлов в вашем каталоге.

pip3 install cairosvg

Откройте оболочку python в каталоге, содержащем ваши файлы .svg, и запустите:

import os

for file in os.listdir('.'):
    name = file.split('.svg')[0]
    cairosvg.svg2png(url=name+'.svg',write_to=name+'.png') 

Это также гарантирует, что вы не перезаписываете свои оригинальные файлы .svg, но сохраните то же имя. Затем вы можете переместить все ваши файлы .png в другой каталог с помощью:

$ mv *.png [new directory]
1

После борьбы с этим в течение почти 2 часов я поселился в Inkscape. Поскольку мне нужно было конвертировать несколько файлов в разных разрешениях, я создал скрипт Powershell. С 106 SVG мой компьютер завис на 5 секунд, поэтому будьте осторожны при использовании этого.

# ENTER THE FULL PATH TO THE INKSCAPE EXECUTABLE
$inkscapeExe = "C:\Program Files\Inkscape\inkscape.exe"
# ENTER THE PATH TO THE FOLDER CONTAINING THE SVGs
$svgFolder = "C:\Images\SVG"
# ENTER THE DESIRED WIDTH
$width = 120
# ENTER THE DESIRED HEIGHT
$height = 120

$svgFiles = Get-ChildItem $svgFolder -Filter *.svg
foreach ($svgFile in $svgFiles)
{
    $inputParam  = $svgFile.FullName 
    $outputParam = "--export-png=" + $svgFile.FullName + "-" + $width + "x" + $height + ".png" 
    $widthParam  = "-w" + $width
    $heightParam = "-h" + $height

    & $inkscapeExe $inputParam $outputParam $widthParam $heightParam
}
1

Вы можете использовать следующее в Bash / Ubuntu для Windows, в папке с SVG. Однако кажется, что ImageMagick сначала растеризует, а затем изменяет размеры, что приводит к странным артефактам ...

find -name "*.svg" -exec convert {} -background none -density 300 -resize 256x256 -define icon:auto-resize -alpha remove -colors 256 {}.ico \;

Также посмотрите вот решение на основе Inscape, которое, кажется, работает хорошо (из другого потока, ссылка потеряна): mkdir temp; declare -a res=(16 24 32 48 64 128 256); for f in *.svg; do for r in "${res[@]}"; do inkscape -z -e temp/${f}${r}.png -w $r -h $r $f; done; resm=( "${res[@]/#/temp/$f}" ); resm=( "${resm[@]/%/.png}" ); convert "${resm[@]}" ${f%%.*}.ico; done; rm -rf temp;

0

Ответ Кая близок, но у меня не получилось. Однако, с несколькими небольшими изменениями, это сработало в первый раз:

  1. Скопируйте ваши SVG в удобное место
  2. Создайте текстовый файл в той же папке и переименуйте его в convert.bat
  3. Откройте convert.bat в вашем любимом текстовом редакторе и введите следующее:

FOR %%A IN (*.svg) DO "C:\Program Files\Inkscape\inkscape.exe" %%A --export-png=%%A.png

(Обратите внимание, что местоположение файла inkscape.exe должно совпадать с местоположением исполняемой программы на вашем компьютере; а секунда перед --export-png равна %%A - это конвертируемый файл SVG)

  1. Дважды щелкните convert.bat чтобы запустить его, и он должен отобразить результаты преобразований.

Обратите внимание, что вам может потребоваться обновить папку Windows, чтобы увидеть новые файлы, но все они должны быть созданы в том же месте, что и исходные SVG.

0

По какой-то причине мне не удалось заставить работать imagemagick или inkscape. У меня было всего 12 файлов для конвертации, я просто использовал этот сайт вручную: http://svgtopng.com/ работал с удовольствием.

0

Вот решение на основе ImageMagick для преобразования всех файлов SVG в данном каталоге в файлы ICO:

mogrify -format ico -density 1200 -background transparent -trim -resize 256x256 -gravity center -extent 256x256 -define icon:auto-resize *.svg

Объяснение:

  • mogrify: Как и convert , но позволяет вам обрабатывать несколько файлов в пакетном режиме.
  • -format ico: наш целевой формат файла. Создает файлы .ico вместо перезаписи исходного файла (как mogrify будет делать по умолчанию).
  • -density 1200: поскольку мы не можем указать целевой размер пикселя, в который ImageMagick должен растеризовать SVG (сначала он будет растеризован с плотностью по умолчанию, а затем масштабирован), мы растеризуем SVG с безумно высоким разрешением (1200 точек на дюйм), чтобы что изображение будет уменьшено до 256x256, а не увеличено.
  • -background transparent: фон будет отображаться как прозрачный.
  • -trim: удалить существующую границу вокруг изображения.
  • -resize 256x256: масштабировать изображение, гарантируя, что самая длинная сторона имеет 256px, сохраняя соотношение сторон.
  • -gravity center -extent 256x256: Увеличить холст, гарантируя, что короткая сторона также имеет 256px. Существующее изображение выровнено по центру. Это необходимо, потому что нам нужно квадратное изображение в качестве основы для файла ICO.
  • -define icon:auto-resize: включить в файл ICO не только изображение 256x256, но и все рекомендуемые уменьшенные разрешения (например, 32x32).
0

ImageMagick доступен для Windows и может конвертировать между SVG и PNG и ICO (среди прочих). Вы можете установить размер и другие атрибуты для выходного файла.

0

Я не смог найти ни одной команды, которая работала бы для запуска пакета, поэтому я заставил ее работать, создав список файлов и создав серию команд. Эти инструкции должны работать для всех версий Windows. Все инструкции по печатанию исключают цитаты и включают все между ними.

Для этого вам понадобится Inkscape, MS Excel или аналогичный редактор электронных таблиц и генератор списков. Здесь есть отличный генератор списков бесплатных программ:https://www.portablefreeware.com/?id=1171.

  • Жесткая ссылка, скопировать или переместить все файлы SVG в одну папку.
  • Создайте список файлов этой папки и экспортируйте в csv.
  • Откройте CSV в Excel и удалите все столбцы, кроме столбца имени файла. Также удалите заголовки столбцов, такие как [Путь] и сводный текст внизу.
  • Если имена файлов еще не во втором столбце, вырежьте и вставьте их туда.
  • В первой ячейке первого столбца введите inkscape, за которым следует пробел и путь к папке, в которой ваши SVG-файлы включают в себя обратную косую черту (например, «inkscape C:\SVG\»). Затем скопируйте эту ячейку, выделите все ячейки под ней, которые предшествуют имени файла, и вставьте так, чтобы все они имели одинаковый текст.
  • В третьем столбце введите --export-png = в первой ячейке, за которой следует папка назначения, в которую вы хотите их сохранить. Я просто использовал ту же папку. Чтобы синтаксис был правильным, обязательно добавьте пробел в начале, но оставьте остальной текст вместе (например, «--export-png = C:\PNG\»). Скопируйте и вставьте это для всех строк, как первый столбец
  • Скопируйте весь второй столбец и вставьте его в четвертый столбец. Выбрав четвертый столбец, нажмите Ctrl+H (Найти и заменить). В поле поиска введите «.svg». В поле замены введите «.png», затем выберите "Заменить все".

Если вы сделали это правильно, у вас должна быть одна строка для каждого имени файла, которая выглядит следующим образом:| inkscape C:\SVG\| Filename1.svg | --export-PNG = C:\PNG\| Filename1.png |

  • В первой ячейке пятого столбца введите «= сцепленный (a2, b2, c2, d2)». Это предполагает, что столбец заголовка не был удален. Номера ячеек в скобках должны соответствовать текущему номеру строки. Если ваше первое имя файла в B2, приведенная выше формула верна. Иначе правильно, имена ячеек в скобках соответствуют первой строке имени файла (например, a1, b1, c1 ...)
  • Скопируйте и вставьте эту ячейку, чтобы заполнить все под ней, как столбцы 1 и 3.
  • Теперь скопируйте весь пятый столбец и используйте Paste Special> Values, чтобы вставить текст, созданный формулами, в шестой столбец. Эта шестая колонка - ваши деньги. Скопируйте весь шестой столбец, откройте Блокнот и вставьте последний столбец в него. Если вы сделали это правильно, у вас будет одна командная строка для преобразования каждого из ваших файлов SVG в PNG.
  • Сохраните файл блокнота в каталоге Inkscape как пакетный файл. Когда откроется окно "Сохранить как", измените тип "Сохранить как" на "Все файлы" и сохраните его как файл .bat (например, «C:\Program Files\Inkscape\SVGBatch.bat»).
  • Осталось только перейти в эту папку и дважды щелкнуть только что сохраненный пакетный файл. Он должен открыть командную строку и конвертировать все файлы.

Надеюсь, что это делает чью-то жизнь проще. Джеймс

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .