No Inkscape, redimensione o documento e seu conteúdo ao mesmo tempo

25

Eu tenho lutado para fazer algo que parece bastante básico:

No Inkscape, como redimensionar o documento e seu conteúdo (ou seja, desenhos) ao mesmo tempo?

Um pouco de contexto: desejo redimensionar um número bastante grande de documentos SVG do The Noun Project (geralmente são documentos de 100x100px) sem precisar redimensionar explicitamente os desenhos reais.

NB: Se houver uma solução de linha de comando, também posso trabalhar com isso!

julien_c
fonte
Não tenho certeza do seu objetivo final, mas AFAIK, a área do documento é um tanto arbitrária, além da impressão, onde você tem a opção de imprimir apenas a área do documento. No entanto, você também pode imprimir apenas a área do objeto, para que possa ser uma maneira de contornar o seu obstáculo.
DA01 17/03/12
@ DA01 Bem, acho que o documento é bastante útil quando você exporta para Bitmap (que é o que estou fazendo).
21712
A propósito, existe uma maneira de redimensionar um objeto que não envolve arrastar cantos, mas onde você especificaria explicitamente um tamanho? Essa pode ser a coisa que eu estou procurando :) #
307 julien_c
11
mesmo assim é uma opção arbitrária. Você pode desenhar tão facilmente uma caixa de contenção quanto sua 'zona' de exportação. De fato, é assim que geralmente prefiro fazê-lo. Quanto ao redimensionamento, você pode selecionar seus objetos e, em seguida, a) use a barra de status na parte superior e digite as alterações de tamanho ou b) vá para OBJECT> TRANSFORM e insira valores no palete Transform
DA01
@julien_c: Eu acho que o ponto aqui é que os objetos são arte vetorial reta e não têm tamanho em si até que você os imprima em um dispositivo raster (ou arquivo). Seu tamanho (polegadas, pixels, côvados) é, de fato, irrelevante.
horatio

Respostas:

24

Você não mencionou o SO que está executando. Estou usando o Ubuntu e consegui usar o librsvg2 com sucesso.

Se você tem acesso ao Ubuntu, aqui está o que você pode fazer. Primeiro, instale o librsvg2:

sudo apt-get install librsvg2-bin

Em seguida, cdno diretório que possui seus SVGs (verifique se ele possui apenas SVGs!) E use um comando como o seguinte:

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

Isso criará um novo lote de SVGs com dimensões de 200 a 200 pixels e salvos como "nome-do-arquivo original.new.svg"

Calcular dimensões é um pouco confuso. Para converter SVG para SVG, você precisa fazer um pouco de matemática. As opções "height" e "width" no rsvg-convert usam pt, e não px, nesses casos; portanto, use 80 se desejar 100 px, 120 se quiser 150 px e assim por diante.

Você também pode usar o rsvg-convert para gerar PNGs. É muito melhor rasterizar o arquivo que o ImageMagick, pelo menos na minha experiência. Observe que você precisa alterar -fpara png, é necessário alterar o padrão de salvamento de saída de 's/svg$/new.svg/'para 's/svg$/png/'e insira a largura e a altura que deseja como valores de pixel.

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
fonte
A propósito, apenas suponho que você precise fazer isso no modo de lote para um grande número de SVGs. Caso contrário, você ainda pode usar o seguinte rsvg-convert: o rsvg-convert noun_project_1576.svg -w 320 -h 160 -f svg -o noun_project_1576-skewed.svgque usará um arquivo de origem chamado "noun_project_1576" e inclinará para 400px por 200px e renomeá-lo "noun_project_1576-skewed".
Ananda Mahto
@julien_c, apenas acompanhando: você tentou esta sugestão e teve alguma sorte com ela?
Ananda Mahto
Copiar e colar o código no terminal, mas retorno sed: expressão -e # 1, char 14: unterminted Faltando argumento de comando 's' para -o ... Alguma sugestão
Raphie
Mudei `para" e agora estou tendo salvar em arquivo de erro: echo svgfile.svg | sed -e 's / SVG $ / 2.svg'
Raphie
Grande - será ainda melhor quando librsvg's fluiu bug texto é fixo ...
Joce
7

Atualmente, não existe uma maneira nativa de fazer isso no Inkscape. A única maneira é redimensionar o conteúdo e o documento separadamente.

julien_c
fonte
2

Embora existam algumas maneiras de fazer isso - como observado aqui - uma maneira que pode funcionar muito bem é usar a viewBox. Você simplesmente modifica o conteúdo da tag SVG da seguinte maneira:

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

O que viewBoxfaz é definir um sistema de coordenadas interno para o documento. Você pode facilmente dimensionar o documento simplesmente modificando os atributos widthe heightconforme necessário.

Observe que existem algumas desvantagens. Por um lado, há apenas certos contextos nos quais isso funciona, especificamente se você estiver de alguma forma incluindo diretamente o documento SVG na sua página de marcação. O uso de uma <img>tag com isso pode ou não gerar resultados inesperados. Você precisará fazer algumas de suas próprias pesquisas para descobrir a melhor maneira de fazer isso.

Andrew Gray
fonte
2
Isso não funciona para mim, e eu não entendo o porquê. Se eu editar a largura e a altura, mas deixar o viewBox como está: Quando o Chrome renderiza o arquivo svg bruto, ele mostra apenas uma pequena parte do conteúdo. Quando o Inkscape o processa, ele mostra todo o conteúdo, mas é muito maior que a página, que é a mesma pequena parte (superior esquerda) mostrada pelo Chrome. Então, no conjunto: o conteúdo não está em escala de acordo com as coordenadas da caixa de visualização. Meu SVG possui vários elementos filhos svg, mas todos são transformados com base nas (suponho) coordenadas da caixa de exibição.
CPBL 15/04
Trabalhei para mim no Inkscape 0.92.3, Firefox 66 e Chromium 73.
Socowi 03/04