Come adattare i disegni svg alla loro tela sulla riga di comando?


13

Ritagliare i .svgfile dalla riga di comando è semplice: $ inkscape --verb=FitCanvasToDrawing --verb=FileSave --verb=FileClose *.svg

Devo fare il contrario. Voglio adattare il disegno in una 64 x 64tela punti (già impostata in tutti i .svgfile). Sfortunatamente Inkscape non fornisce un FitDrawingToCanvascomando. Inoltre, il raccordo deve mantenere le proporzioni del disegno.

Se è importante: sto usando Ubuntu raring.


1
Ridimensionerebbe dopo aver adattato la tela al disegno fare il lavoro? Vedi graphicdesign.stackexchange.com/questions/6574/…
Takkat

Due domande: (1) la dimensione della tela è già impostata in ciascuna istanza, ma i disegni sono più grandi della tela; o stai inserendo un disegno svg in un diverso documento svg ?; (2) "Mantieni proporzioni": questo è confuso alla luce della tela quadrata a 64 punti menzionata nelle tue domande, ma hai un processo decisionale automatizzato proposto per come gestire il materiale non quadrato? ad esempio, l'altezza dovrebbe essere 64pt in tutti i casi ...
horatio

@Takkat: grazie per il suggerimento. Il flusso di lavoro funziona, ma le proporzioni vengono distrutte. Cercherà una soluzione per questo ...
Stefan Endrullis,

@horatio: (1) il disegno è più piccolo della tela e sì, entrambi sono nello stesso file. (2) Voglio ridimensionare il disegno al punto che max (drawingWidth, drawingHeight) = 64pt.
Stefan Endrullis,

@Takkat: rsvg-convert ha un argomento --keep-aspect-ratio :)
Stefan Endrullis,

Risposte:


2

Ho trovato un modo per farlo in questa domanda: Inkscape - Centra disegno su pagina tramite riga di comando / terminale

Con "foo.svg" come immagine da modificare:

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

Per modificare tutte le immagini svg nella directory corrente:

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

Ma questo secondo comando apre un sacco di finestre, che causeranno l'arresto anomalo del tuo computer se stai modificando troppe immagini. Solo per Linux , questo comando funzionerà meglio:

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

Per il comando precedente, se uno qualsiasi dei file è un collegamento simbolico, Inkscape modificherà il file di destinazione a cui punta il collegamento simbolico. Se non vuoi che Inkscape esegua questa operazione, puoi filtrare eventuali collegamenti simbolici con questo 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


Mentre ci sono, potrei anche pubblicare lo script bash che ho creato per questo:

#!/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

L'ho chiamato inkscape-centered eseguito in questo modo:

inkscape-center <file-or-directory>

Prende tutti gli argomenti che vuoi, quindi puoi fare qualcosa del genere:

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

Fai attenzione : se specifichi una directory anziché un file, modificherà ogni file svg in quella directory.


1

È possibile utilizzare viewBox per realizzare ciò che si desidera. Non so se c'è un modo per farlo dall'interno di Inkscape, ma poiché SVG è un formato standard e potrebbe esserci un altro strumento che farà il lavoro che desideri. Una rapida ricerca di "strumenti da riga di comando svg" ha rivelato alcuni risultati interessanti, incluso questo per la creazione di icone CSS.

Una seconda opzione sarebbe quella di scrivere il tuo strumento nella tua lingua preferita per farlo. L'essenza di base è impostare viewBox all'altezza del documento, quindi impostare la larghezza e l'altezza del documento desiderate. Infine, imposta l'attributo preservAspectRatio.

Ecco come appaiono le modifiche sopra descritte in un documento originariamente 744x1052.

<svg
   width="64"
   height="64"
   viewBox="0 0 744 1052"
    preserveAspectRatio="xMinYMin slice"
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.