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 400pt
by 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
- Shift + Ctrl + M (Transformar)
- Escala (marque "escala proporcionalmente")
- Introducir ancho
- Shift + Ctrl + D (propiedades del documento)
- 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.
fuente
width
,height
yviewBox
los valores a algo parecidowidth="100%" height="100%" viewBox="0 0 400 212.58569"
.sed
en 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.Respuestas:
rsvg-convert
desde ellibrsvg2-bin
paquete puede cambiar el tamaño de svg's.Vea esta respuesta para obtener instrucciones completas.
fuente
rsvg-convert -a -w 500 -f svg Vector-triangle-inequality.svg -o Result.svg
trabajó. Pero rsvg-convert parece hacer más que solo cambiar el tamaño.rsvg-convert --help
no proporciona ninguna pista.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:
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:
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:
La conversión de ImageMagick fue mi primera opción, pero parece romperse al escalar svgs.
fuente