¿Cómo ajustar los dibujos svg a su lienzo en la línea de comando?

13

Recortar .svgarchivos en la línea de comando es simple: $ inkscape --verb=FitCanvasToDrawing --verb=FileSave --verb=FileClose *.svg

Necesito hacer lo contrario. Quiero ajustar el dibujo en un 64 x 64lienzo de puntos (ya establecido en todos los .svgarchivos). Lamentablemente, Inkscape no proporciona un FitDrawingToCanvascomando. Además, el ajuste debe mantener la relación de aspecto del dibujo.

Si es importante: estoy usando Ubuntu raring.

Stefan Endrullis
fuente
1
¿Cambiaría el tamaño después de ajustar el lienzo al dibujo para hacer el trabajo? Ver graphicdesign.stackexchange.com/questions/6574/…
Takkat
Dos preguntas: (1) el tamaño del lienzo ya está configurado en cada instancia, pero los dibujos son más grandes que el lienzo; o estás insertando un dibujo svg en un documento svg diferente ?; (2) "mantener la relación de aspecto": esto es confuso a la luz del lienzo cuadrado de 64 puntos mencionado en sus preguntas, pero ¿tiene un proceso de decisión automatizado propuesto sobre cómo manejar material no cuadrado? por ejemplo, la altura debe ser de 64 puntos en todos los casos ...
hora del
@Takkat: Gracias por la pista. El flujo de trabajo funciona, pero la relación de aspecto se destruye. Buscará una solución para eso ...
Stefan Endrullis
@horatio: (1) el dibujo es más pequeño que el lienzo y sí, ambos están en el mismo archivo. (2) Quiero escalar el dibujo hasta el punto que max (drawingWidth, drawingHeight) = 64pt.
Stefan Endrullis
@Takkat: rsvg-convert tiene un argumento --keep-aspecto-ratio :)
Stefan Endrullis

Respuestas:

2

Encontré una forma de hacer esto en esta pregunta: Inkscape - Centrar el dibujo en la página a través de la línea de comando / terminal

Con "foo.svg" como imagen para editar:

inkscape --verb=EditSelectAll --verb=AlignHorizontalCenter --verb=AlignVerticalCenter --verb=FileSave --verb=FileQuit foo.svg

Para editar todas las imágenes svg en el directorio actual:

inkscape --verb=EditSelectAll --verb=AlignHorizontalCenter --verb=AlignVerticalCenter --verb=FileSave --verb=FileClose *.svg

Pero este segundo comando abre un montón de ventanas, lo que hará que su computadora se bloquee si está editando demasiadas imágenes. Solo para Linux , este comando funcionará mejor:

for img in $(ls *.svg) ; do inkscape --verb=EditSelectAll --verb=AlignHorizontalCenter --verb=AlignVerticalCenter --verb=FileSave --verb=FileQuit $img ; done

Para el comando anterior, si alguno de los archivos son enlaces simbólicos, Inkscape editará el archivo de destino al que apunta el enlace simbólico. Si no desea que Inkscape haga esto, puede filtrar los enlaces simbólicos con este comando:

for img in $(ls *.svg) ; do if [[ $(readlink $img) == "" ]] ; then inkscape --verb=EditSelectAll --verb=AlignHorizontalCenter --verb=AlignVerticalCenter --verb=FileSave --verb=FileQuit $img ; fi ; done


Mientras lo hago, también podría publicar el script de bash que hice para esto:

#!/bin/bash
# inkscape-center <file-or-directory>...

_analyse() {
    if [ -d "${1}" ] ; then
        _centerAll "${1}" ;
    else
        _center "${1}" ;
    fi
}

_centerAll() {
    cd "${1}" ;
    for img in $(ls "*.svg") ; do
        _filterSyms "${img}" ;
    done
}

_filterSyms() {
    if [[ $(readlink "${1}") == "" ]] ; then
        _center "${1}"
    fi
}

_center() {
    inkscape --verb=EditSelectAll --verb=AlignHorizontalCenter --verb=AlignVerticalCenter --verb=FileSave --verb=FileQuit "${1}"
}

for arg ; do
    _analyse "${arg}" ;
done

Lo llamé inkscape-centery lo ejecuté así:

inkscape-center <file-or-directory>

Toma tantos argumentos como quieras, por lo que puedes hacer algo como esto:

inkscape-center 1st.svg 2nd.svg 3rd.svg 4th.svg

Tenga cuidado : si especifica un directorio en lugar de un archivo, editará todos los archivos svg de ese directorio.

Mapache Verde23
fuente
1

Puede usar viewBox para lograr lo que quiere. No sé si hay una manera de hacer esto desde Inkscape, pero dado que SVG es un formato estándar y puede haber otra herramienta que haga el trabajo que desea. Una búsqueda rápida de "herramientas de línea de comando svg" reveló algunos resultados interesantes, incluido este para crear iconos CSS.

Una segunda opción sería escribir su propia herramienta en el idioma que elija para hacerlo. La esencia básica es establecer viewBox a la altura de su documento, luego establecer el ancho y la altura del documento que desee. Finalmente, establezca el atributo preserveAspectRatio.

Así es como se ven las modificaciones descritas anteriormente en un documento que originalmente era 744x1052.

<svg
   width="64"
   height="64"
   viewBox="0 0 744 1052"
    preserveAspectRatio="xMinYMin slice"
BrianV
fuente