Come posso ridimensionare un SVG dalla riga di comando?


17

Un SVG ha queste proprietà, che ne determinano le dimensioni:

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

Vorrei ridimensionare un determinato SVG in base a con la 400ptriga di comando senza interrompere le proporzioni. Questo significa che i tre valori sopra devono essere cambiati correttamente e tutti i punti nel seguente codice svg. Non voglio cambiare solo le dimensioni della tela, ma l'intera dimensione dell'immagine in formato svg. E non voglio farlo con una GUI / a mano, ma voglio farlo con la CLI.

Come posso ridimensionare automaticamente un SVG dalla riga di comando ad una data larghezza?

Motivo: l'anteprima di Wikipedia sembra negativa se l'immagine è troppo piccola. Vedi questa immagine come esempio.

Come farei questo compito con Inkscape-GUI

  1. Maiusc + Ctrl + M (Trasforma)
  2. Scala (selezionare "scala proporzionalmente")
  3. Inserisci la larghezza
  4. Maiusc + Ctrl + D (Proprietà del documento)
  5. Adatta la pagina alla selezione

Ora voglio un modo CLI automatico per farlo.

A proposito, inkscape si è semplicemente applicato

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

per l'intera immagine.


Quale sistema operativo usi?
terdon,

Ubuntu 10.04.4 LTS (ho intenzione di aggiornarlo ...)
Martin Thoma,

I file SVG sono solo file di testo. Si può essere in grado di modificare il file e modificare i width, heightei viewBoxvalori a qualcosa di simile width="100%" height="100%" viewBox="0 0 400 212.58569".
martineau,

So che sono solo file di testo. Ma se modifico solo questi valori, la dimensione dell'immagine non cambia. Cambia solo la dimensione della tela. La modifica manuale non è un'opzione, ho dichiarato esplicitamente che desidero cambiarla automaticamente.
Martin Thoma,

Sì, so che hai chiesto un modo automatizzato per farlo, ma ho pensato che se avessi potuto capire cosa cambiare, per quanto riguarda il testo, allora potresti automatizzarlo utilizzando uno qualsiasi dei numerosi strumenti di modifica del testo disponibili (come come sednella risposta di @ terdon). Un problema che potresti incontrare è che i valori necessari potrebbero essere diversi rispetto a qualsiasi altro file .svg a cui vuoi fare la stessa cosa.
martineau,

Risposte:


15

rsvg-convertdal librsvg2-binpacchetto può ridimensionare svg's.

Vedi questa risposta per le istruzioni complete.


4
rsvg-convert -a -w 500 -f svg Vector-triangle-inequality.svg -o Result.svglavorato. Ma rsvg-convert sembra fare molto di più che ridimensionare.
Martin Thoma,

2
@moose, tuttavia, come notato in quella risposta, rsvg-convert utilizza punti, non pixel. Se sei fortunato, puoi semplicemente dividere la dimensione desiderata per 1,25. Tuttavia, se vuoi qualcosa come 24px (19.2 in punti), sei sfortunato, dal momento che non è disposto a mettere un non intero come larghezza o altezza (non sono sicuro che SVG lo consenta).
Matthew Flaschen,

@MartinThoma Sì, davvero. Il file di output SVG è circa il doppio della dimensione originale. Mi chiedo perché? La lettura rsvg-convert --helpnon fornisce alcun indizio.
Serge Stroobandt,

1
rsvg convert sembra anche convertire i percorsi tracciati in percorsi delineati. Potresti non volerlo (so che non lo so)
scruss

1
Questo strumento sembra incepparsi trasformando in ogni elemento e in realtà non cambia le dimensioni originali.
partenza

3

Se vuoi solo cambiare un'immagine, aprila in un editor di testo (ad esempio emacs) e modifica la voce di larghezza.

Per un geekier, solo approccio CLI, usa sed:

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

Questo non ridimensionerà l'immagine, ma solo la sua larghezza.


Un modo migliore, forse, ma sicuramente uno che può essere eseguito in modalità batch per molte immagini è usare inkscape dalla riga di comando:

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

Per molti file (supponendo che tutti abbiano la stessa larghezza), procedi come segue. Richiede la conversione in png e presuppone che non ci siano spazi nei nomi dei file:

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

La conversione di ImageMagick è stata la mia prima scelta, ma sembra interrompersi durante il ridimensionamento di svgs.


7
Il tuo comando inkscape si traduce in un PNG, ma io voglio un SVG. Il comando svg modifica solo la dimensione della tela, ma non la dimensione dell'immagine. Non puoi semplicemente usare un editor di testo e modificare solo i valori che ho menzionato sopra. Penso di dover chiarire la domanda.
Martin Thoma,

devi anche aggiungere un tag: ... "> <g transform =" scale (2) "> <path .... /> </g> </svg> per ridimensionare l'immagine con lo stesso fattore.
Stofke
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.