Befehlszeilenanwendung zum Konvertieren von SVG in PNG unter Mac OS X


167

Gibt es Befehlszeilenprogramme, die eine SVG in PNG konvertieren können und unter Mac OS X ausgeführt werden?

Edit : Dylan B hatte eine gute Antwort mit ImageMagick. Um ImageMagick mit SVG-Unterstützung unter Mac OS X mit MacPorts zu installieren, gehen Sie wie folgt vor

port install imagemagick +rsvg

2
Ich fand einen Weg , wenn Sie Google Chrome haben ... und keine Notwendigkeit , irgendwelche anderen Dinge zu installieren: superuser.com/questions/134679/...
nopole

cairosvg.org funktioniert für python3 und scheint kein Problem zu haben. pip3 install cairosvg
JayRizzo

Antworten:


234

Oder ohne etwas zu installieren:

qlmanage -t -s 1000 -o . picture.svg 

Es wird picture.svg.png mit einer Breite von 1000 Pixeln erzeugt.

Ich habe es nur unter OS X 10.6.3 getestet.


38
Leider schneidet dies Bilder zu einem Quadrat.
Martijn Pieters

7
Ah, qlmanage -tgibt die von Quick Look (im Finder usw.) verwendete Miniatur an. Clevere Idee. Leider können diese Thumbnails fehlerhaft sein, insbesondere wenn es sich um Text handelt.
ShreevatsaR

7
Dies erzeugt Bilder mit der SVG-Datei im 1. Quadranten. Automatische Zuschneidung nicht möglich. Ich versuche, Dateien aus einem Nomen-Projekt zu konvertieren. Ich wünschte, das würde funktionieren.
Alex Cook

7
Diese Lösung berücksichtigt nicht die Transparenz. Das Tool rsvg-convertin @ ahtis Antwort hat schon früher für mich funktioniert.
BenR

3
Das Setzen von Breiten- und Höhenparametern nach der -sOption hat bei mir nicht funktioniert. Beschneidet es immer noch auf ein Quadrat. Sehr frustrierend!
Erik van der Neut

107

Ich fand, dass für mich das beste Werkzeug für den Job ist rsvg-convert.

Es kann im Gebräu gefunden werden brew install librsvgund wird wie folgt verwendet:

rsvg-convert -h 32 icon.svg > icon-32.png

(In diesem Beispiel wird ein 32px hoher PNG erstellt. Die Breite wird automatisch bestimmt.


Dies ist die einzige, die für mich auf Mavericks und commons.wikimedia.org/wiki/…
Aron Ahmadia

Tatsächlich funktionierte dies, während ImageMagick convertFehler ausgegeben und eine komplexe SVG
Brice

7
Dies ist mit Abstand die beste Lösung, die ich für OS X Yosemite +1 gefunden habe!
Greg Martin

Dies schlug für einige meiner SVGs seltsamerweise fehl. Die qlmanageAntwort hat für alle geklappt, aber einen weißen Hintergrund eingefügt, den ich nicht will.
Sudo

1
Mit rsvg-converthatte die resultierende .png-Datei die richtigen Abmessungen, aber das Bild wurde schwarz anstatt der ursprünglichen Farben. Mit qlmanagedem Bild wird auf ein Quadrat beschnitten. Immer noch auf der Suche nach einer Lösung :-(
Erik van der Neut

43

ImageMagick ist ein äußerst vielseitiger Befehlszeilen-Bildeditor, der es wahrscheinlich mit Photoshop aufnehmen würde, wenn er eine grafische Benutzeroberfläche hätte. Aber wer braucht das schon. : P

So etwas wie das Folgende würde nach der Installation eine .svg-Datei in eine .png-Datei konvertieren:

$ convert picture.svg picture.png

Die ursprüngliche .svg wird nicht gelöscht.


Es hat eine Art GUI, in display.
Ignacio Vazquez-Abrams

1
Als ich ImageMagick mit Fink installierte, konnte ich svg nicht in png konvertieren - es gab einige Fehler. Es stellte sich heraus, dass ich auch librsvg2-bin installieren musste.
21.

Wenn librsvg2-bin nicht installiert ist (wie unter OS X), schlägt dies fehl. Konnte keine Möglichkeit finden, dies unter OS X zu installieren.
John Sheehan

3
Dies funktioniert nicht gut, wenn Sie die SVG-Größe ändern möchten, da dadurch unscharfe Bilder erzeugt werden.
Behrang

3
Es werden auch nicht alle SVG-Dateien korrekt konvertiert. Zumindest hat qlmanage alle Teile des Bildes erhalten.
Johan

28

Inkscape mit seiner Commandline-Oberfläche liefert für mich die besten Ergebnisse:

/Applications/Inkscape.app/Contents/Resources/bin/inkscape --export-png output.png -w 1024 -h 768 input.svg

Gut ist, dass Sie die genaue Pixelgröße des resultierenden Bildes festlegen können, ohne sich mit der Dichte herumschlagen zu müssen.


Das funktioniert für mich! - Ich habe eine größere SVG erstellt mit Inkscape
Matheszabi

Dies ist die einzige Methode, die mein handgeschriebenes SVG richtig gerendert hat
Griffin,

Convert generiert keine guten PNG-Dateien aus SVG. Inkscape ist der beste Weg, den ich bisher gefunden habe.
ol_v_er

Das funktioniert bei mir, schafft aber extrem unscharfe Dateien.
Marcin

3
Ich hatte ein Problem beim Auffinden von Dateien, also starte es alsinkscape $(pwd)/logo.svg --export-png $(pwd)/logo.png
Andrei

16

OK, ich habe eine einfache Möglichkeit gefunden, dies auf dem Mac zu tun, wenn Sie über Google Chrome verfügen.

In einem Satz wird das svgBild auf einer Webseite angezeigt (muss in einer htmlDatei enthalten sein). Klicken Sie mit der rechten Maustaste auf das Bild und wählen Sie "Bild kopieren" und fügen Sie es in die Vorschau-App ein.

Schritte:

  1. Laden Sie die svgDatei herunter oder speichern Sie sie auf Ihrer Festplatte.somefile.svg
  2. Erstellen Sie jetzt im selben Ordner eine HTML-Datei tmp.html, die diese Zeile enthält:<img src="somefile.svg">
  3. Öffnen Sie nun diese HTML-Datei in Google Chrome
  4. Sie sollten das Bild sehen. Klicken Sie jetzt mit der rechten Maustaste auf das Bild und wählen Sie "Bild kopieren"
  5. Gehen Sie zu Macs Preview App und wählen Sie "File -> New from Clipboard"
  6. Nun ist File -> Savedie Datei und Sie haben die pngDatei. (oder andere Dateitypen).

Dies wird auf dem aktuellen Chrome (Version 48.0) unter Mac OS X El Capitan getestet.

Update : Ich bin nicht sicher, ob es an einer von Google Chrome auferlegten Einschränkung liegt. Ich versuche gerade eine SVG-Datei mit Chrome 58.0 und erhalte ein winziges Bild von der obigen Methode. Wenn Sie diesen Fall auch sehen, können Sie auch verwenden

<img src="somefile.svg" style="height: 82vh; margin-top: 9vh; margin-left: 9vh">

und Sie haben ein Bild auf dem Bildschirm, das ausreicht, um einen Screenshot zu erstellen - zum Beispiel mit CmdShift4oder CmdShift3auf dem Mac. Stellen Sie sicher, dass Sie die Größe Ihres Chrome-Fensters auf die auf dem Bildschirm maximal zulässige Größe einstellen.


Schlaue Lösung!
Manu

1
Dies führt für mich tatsächlich zu den besten Ergebnissen, da es genau so wiedergegeben wird wie der Browser.
Jason Haslam

Das resultierende Bild war für mich eine sehr schlechte Auflösung
Michael

Genial :) aber für sehr große SVGs ist die Auflösung des resultierenden Bildes zu niedrig, wie @Michael erwähnte.
Waldyrious

5

Wenn Sie viele auf einmal erledigen möchten, können Sie:

mogrify -format png *.svg

Es gibt auch Optionen zum Ändern der Größe usw. im laufenden Betrieb.


3
mogrifyist auch Teil von ImageMagick.
ShreevatsaR

Funktioniert super, aber brutal langsam.
Meekohi

-1? Jemand findet das nicht hilfreich? Was ist der Fehler?
DefenestrationDay

2
Ich bin nicht derjenige, der die Bewertung herabgesetzt hat, aber es ist erwähnenswert, dass ImageMagick svg dumm in ein Rasterbild beliebiger Größe konvertiert, bevor die Größe geändert wird, was zu einer verschwommenen Ausgabe führt.
Dae

4

Versuchen Sie Apache Batik .

java -jar batik-rasterizer.jar FILES

Es unterstützt auch die Stapelkonvertierung und hat viele andere nützliche Optionen.


4

Ich habe svgexport mit node / npm dafür gemacht, es ist plattformübergreifend und kann so einfach sein wie:

svgexport input.svg output.png

Dies war bei weitem das am einfachsten zu verwendende und zu merkende. Auch der einzige, der in meinem Fall ein korrektes Ergebnis lieferte.
Marko Grešak

Die daraus resultierende Auflösung war nicht so toll für mich.
Michael

3

Sie können auch Phantombilder verwenden , um das SVG zu rendern. Der Vorteil ist, dass es wie ein Browser gerendert wird, da es sich im Grunde um ein kopfloses WebKit handelt.

Sobald Sie es herunterladen müssen Sie PhantomJS (binär) und die rasterizer.js Datei aus dem Ordner Beispiele.

phantomjs examples/rasterize.js Tiger.svg out.png

1
Als Referenz kann dies mit installiert werden brew cask install phantomjs. In meiner Installation befand sich der Beispielordner im Pfad /usr/local/Caskroom/phantomjs/2.1.1/phantomjs-2.1.1-macosx/examples/.
Waldyrious

2

Das habe ich benutzt:

brew install imagemagick --with-librsvg

Führen Sie dann die folgenden Befehle aus:

find . -type f -name "*.svg" -exec bash -c 'convert $0 $0.png' {} \; rename 's/svg\.png/png/' *

Ich hoffe es hilft.


1

Ich benutze diesen Befehl auf meinem Linux. Es sollte auch für Sie funktionieren.

mogrify +antialias -density 2000 -verbose -format png *.svg

Ich habe gelernt, dass ohne das Argument "-density" die Bitmap sehr pixelig wäre. Ändern Sie den Dichtewert entsprechend Ihren Anforderungen.


2
Selbst mit der Dichte erzeugt die Konvertierung kein Bild, das so scharf ist wie ein Vektorbild. Versuchen Sie stattdessen Apache Batik.
Behrang

1

Der Konvertierungsbefehl von ImageMagick, der einige andere Parameter verwendet, hat mir geholfen. Hier ist meine Batch-Bash-Skriptlösung, die die Aufgabe auf mehrere Prozesse verteilt, um alle Ihre Kerne zu nutzen! Ändern Sie nach Bedarf.

batchConvertToSVG.sh (nimmt die Anzahl der Prozesse als Argument):

end=$(( $1 - 1 ))
for i in `seq 0 $end`;
        do
            echo Spawning helper $i of $end
                ./convertToSvgHelper.sh $i $1 &
        done 

convertToSvgHelper.sh:

n=$1
for file in ./*.svg; do
   filename=${file%.svg}
   echo converting file named $filename
   test $n -eq 0 && convert -format png -resize 74 -background transparent -density 600 $file $filename.png
   n=$((n+1))
   n=$((n%$2))
done

0

Wie bereits erwähnt, macht ImageMagick den Trick. Ich wollte nur einen Punkt für GraphicsMagick hinzufügen , eine alte Abzweigung von ImageMagick, die einige Verbesserungen aufweist (und bei der Installation über Fink die Abhängigkeit deutlich verringert).


0

Sie können eine Stapelkonvertierung für einen gesamten Ordner mit SVG-Dateien in PNG durchführen. Ich habe die Inkscape-Befehlszeilenschnittstelle verwendet, um PNG-Dateien mit einer Breite von 80 Pixel zu erstellen.

find ~/desktop/toconvert '*.svg' -exec /Applications/Inkscape.app/Contents/Resources/bin/inkscape -z -w 80 -e "{}".png "{}" \;

png wird unter dem ursprünglichen Namen * .png gespeichert


0

Noch eine andere Methode, ohne etwas zu installieren. Nicht in der Kommandozeile.

  1. Öffnen Sie die SVG-Datei in Safari.
  2. Drücken Sie Alt-Befehl-I, um den Inspektor zu öffnen.
  3. Klicken Sie mit der rechten Maustaste auf das <svg>Tag und wählen Sie "Screenshot erfassen". (Beachten Sie, dass Sie das Bild nicht vergrößern dürfen.)

PS Um das .svg-Bild zu vergrößern, wenn es zu klein ist, öffnen Sie die .svg-Datei im Texteditor und hängen Sie sie 0an jede Zahl mit Ausnahme des Metaattributs an . Dies kann durch eine globale Regex-Ersetzung von (\d+)bis erfolgen $10, wobei $1der Platzhalter beispielsweise als Rückverweis dient.


Sie sollten wahrscheinlich erwähnen, dass dies fast dasselbe ist wie die  Antwort von 太極 太極 無極 而 而 .
Scott,

-1

wkhtmltoimage (aus dem Projekt wkhtmltopdf) hat dies gut umgesetzt:

wkhtmltoimage --zoom 2 foo.svg foo.png

ImageMagick rendert CJK-Zeichen auf meinem Mac als leer.


Während dieser Link die Frage beantworten kann, ist es besser, die wesentlichen Teile der Antwort hier einzuschließen und den Link als Referenz bereitzustellen. Nur-Link-Antworten können ungültig werden, wenn sich die verlinkte Seite ändert. - Aus der Bewertung
Blackwood

@Blackwood gut, aktualisiert.
Georgexsh
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.