¿Cómo convertir un SVG a PNG con ImageMagick?

Resuelto kayahr asked hace 12 años • 20 respuestas

Tengo un archivo SVG que tiene un tamaño definido de 16x16. Cuando uso el programa de conversión de ImageMagick para convertirlo a PNG, obtengo un PNG de 16x16 píxeles que es demasiado pequeño:

convert test.svg test.png

Necesito especificar el tamaño de píxel del PNG de salida. -sizeEl parámetro parece ignorarse, -scaleel parámetro escala el PNG después de convertirlo a PNG. El mejor resultado hasta ahora lo obtuve usando el -densityparámetro:

convert -density 1200 test.svg test.png

Pero no estoy satisfecho porque quiero especificar el tamaño de salida en píxeles sin hacer cálculos para calcular el valor de densidad. Entonces quiero hacer algo como esto:

convert -setTheOutputSizeOfThePng 1024x1024 test.svg test.png

Entonces, ¿cuál es el parámetro mágico que tengo que usar aquí?

kayahr avatar Mar 24 '12 23:03 kayahr
Aceptado

No he podido obtener buenos resultados con ImageMagick en este caso, pero Inkscape hace un buen trabajo al escalar un SVG en Linux y Windows:

# Inkscape v1.0+
inkscape -w 1024 -h 1024 input.svg -o output.png
# Inkscape older than v1.0
inkscape -z -w 1024 -h 1024 input.svg -e output.png

Tenga en cuenta que puede omitir uno de los parámetros de ancho/alto para que el otro parámetro se escale automáticamente en función de las dimensiones de la imagen de entrada.

Este es el resultado de escalar un SVG de 16x16 a un PNG de 200x200 usando este comando:

ingrese la descripción de la imagen aquí

ingrese la descripción de la imagen aquí

808sound avatar Jan 05 '2013 17:01 808sound

Pruebe svgexport :

svgexport input.svg output.png 64x
svgexport input.svg output.png 1024:1024

svgexport es una sencilla herramienta de línea de comandos multiplataforma que he creado para exportar archivos svg a jpg y png; consulte aquí para obtener más opciones. Para instalar svgexport install npm , luego ejecute:

npm install svgexport -g

Editar: si encuentra un problema con la biblioteca, envíelo en GitHub, ¡gracias!

Ali Shakiba avatar Sep 25 '2014 21:09 Ali Shakiba

Esto no es perfecto pero hace el trabajo.

convert -density 1200 -resize 200x200 source.svg target.png

Básicamente, aumenta el DPI lo suficiente (solo use una suposición fundamentada/segura) para que el cambio de tamaño se realice con la calidad adecuada. Estaba tratando de encontrar una solución adecuada para esto, pero después de un tiempo decidí que era lo suficientemente buena para mi necesidad actual.

Nota: ¡ Utilice 200x200! para forzar la resolución dada

Hardev avatar Oct 02 '2012 12:10 Hardev

Inkscape no parece funcionar cuando las unidades svg no lo son px(por ejemplo, cm). Me salió una imagen en blanco. Tal vez podría solucionarse cambiando los ppp, pero era demasiado problemático.

Svgexport es un programa node.js y, por lo general, no es útil.

La conversión de Imagemagick funciona bien con:

 convert -background none -size 1024x1024 infile.svg outfile.png

Si usa -resize, la imagen aparece borrosa y el archivo es mucho más grande.

MEJOR

rsvg-convert -w 1024 -h 1024 infile.svg -o outfile.png

Es más rápido, tiene la menor cantidad de dependencias y el resultado es aproximadamente un 30% más pequeño que el de conversión. Instale librsvg2-bin para obtenerlo:

sudo apt install -y librsvg2-bin

No parece haber una página de manual pero puedes escribir:

rsvg-convert --help

para conseguir algo de ayuda. Lo sencillo es bueno.

september_converter avatar Sep 14 '2015 20:09 september_converter