ImageMagick Convert: Wie werden PNG-Dateien mit scharfer Größe aus SVG-Dateien erstellt?

8

Ich verwende diesen Befehl, um eine scharfe 512px breite Version einer SVG-Datei zu generieren, die ich habe:

convert -geometry 256 pinterest.svg pinterest.png

Dies ist die Quelldatei:

<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
         width="16px" height="16px" viewBox="0 0 16 16" enable-background="new 0 0 16 16" xml:space="preserve">
<path fill="#231F20" d="M8,0C3.582,0,0,3.582,0,8c0,3.275,1.97,6.09,4.789,7.327c-0.022-0.559-0.005-1.229,0.139-1.837
        c0.154-0.649,1.029-4.359,1.029-4.359s-0.255-0.51-0.255-1.266c0-1.186,0.687-2.071,1.542-2.071c0.729,0,1.08,0.547,1.08,1.201
        c0,0.73-0.467,1.825-0.707,2.838c-0.2,0.85,0.426,1.541,1.262,1.541c1.515,0,2.537-1.947,2.537-4.253
        c0-1.753-1.181-3.066-3.329-3.066c-2.427,0-3.938,1.81-3.938,3.831c0,0.697,0.205,1.188,0.528,1.57
        C4.824,9.631,4.845,9.7,4.792,9.902c-0.039,0.147-0.126,0.502-0.163,0.643c-0.054,0.202-0.218,0.274-0.401,0.199
        C3.11,10.289,2.59,9.064,2.59,7.688c0-2.272,1.916-4.997,5.718-4.997c3.053,0,5.065,2.21,5.065,4.582
        c0,3.139-1.746,5.482-4.317,5.482c-0.864,0-1.677-0.467-1.955-0.996c0,0-0.464,1.844-0.562,2.199
        c-0.17,0.616-0.502,1.232-0.805,1.713C6.452,15.885,7.213,16,8,16c4.418,0,8-3.582,8-8S12.418,0,8,0z"/>
</svg>

Es entsteht jedoch ein verschwommenes PNG:

Pinterest

Da meine Quelle eine Vektorillustration ist, hatte ich erwartet, ein scharfes Bild zu erhalten. Gibt es eine Möglichkeit dazu?

TheFooProgrammer
quelle
2
Das Problem ist das width="16px" height="16px"in der SVG-Datei. Ändern Sie den Befehl ImageMagick in convert -resize 3200% pinterest.svg pinterest.pngfür ein 512 x 512-Bild. Ich bin mir nicht sicher, ob du auch einen brauchst -geometry 512oder nicht.
Martineau
Das hat auch nicht funktioniert. Ich habe es mit und ohne versucht -geometry. Es entsteht ein verschwommenes Bild. Auch -densityfunktioniert nicht. Mit Apache Batik konnte ich jedoch meine gewünschten Ergebnisse erzielen.
TheFooProgrammer
1
Ein etwas anderer Ansatz könnte so etwas wie das sein, was in dieser Antwort beschrieben wird .
Martineau

Antworten:

5

Ich hatte das gleiche Problem, aber ich habe es irgendwie umgangen, indem ich zuerst die Dichte eingestellt habe.

Über die Befehlszeile:

for %f in (*.svg) do (convert -antialias -background transparent -density 600 -resize 1024x1024 %f %~nf.png)
Agamemnus
quelle
1
convert -density 2304 pinterest.svg pinterest.png

Da der ursprüngliche DPI 72 und die Pixelgröße 16 x 16 beträgt, beträgt 512/16 * 72 2304.

Strahl
quelle
0

Ich habe keine Möglichkeit gefunden, dieses Problem mit ImageMagick zu lösen, aber das Rasterisierungsskript von Apache Batik kann verwendet werden, um das SVG verlustfrei in PNG zu konvertieren und seine Größe zu ändern.

java -jar batik-rasterizer.jar samples/batikFX.svg

Sehen Sie hier für weitere Informationen.

TheFooProgrammer
quelle
2
Nur ein Trottel, aber es ist wirklich nicht sinnvoll, eine Konvertierung von Vektor- in Rastergrafiken als "verlustfrei" zu bezeichnen - eine Bilddatei ist eine völlig andere Darstellung und wird immer eine Annäherung an die im Vektorformat definierten Grafiken sein.
Martineau