ImageMagick Convert: Comment produire des fichiers PNG redimensionnés à partir de fichiers SVG?

8

J'utilise cette commande pour générer une version nette 512px d'un fichier SVG que j'ai:

convert -geometry 256 pinterest.svg pinterest.png

Voici le fichier source:

<?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>

Cependant, il produit un PNG flou:

Pinterest

Comme ma source est une illustration vectorielle, je m'attendais à obtenir une image nette. Existe-t-il un moyen de le faire?

TheFooProgrammer
la source
2
Le problème vient du width="16px" height="16px"fichier SVG. Essayez de modifier la commande ImageMagick convert -resize 3200% pinterest.svg pinterest.pngpour une image 512 x 512. Je ne sais pas si vous en aurez besoin -geometry 512ou non.
martineau
Cela n'a pas fonctionné non plus. Je l'ai essayé avec et sans -geometry. Il produit une image floue. Ça -densityne marche même pas. Cependant, j'ai réussi à obtenir les résultats souhaités en utilisant Apache Batik.
TheFooProgrammer
1
Une approche légèrement différente pourrait ressembler à ce qui est décrit dans cette réponse .
martineau

Réponses:

5

J'ai eu le même problème, mais je l'ai en quelque sorte contourné en réglant d'abord la densité.

Depuis la ligne de commande:

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

Parce que le DPI d'origine est de 72 et la taille des pixels est de 16 x 16, donc 512/16 * 72 est de 2304.

Rayon
la source
0

Je n'ai pas trouvé de moyen de résoudre ce problème en utilisant ImageMagick, mais le script de pixellisation d'Apache Batik peut être utilisé pour convertir et redimensionner le SVG en PNG sans perte.

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

Voir ici pour plus d'informations.

TheFooProgrammer
la source
2
Juste une piqûre, mais cela n'a vraiment aucun sens d'appeler une conversion de vecteur à des graphiques raster "sans perte" - un fichier image est une représentation complètement différente et sera toujours une approximation des graphiques définis au format vectoriel.
martineau