У меня есть набор значков SVG, которые я хотел бы использовать для разработки приложения в VB.Net 2010, и, поскольку он не поддерживает обработку значков SVG, мне необходимо преобразовать эти значки в PNG или ICO, с предпочтением выходное разрешение. Я нашел такой инструмент командной строки для Ubuntu, который называется rsvgconvert
. Есть ли у нас такой инструмент для Windows?
12 ответов
ImageMagick не должен сразу связываться с какой-либо пакетной задачей с изображениями. Особенно в этом случае, когда ImageMagick является плохим решением для конвертации SVG.
Лучше попробуйте Inkscape в командной строке:
inkscape in.svg --export-png=out.png
ImageMagick имеет инструмент командной строки, который доступен для Linux и Windows (и других). Инструмент конвертера обычно называется "конвертировать". Вот некоторая документация по использованию.
И вот где вы можете получить установщик Windows.
Командная строка не работала из коробки, плюс я хотел, чтобы 100 файлов были конвертированы. Вот как я сделал это работает с Windows 7:
установить Inkscape - не портативный!
Скопируйте все ваши SVG-файлы в одну папку, например, "C:\svgs\" там:
вы создаете файл
convert.bat
с этой строкой внутри:FOR %%A IN (*.svg) DO "C:\Program Files (x86)\Inkscape\inkscape.exe" --export-png=%%A.png
(укажите правильную папку вашей установки):
откройте CMD как администратор! Для этого нажмите клавишу WIN, введите cmd, щелкните правой кнопкой мыши «cmd.exe» и выберите "Запуск от имени администратора".
перейдите к своему «C:\svgs\» и введите
convert.bat
- все svg-файлы будут преобразованы в PNG.Используйте проводник Windows для поиска преобразованных файлов PNG. На моем ПК они были в папке:
C:\Users\myname\AppData\Local\VirtualStore\Program Files (x86)\Inkscape\svgs
Надеюсь, это поможет.
Поскольку разрешение для командной строки можно было установить только фиксированным, насколько я мог видеть, в итоге я использовал инструмент InkscapeBatch. Там я мог бы установить DPI для увеличения всех изображений относительно.
Вам нужно указать правильные настройки, иначе он не будет работать. Вот что я сделал:
После того, как вы нажмете "Готово", вам нужно нажать кнопку «Запустить пакетный конвертер ...» на панели инструментов:
InkscapeBatch делает работу на Windows. Требуется Inkscape.
Для преобразования 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]
После борьбы с этим в течение почти 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
}
Вы можете использовать следующее в 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;
Ответ Кая близок, но у меня не получилось. Однако, с несколькими небольшими изменениями, это сработало в первый раз:
- Скопируйте ваши SVG в удобное место
- Создайте текстовый файл в той же папке и переименуйте его в
convert.bat
- Откройте
convert.bat
в вашем любимом текстовом редакторе и введите следующее:
FOR %%A IN (*.svg) DO "C:\Program Files\Inkscape\inkscape.exe" %%A --export-png=%%A.png
(Обратите внимание, что местоположение файла inkscape.exe
должно совпадать с местоположением исполняемой программы на вашем компьютере; а секунда перед --export-png
равна %%A
- это конвертируемый файл SVG)
- Дважды щелкните
convert.bat
чтобы запустить его, и он должен отобразить результаты преобразований.
Обратите внимание, что вам может потребоваться обновить папку Windows, чтобы увидеть новые файлы, но все они должны быть созданы в том же месте, что и исходные SVG.
По какой-то причине мне не удалось заставить работать imagemagick или inkscape. У меня было всего 12 файлов для конвертации, я просто использовал этот сайт вручную: http://svgtopng.com/ работал с удовольствием.
Вот решение на основе 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).
ImageMagick доступен для Windows и может конвертировать между SVG и PNG и ICO (среди прочих). Вы можете установить размер и другие атрибуты для выходного файла.
Я не смог найти ни одной команды, которая работала бы для запуска пакета, поэтому я заставил ее работать, создав список файлов и создав серию команд. Эти инструкции должны работать для всех версий 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»).
- Осталось только перейти в эту папку и дважды щелкнуть только что сохраненный пакетный файл. Он должен открыть командную строку и конвертировать все файлы.
Надеюсь, что это делает чью-то жизнь проще. Джеймс