10 votes

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

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

convert -geometry 256 pinterest.svg pinterest.png

Il s'agit du 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, cela produit un PNG flou :

Pinterest

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

5voto

agamemnus Points 51

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

En ligne de commande :

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

1voto

Shebanator Points 111
convert -density 2304 pinterest.svg pinterest.png

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

0voto

TheFooProgrammer Points 827

Je n'ai pas trouvé de solution à ce problème avec ImageMagick, mais le script rasterize script d'Apache Batik peut être utilisé pour convertir et redimensionner le SVG en PNG sans perte.

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

Siehe aquí pour plus d'informations.

0voto

Utilisez plutôt inkscape

Étant donné qu'il ne semble pas possible de déterminer facilement les -density sans un peu plus de script, comme le confirme également le site https://stackoverflow.com/questions/9853325/how-to-convert-a-svg-to-a-png-with-imagemagick Je recommande d'utiliser simplement inkscape qui le fait pour vous :

inkscape -w 512 -h 512 -b FFF -e main.png main.svg 

Sortie :

enter image description here

Testé sur Inkscape 0.92.5, Ubuntu 20.04.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X