Tengo un archivo SVG que tiene un tamaño definido de 16x16. Cuando uso el programa de conversión de ImageMagick para convertirlo en 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 de la salida PNG. -size
el parámetro parece ignorarse, el -scale
parámetro escala el PNG después de que se haya convertido 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 matemáticos 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í?
svg
imagemagick
png
kayahr
fuente
fuente
-size 1024x1024
funciona bien, ¿cuál es su versión de imagemagick?-resize
solo estira la imagen convertida, con resultados de baja calidad.convert -size 1024x1024 test.svg test.png
funciona bien con ImageMagick 7.0.7-0 Q16 (versión actual en Chocolatey repo para Windows). Solo asegúrese de que-size
aparezca antes del nombre de archivo de entrada, de lo contrario, una imagen de 16x16 se escalará para obtener un resultado borroso.Respuestas:
No he podido obtener buenos resultados de ImageMagick en este caso, pero Inkscape hace un buen trabajo en Linux y Windows:
Editar (mayo de 2020): usuarios de Inkscape 1.0, tenga en cuenta que los argumentos de la línea de comando han cambiado:
Aquí está el resultado de escalar un SVG de 16x16 a un PNG de 200x200 usando este comando:
Solo como referencia, mi versión de Inkscape (en Ubuntu 12.04) es:
y en Windows 7, es:
fuente
/Applications/Inkscape.app/Contents/Resources/bin/inkscape -z -e test.png -w 1024 -h 1024 test.svg
-background none
opción de línea de comando.Prueba svgexport :
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, instale npm , luego ejecute:
Editar: Si encuentra un problema con la biblioteca, envíelo en GitHub, ¡gracias!
fuente
Esto no es perfecto pero hace el trabajo.
Básicamente, aumenta el DPI lo suficientemente alto (solo use una suposición educada / segura) de que el cambio de tamaño se realiza 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 bueno para mi necesidad actual.
fuente
-resize 200%
no funcionó y tuve que especificar el tamaño en píxeles.-background none
opción de línea de comando. Para mantener la relación de imagen, también puede especificar solo una dimensión, como-resize 200
ancho o-resize x200
alto. Consulte: imagemagick.org/script/command-line-processing.php#geometry para obtener opciones exhaustivas de geometría de ImageMagick .Si está en MacOS X y tiene problemas con la conversión de Imagemagick, puede intentar reinstalarla con RSVG lib. Usando HomeBrew:
Verifique que esté delegando correctamente:
Debería mostrar
rsvg
.fuente
convert ic_comment_48px.svg -size 30x30 ic_comment_30px.png
y la imagen de salida es 48 x 48. Asegúrese de que imagemagick esté delegando a rsvg como lo ha explicado.convert
convirtió svg a png, pero los resultados fueron inútiles; después de reinstalar, son perfectos. Además, la conversión es significativamente más rápida.invalid option: --with-librsvg
Inkscape no parece funcionar cuando las unidades svg no lo son
px
(por ejemplo, cm). Tengo una imagen en blanco. Tal vez, podría solucionarse girando el dpi, pero era demasiado problemático.Svgexport es un programa node.js y, por lo tanto, generalmente no es útil.
El convertidor de Imagemagick funciona bien con:
Si lo usa
-resize
, la imagen es borrosa y el archivo es mucho más grande.MEJOR
Es el más rápido, tiene la menor cantidad de dependencias y la salida es aproximadamente un 30% más pequeña que la conversión. Instale librsvg2-bin para obtenerlo. No parece haber una página de manual, pero puede escribir:
para obtener ayuda Lo simple es bueno.
fuente
-a
parámetro debe usarse con rsvg.brew install rsvg
en OSX instala un millón de cosas: GDK, OpenSSL, Python, etc.brew install librsvg
y el comando de conversión esrsvg-convert
.rsvg-convert
en el caso de Arch) brinda los mejores y más consistentes resultados al convertir svgs complicados a png. Haga un seguimiento conoptipng
para reducir el tamaño del archivo de salida.Después de seguir los pasos en la respuesta de José Alban , pude hacer que ImageMagick funcionara bien usando el siguiente comando:
El número 1536 proviene de una estimación aproximada de densidad, consulte esta respuesta para obtener más información.
fuente
Para reescalar la imagen, se
-density
debe usar la opción . Hasta donde yo sé, la densidad estándar es 72 y asigna el tamaño 1: 1. Si desea que la salida png sea dos veces más grande que la svg original, configure la densidad en 72 * 2 = 144:fuente
convert source.svg -density 144 target.png
, no cambiará la escala de la imagen.convert -density 180 source.svg target.png
¿por qué no pruebas la línea de comando de inkscape? Este es mi archivo bat para convertir todos los svg en este directorio a png:
fuente
Llegué a esta publicación, pero solo quería hacer la conversión por lotes y rápido sin el uso de ningún parámetro (debido a varios archivos con diferentes tamaños).
Para mí, los requisitos fueron probablemente un poco más fáciles que para el autor original. (Quería usar SVG en MS PowerPoint, pero no permite)
fuente
brew install librsvg
y el comando de conversión esrsvg-convert
.En ImageMagick, se obtiene una mejor representación SVG si se usa Inkscape o RSVG con ImageMagick que su propio renderizado interno MSVG / XML. RSVG es un delegado que debe instalarse con ImageMagick. Si Inkscape está instalado en el sistema, ImageMagick lo usará automáticamente. Yo uso Inkscape en ImageMagick a continuación.
No hay un parámetro "mágico" que haga lo que quieras.
Pero, uno puede calcular muy simplemente la densidad exacta necesaria para representar la salida.
Aquí hay un pequeño botón de 50x50 cuando se procesa con la densidad predeterminada de 96:
Supongamos que queremos que la salida sea 500. La entrada es 50 con una densidad predeterminada de 96 (las versiones anteriores de Inkscape pueden estar usando 92). Por lo tanto, puede calcular la densidad necesaria en proporción a las proporciones de las dimensiones y las densidades.
En ImageMagick 7, puede hacer el cálculo en línea de la siguiente manera:
fuente
Una cosa que me mordió fue configurar
-density
DESPUÉS del nombre del archivo de entrada. Eso no funcionó. Moverlo a la primera opción en convertir (antes que nada) lo hizo funcionar (para mí, YMMV, etc.).fuente
Para la conversión simple de SVG a PNG, encontré que cairosvg ( https://cairosvg.org/ ) funciona mejor que ImageMagick. Pasos para instalar y ejecutar todos los archivos SVG en su directorio.
Abra un shell de Python en el directorio que contiene sus archivos .svg y ejecute:
Esto también asegurará que no sobrescriba sus archivos .svg originales, pero mantendrá el mismo nombre. Luego puede mover todos sus archivos .png a otro directorio con:
fuente
cairosvg
en Ubuntu-19.04 hizo el trabajo por mí.Sin librsvg, puede obtener una imagen png / jpeg negra. Tenemos que instalar
librsvg
aconvert
archivo SVG con ImageMagick.Ubuntu
Mac OS
fuente
He resuelto este problema cambiando los atributos
width
yheight
de<svg>
etiqueta para que coincida con el tamaño de salida deseado y luego convirtiéndolo usando ImageMagick. Funciona de maravilla.Aquí está mi código Python, una función que devolverá el contenido del archivo JPG:
fuente
La respuesta principal de @ 808sound no funcionó para mí. Quería cambiar el tamaño
y consiguió
Así que en vez abrí Inkscape, y luego fui a
File
,Export as PNG file
y una caja de interfaz gráfica de usuario aparecido que me ha permitido establecer las dimensiones exactas que necesitaba.Versión en
Ubuntu 16.04 Linux
:Inkscape 0.91 (September 2016)
(Por cierto, esta imagen es de los paquetes de activos de Kenney.nl )
fuente
En macOS usando brew, usar librsvg funciona directamente bien
Muchas opciones están disponibles a través de
rsvg-convert --help
fuente
En Linux con Inkscape 1.0 para convertir de svg a png necesita usar
no
fuente