Пакетне перетворення SVG-зображень у потрібний розмір PNG або ICO


26

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

Відповіді:


12

ImageMagick має інструмент командного рядка, який доступний для Linux та Windows (та інших). Інструмент перетворювача зручно називати "конвертувати". Ось деяка документація щодо використання .

І ось тут можна отримати інсталятор Windows .


Ви також можете отримати його через підсистему Windows для Linux (WSL), зapt install imagemagick
антоні

(це стосується Linux, може стосуватися Windows), якщо ви ввімкнете -verbose на чат, то, схоже, чат сам використовує Inkscape для створення проміжного файлу eps. Тому я хотів би запропонувати @ відповідь zetah по
північного-Bradley

Ось невеликий конвертер на основі ImageMagick для Windows: fosshub.com/SVG2PNG.html Старий (з 2014 року), але все ще працює, і вам не потрібно читати жодних документів.
8день,

20

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

Краще спробуйте Inkscape у командному рядку:

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


8
Чому ви вважаєте, що Inkscape кращий за ImageMagick? Я не погоджуюся (або не згоден), просто цікаво більше деталей.
Сем

Причина, що imageMagick підходить для кращої обробки PNG, jpg тощо. У той час як Inkscape краще підходить для обробки векторних зображень (svg)
user93

1
Наразі це не відповідає на питання про пакетне перетворення, чи не так?
АБО Mapper

Хоча відповідь працює, у Windows InkScape наполягають на тому, щоб показувати екран із запізненням, що захоплює фокус, із запізненням, що унеможливлює запуск цього режиму у пакетному режимі у фоновому режимі.
Тімві

@Timwi Це не відбувається тут. Просто пам’ятайте, щоб використовувати -zваріант.
Свиш

5

Командний рядок не вийшов з поля, плюс я хотів перетворити 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, щоб порівняно збільшити всі зображення.

Потрібно вказати правильні налаштування або це не спрацює. Ось що я зробив:

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

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

Після натискання кнопки "Готово" потрібно натиснути кнопку "Запустити конвертер пакетів ..." на панелі інструментів:

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


1
У вашій пакетній команді, мабуть, не вистачає іншої %%A(як ім'я вхідного файлу). Крім того, чому ви вважаєте, що він повинен працювати лише в режимі адміністратора?
АБО Mapper

То як це краще, ніж використовувати ImageMagick?
reinierpost

На жаль, це посилання, здається, теж померло. (серпень 2017)
Ідеограма

@Ideogram Я знайшов іншого постачальника завантаження. softsea.com/download/InkscapeBatch.html
Кай Ноак

для вказівки dpi потрібно додати цей параметр, --export-dpi=100де 100 - го значення dpi
Xsmael


3

Для перетворення 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]

Ця відповідь є єдиною, яка працювала для мого досить великого SVG-файлу, дякую !!!
Бен Сандін

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
}

Шахта застигла більше декількох секунд. &Оператор запускає новий процес і триває відразу, так що цей сценарій буде створювати так багато нових процесів inkscape.exe , як у вас є файли SVG. Виявляється, це робить ваш комп’ютер досить повільним на деякий час.
Рорі

Якщо ви покладете | Out-Nullв кінець рядка, який починається з &нього, ви змусите запускати команду inkscape.exe по черзі, що для мене працює набагато краще.
Рорі

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;


1
+1 Я використовував це з Inkscape у дуже спрощеній версії, find -name "*.svg" -exec inkscape {} -e {}.png \;хоча я віддаю перевагу цій версії: ls | grep ".svg" | xargs -I file inkscape file -e file.pngтому що файли обробляються в алфавітному порядку - це не так, коли використовуєтьсяfind
loved.by.Jesus


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 \ | Ім'я файлу1.svg | --export-png = C: \ PNG \ | Назва файлу1.png |

  • У першій комірці п'ятого стовпця введіть "= concatenate (a2, b2, c2, d2)". Це передбачає, що стовпець заголовка не видалено. Номери комірок в дужках повинні відповідати поточному номеру рядка. Якщо ваше перше ім'я файлу є B2, наведена вище формула є точною. В іншому випадку виправте, імена комірок у дужках збігаються з рядком першого імені файлу (наприклад, a1, b1, c1 ...)
  • Скопіюйте та вставте цю клітинку, щоб заповнити всі під нею так само, як стовпці 1 та 3.
  • Тепер скопіюйте цілий п’ятий стовпчик і скористайтеся Спеціальним вставленням> Значення, щоб вставити текст, створений формулами, у шостий стовпець. Ця шоста колонка - це ваша грошова допомога. Скопіюйте весь шостий стовпець, відкрийте Блокнот і вставте в нього останній стовпець. Якщо ви зробили це правильно, у вас буде один командний рядок для перетворення кожного з ваших файлів svg в png.
  • Збережіть файл «Блокнот» у каталозі Inkscape як пакетний файл. Коли відкриється вікно "Зберегти як", змініть "Зберегти як" на "Усі файли" і збережіть його як .bat файл (наприклад, "C: \ Program Files \ Inkscape \ SVGBatch.bat"
  • Залишилося лише зайти в цю папку та двічі клацнути на щойно збереженому пакетному файлі. Він повинен відкрити командний рядок і перетворити всі файли.

Сподіваюся, що комусь полегшує життя. Джеймс


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 файли замість того, щоб перезаписувати вихідний файл (як могфіфікувати за замовчуванням).
  • -density 1200: Оскільки ми не можемо вказати цільовий розмір пікселя, до якого ImageMagick повинен растровувати SVG (спочатку він буде растеризований з щільністю за замовчуванням, а потім масштабом), ми растровуємо SVG з шалено високою роздільною здатністю (1200 dpi), щоб переконатися, що зображення буде зменшено масштаб до 256x256 замість збільшеного масштабу.
  • -background transparent: Фон буде наданий як прозорий.
  • -trim: Видаліть наявну межу навколо зображення.
  • -resize 256x256: Масштабуйте зображення, гарантуючи, що найдовша сторона має 256 пікселів, зберігаючи пропорцію.
  • -gravity center -extent 256x256: Збільшити полотно, гарантуючи, що у короткої сторони також є 256 пікселів. Існуюче зображення розташоване в центрі. Це необхідно, тому що нам потрібне квадратне зображення як основа для ICO-файлу.
  • -define icon:auto-resize: Включіть у файл ICO не тільки зображення 256x256, але й усі рекомендовані роздільні розміри (наприклад, 32x32).

0

Більшість наведених тут відповідей ігнорують потрібну розмірну частину питання. Я не міг отримати задовольняючих результатів, використовуючи convert"збільшення масштабу" SVG. inkscapeробить кращу роботу, а також зберігає прозорість фону.

Залежно від випадку використання, використовуйте один із наступних варіантів:

  1. експорт за вказаною DPI: inscape in.svg -d 300 -e out.png
  2. експорт із заданою шириною (підтримка співвідношення сторін): inscape in.svg -w 800 -e output.png
  3. експорт на задану висоту (підтримка співвідношення сторін): inscape in.svg -h 600 -e output.png

Зауважте, що вказівка ​​як ширини, так і висоти не зберігає співвідношення сторін.

Щоб конвертувати одразу багато файлів, відрегулюйте наступне bash:

for f in *.svg; do
  inkscape $f -d 300 -e ${f%.*}.png
done
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.