Aplicación de línea de comandos para convertir SVG a PNG en Mac OS X

167

¿Hay algún programa de línea de comandos que pueda convertir un SVG a PNG que se ejecute en Mac OS X?

Editar : Dylan B tuvo una buena respuesta con ImageMagick. Como referencia, para instalar ImageMagick con soporte SVG en Mac OS X usando MacPorts, haga

port install imagemagick +rsvg
Lorin Hochstein
fuente
2
He encontrado una manera si usted tiene Google Chrome ... y sin necesidad de instalar ningún otras cosas: superuser.com/questions/134679/...
nopole
cairosvg.org funciona para python3 y parece no tener problemas. pip3 install cairosvg
JayRizzo

Respuestas:

234

O sin instalar nada:

qlmanage -t -s 1000 -o . picture.svg 

Producirá picture.svg.png que tiene 1000 píxeles de ancho.

Lo he probado solo en OS X 10.6.3.

tst
fuente
38
Lamentablemente, esto recorta las imágenes en un cuadrado.
Martijn Pieters
77
Ah, qlmanage -tda la miniatura utilizada por Quick Look (en Finder, etc.). Idea inteligente. Desafortunadamente, estas miniaturas pueden tener errores, especialmente cuando hay texto involucrado.
ShreevatsaR
77
Esto produce imágenes con el archivo svg en el primer cuadrante. No se recorta automáticamente. Intentando convertir archivos del proyecto de sustantivo: desearía que esto funcionara.
Alex Cook
77
Esta solución no tiene en cuenta la transparencia. La herramienta rsvg-converten la respuesta de @ ahti funcionó antes para mí.
BenR
3
Poner los parámetros de ancho y alto después de la -sopción no funcionó para mí. Todavía lo cosecha en un cuadrado. ¡Muy frustrante!
Erik van der Neut
107

Encontré que para mí la mejor herramienta para el trabajo es rsvg-convert.

Se puede encontrar en brew with brew install librsvgy se usa así:

rsvg-convert -h 32 icon.svg > icon-32.png

(Este ejemplo crea un png alto de 32 px. El ancho se determina automáticamente.

Ahti
fuente
Este es el único que funcionó para mí en Mavericks y commons.wikimedia.org/wiki/…
Aron Ahmadia
En realidad, este funcionó, mientras que ImageMagick convertemitió errores y no pudo encubrir un SVG complejo
Brice
77
¡Esta es, con mucho, la mejor solución que he encontrado para OS X Yosemite +1!
Greg Martin
Esto falló para algunos de mis SVG, curiosamente. La qlmanagerespuesta funcionó para todos ellos, pero puso un fondo blanco, que no quiero.
sudo
1
Con rsvg-convert, el .png resultante tenía las dimensiones correctas, pero la imagen salió completamente negra en lugar de los colores originales. Con qlmanagela imagen se recorta a un cuadrado. Todavía estoy buscando una solución :-(
Erik van der Neut
43

ImageMagick es un editor de imágenes de línea de comandos extremadamente versátil, que probablemente rivalizaría con Photoshop si tuviera, ya sabes, una GUI. Pero quién necesita esos de todos modos. :PAGS

Algo como lo siguiente convertiría un .svg a .png, después de la instalación:

$ convert picture.svg picture.png

El .svg original no se elimina.

Jessie
fuente
Tiene una especie de GUI, en display.
Ignacio Vazquez-Abrams
1
Cuando instalé ImageMagick con Fink, no pude convertir svg a png; hubo algunos errores. Resultó que también necesitaba instalar librsvg2-bin.
TST
Si librsvg2-bin no está instalado (como en OS X), esto fallará. No se pudo encontrar una manera de instalarlo en OS X.
John Sheehan
3
Esto no funcionará bien si desea cambiar el tamaño del SVG ya que genera imágenes borrosas.
Behrang
3
Tampoco convierte todos los archivos SVG correctamente; al menos qlmanage tiene todas las partes de la imagen.
Johan
28

Inkscape con su interfaz de línea de comandos produce los mejores resultados para mí:

/Applications/Inkscape.app/Contents/Resources/bin/inkscape --export-png output.png -w 1024 -h 768 input.svg

Lo bueno es que puede especificar el tamaño de píxel exacto de la imagen resultante, sin tener que alterar la densidad.

seb
fuente
¡Esto es trabajo para mí! - Tengo un SVG más grande creado con Inkscape
matheszabi
Este es el único método que hizo que mi svg escrito a mano correctamente
Griffin
Convertir no genera buenos archivos PNG desde SVG. Usar Inkscape es la mejor manera que he encontrado hasta ahora.
ol_v_er
Esto funciona para mí, pero crea archivos extremadamente borrosos.
Marcin
3
Yo tenía un problema para encontrar archivos para ejecutarlo comoinkscape $(pwd)/logo.svg --export-png $(pwd)/logo.png
Andrei
16

OK, encontré una manera simple de hacerlo en Mac si tienes Google Chrome.

En una oración, es para ver la svgimagen en una página web (debe estar en un htmlarchivo), hacer clic derecho en la imagen y elegir "Copiar imagen" y pegarla en la aplicación Vista previa.

Pasos:

  1. Descargue o tenga el svgarchivo en su disco duro, por ejemplo,somefile.svg
  2. Ahora, en la misma carpeta, solo cree un archivo html tmp.htmlque contenga esta línea:<img src="somefile.svg">
  3. Ahora, abra ese archivo html en Google Chrome
  4. Deberías ver la imagen. Ahora haga clic derecho en la imagen y elija "Copiar imagen"
  5. Vaya a la aplicación de vista previa de Mac y elija, "File -> New from Clipboard"
  6. Ahora File -> Saveel archivo y tú tienes el pngarchivo. (u otros tipos de archivos).

Esto se prueba en el Chrome actual (versión 48.0) en Mac OS X El Capitan.

Actualización : no estoy seguro de si se debe a alguna restricción impuesta por Google Chrome. Acabo de probar un archivo SVG con Chrome 58.0, y obtengo una pequeña imagen del método anterior. Si ve este caso también, también puede usar

<img src="somefile.svg" style="height: 82vh; margin-top: 9vh; margin-left: 9vh">

y tendrá una imagen en pantalla lo suficientemente buena como para que pueda hacer una captura de pantalla , por ejemplo, usando CmdShift4o CmdShift3en la Mac. Asegúrese de cambiar el tamaño de su ventana de Chrome al máximo permitido en la pantalla.

nopole
fuente
Solución inteligente!
Manu
1
Esto realmente produce los mejores resultados para mí, ya que representa exactamente lo mismo que el navegador.
Jason Haslam
la imagen resultante fue una resolución muy pobre para mí
Michael
Ingenioso :) pero para SVG muy grandes, la resolución de la imagen resultante es demasiado baja, como mencionó @Michael.
waldyrious
5

Si quieres hacer muchas a la vez, puedes:

mogrify -format png *.svg

También hay opciones para cambiar el tamaño, etc. sobre la marcha.

Día de defenestración
fuente
3
mogrifytambién es parte de ImageMagick.
ShreevatsaR
Funciona muy bien, pero brutalmente lento.
Meekohi el
-1? Alguien piensa que esto no es útil? Cual es el error
DefenestrationDay
2
No soy yo quien votó en contra, pero vale la pena señalar que ImageMagick convierte estúpidamente svg en una imagen ráster de tamaño arbitrario antes de cambiar el tamaño, lo que resulta en una salida borrosa.
Dae
4

Prueba Apache Batik .

java -jar batik-rasterizer.jar FILES

También es compatible con la conversión por lotes y tiene muchas otras opciones útiles.

Behrang
fuente
4

He hecho svgexport usando node / npm para esto, es multiplataforma y puede ser tan simple como:

svgexport input.svg output.png
Ali Shakiba
fuente
Este fue el más fácil de usar y recordar con diferencia. Además, el único que produjo un resultado correcto en mi caso.
Marko Grešak
La resolución resultante no fue genial para mí.
Michael
3

También puede usar phantomjs para representar el svg. La ventaja es que lo representa como lo haría un navegador, ya que es básicamente un WebKit sin cabeza.

Una vez que lo descargue, necesitará phantomjs (binario) y el archivo rasterizer.js de la carpeta de ejemplos.

phantomjs examples/rasterize.js Tiger.svg out.png
Stofke
fuente
1
Como referencia, esto se puede instalar con brew cask install phantomjs. En mi instalación, la carpeta de ejemplos estaba ubicada en la ruta /usr/local/Caskroom/phantomjs/2.1.1/phantomjs-2.1.1-macosx/examples/.
waldyrious
2

Esto es lo que usé:

brew install imagemagick --with-librsvg

Luego ejecute los siguientes comandos:

find . -type f -name "*.svg" -exec bash -c 'convert $0 $0.png' {} \; rename 's/svg\.png/png/' *

Espero eso ayude.

Alan Dong
fuente
1

Yo uso este comando en mi Linux. También debería funcionar para ti.

mogrify +antialias -density 2000 -verbose -format png *.svg

Aprendí que sin el argumento de "densidad", el mapa de bits estaría muy pixelado. Cambie el valor de densidad para que coincida con su necesidad.

BersekerBernhard
fuente
2
Incluso con densidad, la conversión no genera una imagen que sea tan nítida como una imagen vectorial. Prueba Apache Batik en su lugar.
Behrang
1

El comando de conversión de ImageMagick, que usa algunos otros parámetros, es lo que me ayudó. ¡Aquí está mi solución de script Bash por lotes que divide la tarea en múltiples procesos para hacer uso de todos sus núcleos! Modifique según sea necesario.

batchConvertToSVG.sh (toma varios procesos como argumento):

end=$(( $1 - 1 ))
for i in `seq 0 $end`;
        do
            echo Spawning helper $i of $end
                ./convertToSvgHelper.sh $i $1 &
        done 

convertToSvgHelper.sh:

n=$1
for file in ./*.svg; do
   filename=${file%.svg}
   echo converting file named $filename
   test $n -eq 0 && convert -format png -resize 74 -background transparent -density 600 $file $filename.png
   n=$((n+1))
   n=$((n%$2))
done
sudo
fuente
0

Como se comentó anteriormente, ImageMagick hace el truco. Solo quería agregar un punto para GraphicsMagick , una antigua bifurcación de ImageMagick que tiene algunas mejoras (y mucha menos hinchazón de dependencia cuando se instala a través de Fink).


fuente
0

Puede realizar una conversión por lotes en una carpeta completa de archivos SVG a PNG. Utilicé la interfaz de línea de comandos de Inkscape para producir archivos png con un ancho de 80px.

find ~/desktop/toconvert '*.svg' -exec /Applications/Inkscape.app/Contents/Resources/bin/inkscape -z -w 80 -e "{}".png "{}" \;

png se guardará con el nombre original * .png

James Matthew Mudgett
fuente
0

Otro método más sin instalar nada. Sin embargo, no está en la línea de comando.

  1. Abra el archivo .svg en Safari.
  2. Presione alt-command-i para abrir el inspector.
  3. Haga clic derecho en la <svg>etiqueta, seleccione "Captura de pantalla de captura". (Tenga en cuenta que no debe hacer zoom en la imagen).

PD Para ampliar la imagen .svg si es demasiado pequeña, intente abrir el archivo .svg en el editor de texto y anexar 0a cada número excepto en el meta atributo. Esto se puede hacer mediante una sustitución global de expresiones regulares de (\d+)a $10, donde $1es el marcador de posición para referencia, por ejemplo.

Yang de Haotian
fuente
Probablemente debería mencionar que esto es casi lo mismo que  la respuesta de 太極 者 無極 而 生 .
Scott
-1

wkhtmltoimage (del proyecto wkhtmltopdf) hizo esta conversión bien:

wkhtmltoimage --zoom 2 foo.svg foo.png

ImageMagick muestra el carácter CJK en blanco en mi mac.

georgexsh
fuente
Si bien este enlace puede responder la pregunta, es mejor incluir aquí las partes esenciales de la respuesta y proporcionar el enlace como referencia. Las respuestas de solo enlace pueden volverse inválidas si la página vinculada cambia. - De la opinión
Blackwood
@Blackwood bien, actualizado.
georgexsh