Ich habe eine SVG-Datei mit einer definierten Größe von 16x16. Wenn ich das Konvertierungsprogramm von ImageMagick verwende, um es in ein PNG zu konvertieren, erhalte ich ein PNG mit 16 x 16 Pixeln, das viel zu klein ist:
convert test.svg test.png
Ich muss die Pixelgröße des Ausgabe-PNG angeben. -size
Parameter scheint ignoriert zu werden, -scale
Parameter skaliert das PNG, nachdem es in PNG konvertiert wurde. Das bisher beste Ergebnis habe ich mit dem -density
Parameter erzielt:
convert -density 1200 test.svg test.png
Ich bin jedoch nicht zufrieden, da ich die Ausgabegröße in Pixel angeben möchte, ohne den Dichtewert zu berechnen. Also möchte ich so etwas machen:
convert -setTheOutputSizeOfThePng 1024x1024 test.svg test.png
Was ist der magische Parameter, den ich hier verwenden muss?
svg
imagemagick
png
Kayahr
quelle
quelle
-size 1024x1024
funktioniert gut, was ist deine Imagemagick-Version?-resize
streckt nur das konvertierte Bild mit Ergebnissen von schlechter Qualität.convert -size 1024x1024 test.svg test.png
funktioniert gut mit ImageMagick 7.0.7-0 Q16 (aktuelle Version in Chocolatey Repo für Windows).-size
Stellen Sie einfach sicher, dass dies vor dem eingegebenen Dateinamen angezeigt wird. Andernfalls wird ein 16x16-Bild hochskaliert, um ein verschwommenes Ergebnis zu erzielen.Antworten:
In diesem Fall konnte ich mit ImageMagick keine guten Ergebnisse erzielen, aber Inkscape leistet unter Linux und Windows gute Arbeit:
Bearbeiten (Mai 2020): Inkscape 1.0-Benutzer beachten Sie, dass sich die Befehlszeilenargumente geändert haben:
Hier ist das Ergebnis der Skalierung eines 16x16-SVG auf ein 200x200-PNG mit diesem Befehl:
Nur als Referenz ist meine Inkscape-Version (unter Ubuntu 12.04):
und unter Windows 7 ist es:
quelle
/Applications/Inkscape.app/Contents/Resources/bin/inkscape -z -e test.png -w 1024 -h 1024 test.svg
-background none
Befehlszeilenoption, um den Hintergrund mit ImageMagick transparent zu halten .Versuchen Sie es mit svgexport :
svgexport ist ein einfaches Cross-Plattform - Kommandozeilen - Tool , dass ich für den Export von SVG - Dateien in jpg und png gemacht, siehe hier für mehr Optionen. Um svgexport zu installieren , installieren Sie npm und führen Sie dann Folgendes aus:
Bearbeiten: Wenn Sie ein Problem mit der Bibliothek finden, senden Sie es bitte auf GitHub, danke!
quelle
Das ist nicht perfekt, aber es macht den Job.
Grundsätzlich erhöht es die DPI hoch genug (verwenden Sie einfach eine fundierte / sichere Vermutung), dass die Größenänderung mit angemessener Qualität durchgeführt wird. Ich habe versucht, eine richtige Lösung dafür zu finden, aber nach einer Weile entschied ich, dass dies gut genug für meinen aktuellen Bedarf war.
quelle
-resize 200%
hat nicht funktioniert und ich musste die Größe in Pixel angeben.-background none
Befehlszeilenoption, um den Hintergrund mit ImageMagick transparent zu halten . Um das Bildverhältnis beizubehalten, können Sie auch nur eine Dimension angeben, z. B.-resize 200
für Breite oder-resize x200
Höhe. Siehe: imagemagick.org/script/command-line-processing.php#geometry für erschöpfende ImageMagick Geometrie - Optionen.Wenn Sie unter MacOS X arbeiten und Probleme mit der Konvertierung von Imagemagick haben, können Sie versuchen, es mit RSVG lib neu zu installieren. Verwenden von HomeBrew:
Stellen Sie sicher, dass es richtig delegiert:
Es sollte angezeigt werden
rsvg
.quelle
convert ic_comment_48px.svg -size 30x30 ic_comment_30px.png
und das Ausgabebild ist 48 x 48. Stellen Sie sicher, dass imagemagick an rsvg delegiert, wie Sie erklärt haben.convert
konvertierte svg in png, aber die Ergebnisse waren hoffnungslos; Nach der Neuinstallation sind sie perfekt. Außerdem ist die Konvertierung erheblich schneller.invalid option: --with-librsvg
Inkscape scheint nicht zu funktionieren, wenn SVG-Einheiten nicht vorhanden sind
px
(z. B. cm). Ich habe ein leeres Bild. Vielleicht konnte es durch Drehen der dpi behoben werden, aber es war zu mühsam.Svgexport ist ein node.js-Programm und daher im Allgemeinen nicht nützlich.
Imagemagicks Konvertierung funktioniert einwandfrei mit:
Wenn Sie verwenden
-resize
, ist das Bild unscharf und die Datei ist viel größer.BESTE
Es ist am schnellsten, hat die geringsten Abhängigkeiten und die Ausgabe ist etwa 30% kleiner als die Konvertierung. Installieren Sie librsvg2-bin, um es zu erhalten. Es scheint keine Manpage zu geben, aber Sie können Folgendes eingeben:
um Hilfe zu bekommen. Einfach ist gut.
quelle
-a
bleibt ), sollte der Parameter mit rsvg verwendet werden.brew install rsvg
unter OSX werden eine Million Dinge installiert - GDK, OpenSSL, Python usw.brew install librsvg
und der Konvertierungsbefehl istrsvg-convert
.rsvg-convert
im Fall von Arch), um die besten und konsistentesten Ergebnisse bei der Konvertierung komplizierter svgs in png zu erzielen. Follow-up mitoptipng
, um die Größe der Ausgabedatei zu reduzieren.Nachdem ich die Schritte in Jose Albans Antwort befolgt hatte, konnte ich ImageMagick mit dem folgenden Befehl zum Funktionieren bringen:
Die Nummer 1536 stammt aus einer Schätzung der Dichte des Baseballstadions. Weitere Informationen finden Sie in dieser Antwort .
quelle
Um das Bild neu zu skalieren, sollte die Option
-density
verwendet werden. Soweit ich weiß, beträgt die Standarddichte 72 und bildet die Größe 1: 1 ab. Wenn das Ausgabe-PNG doppelt so groß sein soll wie das ursprüngliche SVG, setzen Sie die Dichte auf 72 * 2 = 144:quelle
convert source.svg -density 144 target.png
wird das Bild nicht neu skalieren.convert -density 180 source.svg target.png
Warum versuchst du nicht die Inkscape-Befehlszeile? Dies ist meine Bat-Datei, um alle SVG in diesem Verzeichnis in PNG zu konvertieren:
quelle
Ich bin zu diesem Beitrag gekommen - aber ich wollte die Konvertierung nur stapelweise und schnell ohne Verwendung von Parametern durchführen (aufgrund mehrerer Dateien mit unterschiedlichen Größen).
Für mich waren die Anforderungen wahrscheinlich etwas einfacher als für den ursprünglichen Autor. (Wollte SVGs in MS PowerPoint verwenden, erlaubt es aber nicht)
quelle
brew install librsvg
und der Konvertierungsbefehl lautetrsvg-convert
.In ImageMagick erhält man ein besseres SVG-Rendering, wenn man Inkscape oder RSVG mit ImageMagick verwendet als sein eigenes internes MSVG / XML-Rendering. RSVG ist ein Delegat, der mit ImageMagick installiert werden muss. Wenn Inkscape auf dem System installiert ist, wird es von ImageMagick automatisch verwendet. Ich verwende Inkscape in ImageMagick unten.
Es gibt keinen "magischen" Parameter, der das tut, was Sie wollen.
Man kann jedoch sehr einfach die genaue Dichte berechnen, die zum Rendern der Ausgabe erforderlich ist.
Hier ist eine kleine 50x50-Schaltfläche, wenn sie mit der Standarddichte von 96 gerendert wird:
Angenommen, die Ausgabe soll 500 sein. Die Eingabe ist 50 bei einer Standarddichte von 96 (ältere Versionen von Inkscape verwenden möglicherweise 92). So können Sie die benötigte Dichte proportional zu den Verhältnissen der Dimensionen und Dichten berechnen.
In ImageMagick 7 können Sie die Berechnung wie folgt inline durchführen:
quelle
Eine Sache, die mich nur gebissen hat, war das Setzen des
-density
NACH dem Namen der Eingabedatei. Das hat nicht funktioniert. Wenn Sie es auf die erste Option in convert verschieben (vor allem anderen), funktioniert es (für mich, YMMV usw.).quelle
Für die einfache Konvertierung von SVG in PNG stellte ich fest, dass cairosvg ( https://cairosvg.org/ ) eine bessere Leistung als ImageMagick aufweist. Schritte zum Installieren und Ausführen aller SVG-Dateien in Ihrem Verzeichnis.
Öffnen Sie eine Python-Shell in dem Verzeichnis, das Ihre .svg-Dateien enthält, und führen Sie Folgendes aus:
Dadurch wird auch sichergestellt, dass Sie Ihre ursprünglichen SVG-Dateien nicht überschreiben, sondern denselben Namen beibehalten. Sie können dann alle Ihre PNG-Dateien in ein anderes Verzeichnis verschieben mit:
quelle
cairosvg
auf Ubuntu-19.04 hat das den Job für mich gemacht.Ohne librsvg erhalten Sie möglicherweise ein schwarzes PNG / JPEG-Bild. Wir müssen installieren
librsvg
zuconvert
SVG - Datei mit ImageMagick.Ubuntu
Mac OS
quelle
Ich habe dieses Problem durch Ändern der
width
undheight
-Attribute von gelöst<svg>
Tags so geändert habe, dass es meiner beabsichtigten Ausgabegröße entspricht, und es dann mit ImageMagick konvertiert habe. Klappt wunderbar.Hier ist mein Python-Code, eine Funktion, die den Inhalt der JPG-Datei zurückgibt:
quelle
Die Top-Antwort von @ 808sound hat bei mir nicht funktioniert. Ich wollte die Größe ändern
und bekam
Anstatt also öffnete ich Inkscape, dann ging an
File
,Export as PNG file
und ein GUI - Box aufgetaucht , dass mir erlaubt , die genauen Maße einstellen ich brauchte.Version am
Ubuntu 16.04 Linux
:Inkscape 0.91 (September 2016)
(Dieses Bild stammt übrigens aus den Asset Packs von Kenney.nl )
quelle
Unter MacOS mit Brew funktioniert die Verwendung von librsvg direkt gut
Viele Optionen sind über verfügbar
rsvg-convert --help
quelle
Unter Linux mit Inkscape 1.0 muss zum Konvertieren von svg nach png verwendet werden
nicht
quelle