¿Cómo puedo escalar un SVG a través de la línea de comando?


17

Un SVG tiene estas propiedades, que determinan su tamaño:

width="146.91299pt"
height="78.079002pt"
viewBox="0 0 146.913 78.079"

Me gustaría escalar un SVG dado a un 400ptby por línea de comando sin romper la relación de aspecto. Esto significa que los tres valores anteriores deben cambiarse correctamente y todos los puntos en el siguiente código svg. No quiero cambiar solo el tamaño del lienzo, sino todo el tamaño de la imagen svg. Y no quiero hacerlo con una GUI / a mano, pero quiero hacerlo con CLI.

¿Cómo puedo escalar automáticamente un SVG por línea de comando a un ancho dado?

Motivo: La vista previa de Wikipedia se ve mal si la imagen es demasiado pequeña. Ver esta imagen como un ejemplo.

Cómo haría esta tarea con Inkscape-GUI

  1. Shift + Ctrl + M (Transformar)
  2. Escala (marque "escala proporcionalmente")
  3. Introducir ancho
  4. Shift + Ctrl + D (propiedades del documento)
  5. Ajustar página a selección

Ahora quiero una forma CLI automática para hacer esto.

Por cierto, Inkscape simplemente aplicó

<g transform="matrix(1.6838397,0,0,1.6838397,-3.3543029,-3.3542794)"
 id="surface0">

a toda la imagen.


¿Qué sistema operativo usas?
terdon

Ubuntu 10.04.4 LTS (voy a actualizarlo ...)
Martin Thoma

Los archivos SVG son solo archivos de texto. Es posible que pueda editar el archivo y cambiar los width, heighty viewBoxlos valores a algo parecido width="100%" height="100%" viewBox="0 0 400 212.58569".
martineau

Sé que son solo archivos de texto. Pero si edito solo estos valores, el tamaño de la imagen no cambia. Solo cambia el tamaño del lienzo. Editar a mano no es una opción, explícitamente dije que quiero cambiarlo automáticamente.
Martin Thoma

Sí, sé que solicitó una forma automatizada de hacerlo, pero pensó que si podía averiguar qué cambiar, en términos de texto, podría automatizarlo utilizando cualquiera de las diversas herramientas de edición de texto disponibles (como como seden la respuesta de @terdon). Un problema con el que se puede encontrar es que los valores deben ser diferentes a cualquier otro archivo .svg con el que desee hacer lo mismo.
Martineau

Respuestas:


15

rsvg-convertdesde el librsvg2-binpaquete puede cambiar el tamaño de svg's.

Vea esta respuesta para obtener instrucciones completas.


44
rsvg-convert -a -w 500 -f svg Vector-triangle-inequality.svg -o Result.svgtrabajó. Pero rsvg-convert parece hacer más que solo cambiar el tamaño.
Martin Thoma el

2
@moose, sin embargo, como se señaló en esa respuesta, rsvg-convert usa puntos, no píxeles. Si tiene suerte, puede dividir su tamaño previsto por 1.25. Sin embargo, si desea algo como 24px (19.2 en puntos), no tiene suerte, ya que no está dispuesto a poner un no entero como el ancho o la altura (no estoy seguro si SVG lo permite).
Matthew Flaschen

@ MartinThoma Sí, de hecho. El archivo de salida SVG es aproximadamente el doble del tamaño original. ¿Me pregunto porque? La lectura rsvg-convert --helpno proporciona ninguna pista.
Serge Stroobandt

1
rsvg convert también parece convertir las rutas trazadas en rutas trazadas. Es posible que no desee esto (sé que no)
scruss

1
Esta herramienta parece atascar las transformaciones en cada elemento y en realidad no cambia los tamaños originales.
partir

3

Si solo desea cambiar una imagen, ábrala en un editor de texto (por ejemplo, emacs) y cambie la entrada de ancho.

Para un enfoque más geek, solo CLI, use sed:

$ sed 's/width=\"146.91299pt\"/width=\"400pt\"/' orig.svg > new.svg

Sin embargo, esto no escalará la imagen, solo establecerá su ancho.


Una mejor manera, tal vez, pero ciertamente una que se puede ejecutar en modo por lotes para muchas imágenes es usar Inkscape desde la línea de comandos:

$ inkscape -z -e out.png -w 400 -h 400 in.svg

Para muchos archivos (suponiendo que desee que todos tengan el mismo ancho), haga lo siguiente. Requiere conversión a png y asume que no hay espacios en sus nombres de archivo:

$ for n in $(ls *svg | sed 's/.svg//'); do inkscape -z -e $n.png -w 400 -h 400 $n.svg; done

La conversión de ImageMagick fue mi primera opción, pero parece romperse al escalar svgs.


77
Su comando inkscape resulta en un PNG, pero quiero un SVG. Su comando svg solo cambia el tamaño del lienzo, pero no el tamaño de la imagen. No puede simplemente usar un editor de texto y solo cambiar los valores que he mencionado anteriormente. Creo que tengo que aclarar la pregunta.
Martin Thoma

también necesita agregar una etiqueta: ... "> <g transform =" scale (2) "> <ruta .... /> </g> </svg> para escalar la imagen con el mismo factor.
Stofke
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.