¿Cómo convertir un SVG a PNG con ImageMagick?
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. -size
El parámetro parece ignorarse, -scale
el parámetro escala el PNG después de convertirlo a PNG. El mejor resultado hasta ahora lo obtuve usando el -density
pará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í?
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:
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!
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
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.