Como encaixar desenhos svg em suas telas na linha de comando?


13

Cortar .svgarquivos na linha de comando é simples: $ inkscape --verb=FitCanvasToDrawing --verb=FileSave --verb=FileClose *.svg

Eu preciso fazer o oposto. Quero encaixar o desenho em uma 64 x 64tela de pontos (já definida em todos os .svgarquivos). Infelizmente o Inkscape não fornece um FitDrawingToCanvascomando. Além disso, o acessório deve manter a proporção do desenho.

Se isso importa: estou usando o Ubuntu raring.


1
O redimensionamento após a montagem da tela no desenho faz o trabalho? Veja graphicdesign.stackexchange.com/questions/6574/…
Takkat

Duas perguntas: (1) o tamanho da tela já está definido em cada instância, mas os desenhos são maiores que a tela; ou você está inserindo um desenho svg em um documento svg diferente ?; (2) "mantenha a proporção": isso é confuso à luz da tela quadrada de 64 pontos mencionada em suas perguntas, mas você tem um processo de decisão automatizado proposto para lidar com materiais não quadrados? por exemplo, a altura deve ser de 64 pontos em todos os casos ... #
horatio

@ Takkat: Obrigado pela dica. O fluxo de trabalho funciona, mas a proporção é destruída. Vai procurar uma solução para isso ...
Stefan Endrullis

@horatio: (1) o desenho é menor que a tela e sim, ambos estão no mesmo arquivo. (2) Quero dimensionar o desenho no ponto em que max (drawingWidth, drawingHeight) = 64pt.
Stefan Endrullis 30/10

@Takkat: rsvg-convertido tem um argumento --keep-aspect-ratio :)
Stefan Endrullis

Respostas:


2

Encontrei uma maneira de fazer isso nesta pergunta: Inkscape - Center Drawing to Page via linha de comando / terminal

Com "foo.svg" como a imagem a editar:

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

Para editar todas as imagens svg no diretório atual:

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

Mas este segundo comando abre uma tonelada de janelas, o que fará com que o seu computador trave se você estiver editando muitas imagens. Somente para Linux , este comando funcionará melhor:

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

Para o comando acima, se algum dos arquivos tiver links simbólicos, o Inkscape editará o arquivo de destino ao qual o link simbólico aponta. Se você não deseja que o Inkscape faça isso, é possível filtrar quaisquer links simbólicos com 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


Enquanto estou nisso, é melhor postar o script bash que fiz para isso:

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

Eu chamei inkscape-centere executei assim:

inkscape-center <file-or-directory>

São necessários quantos argumentos você desejar, para que você possa fazer algo assim:

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

Cuidado - Se você especificar um diretório em vez de um arquivo, ele editará todos os arquivos svg nesse diretório.


1

Você pode usar o viewBox para realizar o que deseja. Não sei se existe uma maneira de fazer isso no Inkscape, mas como o SVG é um formato padrão e pode haver outra ferramenta que fará o trabalho que você deseja. Uma pesquisa rápida por "ferramentas de linha de comando svg" revelou alguns resultados interessantes, incluindo este para a criação de ícones CSS.

Uma segunda opção seria escrever sua própria ferramenta no idioma de sua escolha. A essência básica é definir a viewBox para a altura do seu documento e, em seguida, definir a largura e a altura do documento que desejar. Por fim, defina o atributo preserveAspectRatio.

Veja como são as modificações descritas acima em um documento originalmente de 744x1052.

<svg
   width="64"
   height="64"
   viewBox="0 0 744 1052"
    preserveAspectRatio="xMinYMin slice"
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.