Eu tenho um arquivo vetorial baixado (formato AI). O arquivo contém imagens vetoriais simples de várias raças de cães. Carreguei o arquivo no inkscape, desagrupei-o e gostaria de salvar um vetor de cachorro como um arquivo separado. Existe uma maneira de automatizar isso com o Inkscape ou alguma outra ferramenta de OS / Freeware? Caso contrário, terei que selecionar cada um e Salvar como. Qualquer ajuda é muito apreciada!
ATUALIZAÇÃO Obrigado a JSBueno pelo conselho sobre a edição do arquivo SVG real. Não percebi que o SVG era apenas um arquivo XML. Deveria ser capaz de percorrer facilmente o arquivo e exportar cada cão como um arquivo separado. A propósito, isso será muito mais rápido do que fazê-lo através da interface que era o objetivo deste post. Obrigado a todos pelo conselho.
Respostas:
Encontrei duas soluções para exportar vários objetos do Inkscape como SVGs. Esses métodos têm o benefício de serem scripts que podem ser executados automaticamente e não precisam de edição de SVGs em editores de texto.
O script svg-objects-export funciona exportando todos os objetos com base em expressões regulares. No seu caso, funcionaria exportando todos os objetos com um ID específico. Para usá-lo primeiro clone ou faça o download do script no Github .
No Inkscape, você precisa alterar o ID de todos os objetos que você deseja exportar para ter o mesmo padrão de nome de arquivo. Para fazer isso, abra a caixa de diálogo Propriedades do objeto, vá em Objeto> Propriedades do objeto ou pressione Ctrl+ Shift+ O. No campo ID, altere todos para ter o mesmo ID do nome da base
Dog_1
, por exemploDog_2
,Dog_3
etc (os objetos não podem ter o mesmo ID).Com o arquivo salvo e o script baixado, em um terminal, execute o seguinte comando
python svg-objects-export.py --pattern 'Dog_*' /path/to/your/file.svg
Isso exportará todos os objetos com o ID do nome da base "Dog_".
A extensão inx-exportobjects inkscape simplesmente exportará todos os objetos selecionados. Para usá-lo primeiro clone ou baixe a extensão do Gitlab . Para instalá-lo, copie os arquivos
export_objects.inx
eexport_objects.py
para.config/inkscape/extensions/
. No Inkscape, você terá uma opção chamada "Objetos para arquivos ..." em Extensões> Exportações. Selecione os objetos que você deseja instalar e selecione esta opção.Nesta caixa de diálogo, simplesmente altere o Diretório de exportação para o local em que deseja salvar seus arquivos, altere o Nome da base para o novo nome dos arquivos e pressione Aplicar.
Os arquivos serão exportados para o diretório especificado.
Cada uma das soluções tem muitas outras opções, como exportação de gif animado, com as quais você definitivamente deve experimentar.
fonte
Dependendo da pré-condição, de que todos os seus objetos são agrupados e não combinados em grupos maiores, aqui está como fazê-lo. (Eu usei gatos no exemplo, porque os cães não estavam disponíveis).
No canto inferior direito, você vê um gato realçado, objeto id 5358, que é um caminho único; por isso, adicionei um piso verde mais tarde, que foi alterado para o objeto 5364, que ocorrerá mais tarde. Portanto, não deixe confundi-lo. :)
Você obtém o editor xml pressionando o botão 4 da direita (seta 1).
Alterei g5358 para g-cat-5358 (campo 4) para facilitar a ferramenta de texto escolher esses objetos que funcionam para a maioria dos elementos que não colidem com xml-svg-names (color, meta, id, ... )
Na janela esquerda, você vê que já existe uma entidade renomeada, g-cat-5312, próxima à parte superior no mesmo nível de indentação.
O Inkscape organiza IDs exclusivos para grupos, mas eles não precisam ter o formato gNUMBER, você pode misturar outros caracteres. Apenas não escolha um identificador já existente.
Depois de alterar o identificador, pressione 'setzen (set)' (5) para confirmar sua alteração. Você vê uma interface alemã aqui, YMMV.
Salve o svg (como demo-cats.svg). Agora, mudamos para scripts.
O que isso faz? Ele greps (procure com grep) pelo padrão "g-cat-", que é o começo de nossa seção interessante.
id=${cat//[^0-9]/}
extrai o ID no bash da expressão. O Echo imprime na tela, o que deve ajudar a encontrar o erro, se algo der errado. head -n 53 demo-cats.svg pega as primeiras 53 linhas do svg, que contém todo o svg-boilerplate. Dependendo das suas configurações com diferentes formatos svg (inkscape, compactado, svg normal, inkscape-compactado), isso pode variar. Comnl demo-cats.svg | less
você pode n umerate as l ines, para encontrar o ponto de corte para a direita no seu caso.^ Até esta parte, as linhas devem ser incluídas.
O próximo comando é feito com o s tream ed itor sed:
sed -n "/$cat/,/^ <\/g>/p" demo-cats.svg;
diz (-n) sem impressão (mas) searche para o grupo gato, até a marca de fechamento g no nível de recuo 2, que é de 4 espaços antes do</g>
se você não fez altere as preferências do Inkscape, das quais você poderá se lembrar se o fez. Em seguida, adicione a marca de fechamento para SVG:echo "</svg>"
. Escreva a saída no arquivo 'cat- $ id.svg' (isso substitui os arquivos existentes silenciosamente).Então, acabo com dois arquivos: cat-5312.svg e cat-5364.svg.
Uma solução mais elegante deve ser possível com xmlstarlet ou ferramentas semelhantes, criadas para pesquisar e editar arquivos xml. Infelizmente, não estou acostumado a isso e não o funcionou depois de ler 10 minutos de documentação. Você não precisaria renomear os grupos no começo.
fonte