Batch-Konvertierung von SVG-Bildern in die gewünschte Größe PNG oder ICO


26

Ich habe eine Reihe von SVG-Symbolen, die ich verwenden möchte, damit meine Anwendung in VB.Net 2010 entwickelt wird. Da SVG-Symbole nicht unterstützt werden, muss ich diese Symbole mit Vorzug in PNG oder ICO konvertieren Ausgabeauflösung. Ich habe ein solches Kommandozeilen-Tool für Ubuntu genannt gefunden rsvgconvert. Haben wir ein solches Tool auch für Windows?

Antworten:


12

ImageMagick verfügt über ein Befehlszeilentool, das für Linux und Windows (und andere) verfügbar ist. Das Konvertierungstool wird praktischerweise "Konvertieren" genannt. Hier sind einige Verwendungsdokumentationen .

Und hier können Sie ein Windows-Installationsprogramm herunterladen .


Sie können es auch über das Windows-Subsystem für Linux (WSL) apt install imagemagick
beziehen

(Dies gilt für Linux und möglicherweise für Windows.) Wenn Sie -verbose für Sofortnachrichten aktivieren, scheint es, als ob Sofortnachrichten selbst inkscape verwenden, um eine dazwischen liegende eps-Datei zu erstellen. Daher würde ich @ Zetahs Antwort vorschlagen
Northern-Bradley

Hier ist ein kleiner ImageMagick-basierter Konverter für Windows: fosshub.com/SVG2PNG.html Er ist alt (ab 2014), funktioniert aber immer noch und Sie müssen keine Dokumente lesen.
8.

20

ImageMagick sollte nicht sofort mit einer Stapelverarbeitung von Bildern verknüpft werden. Insbesondere in diesem Fall ist ImageMagick eine schlechte Lösung für die SVG-Konvertierung.

Versuchen Sie es besser mit Inkscape auf der Kommandozeile:

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


8
Warum ist inkscape besser als ImageMagick? Ich bin nicht anderer Meinung (oder einverstanden), bin nur neugierig auf weitere Details.
Sam

Der Grund dafür ist, dass imageMagick besser für png, jpg usw. geeignet ist, während inkscape besser für Vektorgrafiken geeignet ist (svg)
user93

1
So wie es aussieht, beantwortet dies nicht die Frage nach der Stapelkonvertierung , oder?
ODER Mapper

Während die Antwort funktioniert, besteht InkScape unter Windows darauf, einen fokussierenden Begrüßungsbildschirm mit einer Verzögerung anzuzeigen, wodurch es unmöglich wird, diesen im Batch-Modus im Hintergrund auszuführen.
Timwi

@ Timwi Das passiert hier nicht. Denken Sie daran, die -zOption zu verwenden.
24.

6

Die Befehlszeile funktionierte nicht sofort und ich wollte, dass 100 Dateien konvertiert werden. So habe ich es mit Windows 7 gemacht:

  1. Installieren Sie Inkscape - nicht das tragbare!

  2. Kopieren Sie alle Ihre SVG-Dateien in einen Ordner, zB "C: \ svgs \" dort:

  3. Sie erstellen eine convert.batDatei mit dieser Zeile in:

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

    (zeigen Sie auf den richtigen Ordner Ihrer Installation):

  4. Öffne das CMD als Admin! Drücken Sie dazu die WIN-Taste, geben Sie cmd ein, klicken Sie mit der rechten Maustaste auf "cmd.exe" und wählen Sie "Als Administrator ausführen".

  5. Navigieren Sie zu Ihrem "C: \ svgs \" und geben Sie ein convert.bat - Alle svg-Dateien werden in PNGs konvertiert.

  6. Verwenden Sie den Windows Explorer, um nach den konvertierten PNG-Dateien zu suchen. Auf meinem PC befanden sie sich im Ordner:C:\Users\myname\AppData\Local\VirtualStore\Program Files (x86)\Inkscape\svgs

Ich hoffe, das hilft.


Da die Auflösung für die Befehlszeile nur so weit wie möglich festgelegt werden konnte, habe ich das InkscapeBatch-Tool verwendet . Dort könnte ich die DPI so einstellen, dass alle Bilder relativ vergrößert werden.

Sie müssen die richtigen Einstellungen angeben, sonst funktioniert es nicht. Folgendes habe ich getan:

Bildbeschreibung hier eingeben

Bildbeschreibung hier eingeben

Nachdem Sie auf "Fertig stellen" geklickt haben, müssen Sie in der Symbolleiste auf die Schaltfläche "Stapelkonverter starten ..." klicken:

Bildbeschreibung hier eingeben


1
Ihrem Batch-Befehl fehlt wahrscheinlich ein anderer %%A(als Eingabedateiname). Warum sollte es nur im Admin-Modus funktionieren?
ODER Mapper

Wie ist das besser als mit ImageMagick?
Reinierpost

Leider scheint dieser Link auch gestorben zu sein. (August 2017)
Ideogramm

@Ideogram Ich habe einen anderen Anbieter für den Download gefunden. softsea.com/download/InkscapeBatch.html
Kai Noack

Zum Festlegen der dpi müssen Sie diese Option hinzufügen, --export-dpi=100wobei 100 der Wert von dpi ist
Xsmael


3

Für die Konvertierung von SVG in PNG fand ich, dass cairosvg ( https://cairosvg.org/ ) eine bessere Leistung als ImageMagick erbringt. Installations- und Ausführungsschritte für alle Dateien in Ihrem Verzeichnis.

pip3 install cairosvg

Öffnen Sie eine Python-Shell in dem Verzeichnis, das Ihre .svg-Dateien enthält, und führen Sie Folgendes aus:

import os

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

Dadurch wird auch sichergestellt, dass Sie Ihre ursprünglichen .svg-Dateien nicht überschreiben, sondern den gleichen Namen behalten. Sie können dann alle Ihre PNG-Dateien in ein anderes Verzeichnis verschieben:

$ mv *.png [new directory]

Diese Antwort ist die einzige, die für meine ziemlich große SVG-Datei funktioniert hat, danke !!!
Ben Sandeen

1

Nachdem ich fast 2 Stunden damit gerungen hatte, entschied ich mich für Inkscape. Da ich eine Reihe von Dateien in vielen verschiedenen Auflösungen stapelweise konvertieren musste, habe ich ein Powershell-Skript erstellt. Bei 106 SVGs ist mein Computer für ca. 5 Sekunden eingefroren. Seien Sie also vorsichtig, wenn Sie diese verwenden.

# 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

Sie können Folgendes in Bash / Ubuntu für Windows in dem Ordner verwenden, in dem sich die SVGs befinden. Es scheint jedoch, dass ImageMagick zuerst rastert und dann die Größe ändert, was zu seltsamen Artefakten führt.

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

Siehe auch die Inscape-basierte Lösung, die anscheinend gut funktioniert (von einem anderen Thread, Link verloren): 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 Ich habe es mit inkscape in einer sehr vereinfachten Version verwendet. find -name "*.svg" -exec inkscape {} -e {}.png \;Obwohl ich diese Version bevorzuge: ls | grep ".svg" | xargs -I file inkscape file -e file.pngDa die Dateien alphabetisch verarbeitet werden, ist dies bei Verwendung vonfind
loved.by.Jesus

0

ImageMagick ist für Windows verfügbar und kann unter anderem zwischen SVG und PNG und ICO konvertieren. Sie können die Größe und andere Attribute für die Ausgabedatei festlegen.


0

Ich konnte keinen einzigen Befehl finden, der zum Ausführen eines Stapels verwendet werden konnte, sodass ich eine Dateiliste und eine Reihe von Befehlen erstellen konnte. Diese Anweisungen sollten für alle Windows-Versionen funktionieren. Alle Schreibanweisungen schließen Zitate aus und schließen alles dazwischen ein.

Dazu benötigen Sie Inkscape, MS Excel oder einen vergleichbaren Tabelleneditor und einen Listengenerator. Hier gibt es einen tollen kleinen Freeware-Listengenerator: https://www.portablefreeware.com/?id=1171

  • Verknüpfen, kopieren oder verschieben Sie alle SVG-Dateien in einen Ordner.
  • Generieren Sie eine Dateiliste dieses Ordners und exportieren Sie sie nach csv.
  • Öffnen Sie die CSV in Excel und löschen Sie alle Spalten mit Ausnahme der Dateinamensspalte. Löschen Sie auch Spaltenüberschriften wie [Pfad] und Zusammenfassungstext unten.
  • Wenn die Dateinamen nicht bereits in der zweiten Spalte enthalten sind, können Sie sie dort ausschneiden und einfügen.
  • In der ersten Zelle der ersten Spalte geben Sie inkscape gefolgt von einem Leerzeichen und dem Ordnerpfad ein, in dem Ihre SVG-Dateien einen abschließenden Backslash enthalten (z. B. "inkscape C: \ SVG \"). Kopieren Sie dann diese Zelle, markieren Sie alle Zellen darunter, die vor einem Dateinamen stehen, und fügen Sie sie ein, damit alle denselben Text haben.
  • Geben Sie in der dritten Spalte --export-png = in die erste Zelle ein, gefolgt von dem Zielordner, in dem Sie sie speichern möchten. Ich habe gerade denselben Ordner verwendet. Damit die Syntax korrekt ist, müssen Sie am Anfang ein Leerzeichen einfügen, aber den Rest des Textes zusammenhalten (z. B. "--export-png = C: \ PNG \"). Kopieren Sie dies für alle Zeilen und fügen Sie es wie in der ersten Spalte ein
  • Kopieren Sie die gesamte zweite Spalte und fügen Sie sie in die vierte Spalte ein. Wenn diese vierte Spalte ausgewählt ist, drücken Sie Strg + H (Suchen & Ersetzen). Wählen Sie im Feldtyp "Suchen" die Option ".svg" und im Feldtyp "Ersetzen" die Option "Alle ersetzen".

Wenn Sie dies richtig gemacht haben, sollten Sie für jeden Dateinamen eine Zeile haben, die so aussieht: | inkscape C: \ SVG \ | Dateiname1.svg | --export-png = C: \ PNG \ | Dateiname1.png |

  • In der ersten Zelle der fünften Spalte geben Sie "= verketten (a2, b2, c2, d2)" ein. Dies setzt voraus, dass die Kopfspalte nicht gelöscht wurde. Die Zellennummern in Klammern sollten mit der aktuellen Zeilennummer übereinstimmen. Wenn Ihr erster Dateiname in B2 ist, ist die obige Formel korrekt. Ansonsten richtig, die Zellnamen in Klammern stimmen mit der Zeile des ersten Dateinamens überein (zB a1, b1, c1 ...)
  • Kopieren Sie diese Zelle und fügen Sie sie ein, um sie wie die Spalten 1 und 3 vollständig auszufüllen.
  • Kopieren Sie nun die gesamte fünfte Spalte und fügen Sie mit Paste Special> Values ​​den von den Formeln erzeugten Text in die sechste Spalte ein. Diese sechste Spalte ist Ihr Geldschuss. Kopieren Sie die gesamte sechste Spalte, öffnen Sie den Editor und fügen Sie die letzte Spalte ein. Wenn Sie dies richtig gemacht haben, haben Sie eine Befehlszeile, um jede Ihrer SVG-Dateien in PNGs zu konvertieren.
  • Speichern Sie die Notepad-Datei als Batch-Datei im Inkscape-Verzeichnis. Wenn das Fenster "Speichern unter" geöffnet wird, ändern Sie den Dateityp in "Alle Dateien" und speichern Sie die Datei als .bat-Datei (z. B. "C: \ Programme \ Inkscape \ SVGBatch.bat").
  • Sie müssen nur in diesen Ordner gehen und auf die gerade gespeicherte Batch-Datei doppelklicken. Es sollte eine Eingabeaufforderung öffnen und alle Dateien konvertieren.

Hoffe, dass jemand das Leben leichter macht. James


0

Kais Antwort ist nah, hat aber bei mir nicht funktioniert. Mit ein paar kleinen Änderungen funktionierte dies jedoch beim ersten Mal einwandfrei:

  1. Kopieren Sie Ihre SVGs an einen praktischen Ort
  2. Erstellen Sie eine Textdatei im selben Ordner und benennen Sie sie um convert.bat
  3. Öffnen Sie convert.batin Ihrem bevorzugten Text- / Code-Editor und geben Sie Folgendes ein:

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

(Beachten Sie, dass der inkscape.exeSpeicherort mit dem Speicherort des ausführbaren Programms auf Ihrem PC übereinstimmen sollte. Der zweite zuvor --export-pngist %%A- das ist die SVG-Datei, die konvertiert wird.)

  1. Doppelklicken Sie, convert.batum es auszuführen, und es sollte die Ergebnisse der Konvertierungen wiedergeben.

Beachten Sie, dass Sie möglicherweise Ihren Windows-Ordner aktualisieren müssen, um die neuen Dateien anzuzeigen. Sie sollten jedoch alle am selben Speicherort wie die ursprünglichen SVGs erstellt worden sein.


0

Konnte aus irgendeinem Grund weder imagemagick noch inkscape dazu bringen, für mich zu arbeiten. Ich hatte nur 12 Dateien zum Konvertieren, habe diese Seite nur manuell verwendet: http://svgtopng.com/ hat eine Freude gemacht.


0

Hier ist eine ImageMagick-basierte Lösung, um alle SVG-Dateien in einem bestimmten Verzeichnis in ICO-Dateien zu konvertieren:

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

Erläuterung:

  • mogrify: Wie convert, aber Sie können mehrere Dateien stapelweise verarbeiten.
  • -format ico: Unser Zieldateiformat. Erstellt .icoDateien, anstatt die Originaldatei zu überschreiben (wie es mogrify standardmäßig tun würde).
  • -density 1200: Da wir keine Zielpixelgröße angeben können, auf die ImageMagick das SVG rastern soll (es würde zuerst mit einer Standarddichte rastern und dann skalieren), rastern wir das SVG mit einer wahnsinnig hohen Auflösung (1200 dpi), um sicherzustellen, dass das Bild angezeigt wird wird verkleinerter zu 256x256 statt Upscaling.
  • -background transparent: Der Hintergrund wird transparent dargestellt.
  • -trim: Vorhandenen Rand um das Bild entfernen.
  • -resize 256x256: Skalieren Sie das Bild so, dass die längste Seite 256 Pixel hat und das Seitenverhältnis beibehalten wird.
  • -gravity center -extent 256x256: Vergrößern Sie die Leinwand, und achten Sie darauf, dass die kurze Seite ebenfalls 256 Pixel hat. Das vorhandene Bild ist zentriert. Dies ist notwendig, da wir ein quadratisches Bild als Grundlage für eine ICO-Datei benötigen.
  • -define icon:auto-resize: Nehmen Sie nicht nur das 256x256-Bild, sondern auch alle empfohlenen verkleinerten Auflösungen (z. B. 32x32) in die ICO-Datei auf.
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.