Como posso dimensionar um SVG via linha de comando?

14

Um SVG tem essas propriedades, que determinam seu tamanho:

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

Eu gostaria de escalar um dado SVG para um com 400pt pela linha de comando sem quebrar a proporção. Isto significa que os três valores acima têm que ser alterados corretamente e todos os pontos no seguinte código svg. Eu não quero alterar apenas o tamanho da tela, mas todo o tamanho da imagem svg. E eu não quero fazer isso com uma GUI / manualmente, mas eu quero fazer isso com o CLI.

Como posso dimensionar automaticamente um SVG por linha de comando para uma determinada largura de banda?

Razão: A visualização da Wikipedia parece ruim se a imagem é muito pequena. Veja esta imagem como um exemplo.

Como eu faria essa tarefa com o Inkscape-GUI

  1. Shift + Ctrl + M (Transformar)
  2. Escala (marque "dimensionar proporcionalmente")
  3. Insira a largura
  4. Shift + Ctrl + D (propriedades do documento)
  5. Ajustar a página à seleção

Agora eu quero um modo CLI automático para fazer isso.

A propósito, o inkscape simplesmente aplicou

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

para toda a imagem.

    
por Martin Thoma 16.09.2012 / 19:15

2 respostas

11

rsvg-convert do pacote librsvg2-bin pode redimensionar o svg.

Veja esta resposta para instruções completas.

    
por 19.01.2013 / 17:40
2

Se você quiser apenas alterar uma imagem, abra-a em um editor de texto (por exemplo, emacs) e altere a entrada de largura.

Para um geekier, somente abordagem CLI, use sed:

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

Isso não escalará a imagem, apenas defina sua largura.

Uma maneira melhor, talvez, mas certamente uma que pode ser executada em lote para várias imagens, é usar o inkscape a partir da linha de comando:

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

Para muitos arquivos (supondo que você queira que todos tenham a mesma largura), faça o seguinte. Requer conversão para png e assume que não há espaços em seus nomes de arquivos:

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

O convert do ImageMagick foi a minha primeira escolha, mas parece quebrar ao escalar svgs.

    
por 16.09.2012 / 20:16