En Inkscape, cambie el tamaño del documento y su contenido al mismo tiempo.

25

He estado luchando por hacer algo que parecería bastante básico:

En Inkscape, ¿cómo puedo cambiar el tamaño del documento y su contenido (es decir, dibujos) al mismo tiempo?

Un poco de contexto: quiero cambiar el tamaño de un número bastante grande de documentos SVG de The Noun Project (generalmente son documentos de 100x100px) sin tener que cambiar explícitamente el tamaño de los dibujos reales.

NB: ¡Si hay una solución de línea de comando, también puedo trabajar con eso!

julien_c
fuente
No estoy seguro de su objetivo final, pero AFAIK, el área del documento es algo arbitraria aparte de la impresión, donde tiene la opción de imprimir solo el área del documento. Sin embargo, también solo puede imprimir el área del objeto, por lo que puede ser una forma de sortear su obstáculo.
DA01
@ DA01 Bueno, creo que el documento es bastante útil cuando exporta a Bitmap (que es lo que estoy haciendo).
julien_c
Por cierto, ¿hay alguna forma de cambiar el tamaño de un objeto que no implique arrastrar esquinas, pero donde especificaría explícitamente un tamaño? Eso podría ser lo que busco :)
julien_c
1
incluso entonces es una opción arbitraria. Puede dibujar fácilmente un cuadro contenedor como su 'zona' de exportación. De hecho, así es como generalmente prefiero hacerlo. En cuanto al cambio de tamaño, puede seleccionar sus objetos y luego a) usar la barra de estado en la parte superior y escribir sus cambios de tamaño ob) ir a OBJETO> TRANSFORMAR e ingresar valores en la paleta Transformar
DA01
@julien_c: Creo que el punto aquí es que los objetos son arte vectorial directo y no tienen tamaño per se hasta que los envíe a un dispositivo (o archivo) ráster. Su tamaño (pulgadas, píxeles, codos) es, en efecto, irrelevante.
Horacio

Respuestas:

24

No ha mencionado qué sistema operativo está ejecutando. Estoy usando Ubuntu, y he podido usar librsvg2 con éxito.

Si tiene acceso a Ubuntu, esto es lo que puede hacer. Primero, instala librsvg2:

sudo apt-get install librsvg2-bin

Luego, cdal directorio que tiene sus SVG (¡asegúrese de que solo tenga SVG!) Y use un comando como el siguiente:

for old in *; do
    new="$(echo "$old" | sed -e 's/svg$/new.svg/')"
    rsvg-convert "$old" -w 160 -h 160 -f svg -o "$new"
done

Esto creará un nuevo lote de SVG con dimensiones de 200 px por 200 px, y se guardará como "original-file-name.new.svg"

Calcular dimensiones es algo confuso. Para convertir SVG a SVG, necesitas hacer un poco de matemática. Las opciones de "altura" y "ancho" en rsvg-convert usan pt, no px, en tales casos, así que usa 80 si quieres 100px, 120 si quieres 150px, y así sucesivamente.

También puede usar rsvg-convert para generar PNG. Es mucho mejor rasterizar el archivo que ImageMagick, al menos en mi experiencia. Tenga en cuenta que necesita cambiar -fa png, necesita cambiar el patrón de guardado de salida de 's/svg$/new.svg/'a 's/svg$/png/'e ingresa el ancho y la altura que desea como valores de píxel.

for old in *; do
    new="$(echo "$old" | sed -e 's/svg$/png/')"
    rsvg-convert "$old" -w 200 -h 200 -f png -o "$new"
done
Ananda Mahto
fuente
Por cierto, solo estoy asumiendo que necesita hacer esto en modo por lotes para una gran cantidad de SVG. Si no es así, aún puede usar el rsvg-convertcomo tal: rsvg-convert noun_project_1576.svg -w 320 -h 160 -f svg -o noun_project_1576-skewed.svgque tomará un archivo fuente llamado "noun_project_1576" y lo sesgará para que sea 400 px por 200 px y renómbrelo "noun_project_1576-skewed".
Ananda Mahto
@julien_c, solo siguiendo: ¿intentaste esta sugerencia y tuviste suerte?
Ananda Mahto
Copie y pegue el código en el terminal, pero devuelva sed: -e expresión # 1, char 14: comando 's' no determinado Falta argumento para -o ... Cualquier sugerencia
raphie
Cambié `a" y ahora recibo un error al guardar en el archivo: echo svgfile.svg | sed -e 's / svg $ / 2.svg'
raphie
Genial: será aún mejor cuando se corrija el librsvgerror de texto de flujo ...
Joce
7

Actualmente no hay una forma nativa de hacerlo en Inkscape. La única forma es cambiar el tamaño del contenido y el documento por separado.

julien_c
fuente
2

Si bien hay algunas maneras de hacerlo, como se señaló aquí , una forma que puede funcionar realmente bien es usar a viewBox. Simplemente modifique el contenido de la etiqueta SVG de la siguiente manera:

<svg
 width="1280"
 height="800"
 viewBox="0 0 1280 800">
    <!-- More markup... --!>
</svg>

Lo que viewBoxhace es definir un sistema de coordenadas interno para el documento. Luego puede escalar fácilmente el documento simplemente modificando los atributos widthy heightsegún sea necesario.

Sin embargo, tenga en cuenta que hay algunos inconvenientes. Por un lado, solo hay ciertos contextos en los que esto funciona, específicamente si de alguna manera estás incluyendo directamente el documento SVG en tu página de marcado. Usar una <img>etiqueta con esto puede o no producir resultados inesperados. Tendrá que hacer su propia investigación para descubrir la mejor manera de hacerlo.

Andrew Gray
fuente
2
Esto no funciona para mí, y no entiendo por qué. Si edito el ancho y la altura pero dejo el viewBox como está: cuando Chrome muestra el archivo svg sin formato, muestra solo una pequeña parte del contenido. Cuando Inkscape lo procesa, muestra todo el contenido, pero es mucho más grande que la página, que es la misma porción pequeña (superior izquierda) que mostró Chrome. Entonces, en conjunto: el contenido no se escala según las coordenadas de la caja de visualización. Mi SVG tiene varios elementos svg secundarios, pero todos se transforman en función de (supongo) las coordenadas del cuadro de vista.
CPBL
Trabajó para mí en Inkscape 0.92.3, Firefox 66 y Chromium 73.
Socowi