Salvare più oggetti da un file vettoriale in file separati usando Inkscape / OS / Freeware


9

Ho un file vettoriale scaricato (formato AI). Il file contiene semplici immagini vettoriali di varie razze canine. Ho caricato il file in inkscape, li ho separati e vorrei un modo per salvare ogni vettore di cane come file separato. C'è un modo per automatizzare questo con Inkscape o qualche altro strumento OS / Freeware? Altrimenti dovrò selezionare ciascuno e Salva con nome. Qualsiasi aiuto è molto apprezzato!

AGGIORNAMENTO Grazie a JSBueno per i consigli sulla modifica del file SVG attuale. Non mi rendevo conto che SVG era solo un file XML. Dovrei essere in grado di scorrere facilmente il file ed esportare ogni cane come file separato. Questo, a proposito, sarà molto più veloce di farlo attraverso l'interfaccia che era l'obiettivo di questo post. Grazie a tutti per il consiglio.


Perché non puoi selezionarli e salvarli come? Ci sono davvero così tante immagini che una soluzione automatizzata è obbligatoria?
Scott,

2
Per essere in grado di automatizzare ciò, dovresti essere in grado di definire elementi "cane" da estrarre dal file svg. In realtà gli elementi del tuo cane saranno costituiti da singole linee composte fino a gruppi ritagliati. Ti suggerisco di imparare le scorciatoie da tastiera richieste, selezionare un po 'di musica e andare avanti con esso.

Sì, ho più di 80 oggetti singoli per questo. Sto solo cercando un modo più veloce ma lo farò manualmente se è quello che serve.
dinki,

Puoi sicuramente scriverlo. Ad esempio, ci vorrebbe qualcuno esperto in Python, almeno il tempo necessario per "salvare come" 30 dei tuoi 80 cani per creare un tale script. Un programmatore non esperto, o anche qualcuno esperto ma non conoscente le funzioni / XML di inkscape helerp potrebbe impiegare molto più tempo del salvataggio degli 80 cani.
jsbueno,

In definitiva, potresti semplicemente scrivere il file SVG in un editor di testo (Notepad ++) e verificare se ogni cane è contenuto in un tag SVG separato - tehm è una questione di copia / incolla del testo invece di farlo con immagini nell'interfaccia utente di inkscape . Potrebbe essere ancora più veloce usando l'interfaccia utente di inkscape.
jsbueno,

Risposte:


5

Sono state trovate due soluzioni per esportare più oggetti da Inkscape come SVG. Questi metodi hanno il vantaggio di essere script che possono essere eseguiti automaticamente e che non richiedono la modifica di SVG negli editor di testo.

  1. SVG-oggetti-export

Lo script svg-objects-export funziona esportando tutti gli oggetti basati su espressioni regolari. Nel tuo caso funzionerebbe esportando tutti gli oggetti con un determinato ID. Per usarlo prima clona o scarica lo script da Github .

In Inkscape devi modificare l'ID di tutti gli oggetti che desideri esportare per avere lo stesso modello di nome file. Per fare ciò aprire la finestra di dialogo Proprietà oggetto andando su Oggetto> Proprietà oggetto o premendo Ctrl+ Shift+ O. Nel campo ID, modificali tutti per avere lo stesso ID nome di base Dog_1, ad es . Dog_2, Dog_3Ecc. (Gli oggetti non possono avere lo stesso ID).

inserisci qui la descrizione dell'immagine

Con il file salvato e lo script scaricato, in un terminale eseguire il comando seguente

python svg-objects-export.py --pattern 'Dog_*' /path/to/your/file.svg

Questo esporterà tutti gli oggetti con l'ID basename "Dog_".

  1. INX-exportobjects

L'estensione inkscape inx-exportobjects esporterà semplicemente tutti gli oggetti selezionati. Per usarlo prima clona o scarica l'estensione da Gitlab . Per installarlo copia i file export_objects.inxe export_objects.pysu .config/inkscape/extensions/. In Inkscape avrai un'opzione chiamata "Oggetti su file ..." in Estensioni> Esportazioni. Seleziona gli oggetti che desideri installare e seleziona questa opzione.

inserisci qui la descrizione dell'immagine

In questa finestra di dialogo è sufficiente modificare la Directory di esportazione nel punto in cui si desidera salvare i file e modificare il Nome di base con il nuovo nome dei file, quindi premere Applica.

inserisci qui la descrizione dell'immagine

I file verranno esportati nella directory specificata.

Ognuna delle soluzioni ha molte altre opzioni, come l'esportazione GIF animata, che dovresti assolutamente sperimentare.


Ottima soluzione @hellocatfood Solo un consiglio: prima di esportare, puoi ridimensionare la tela. Nel mio caso, avevo molte icone. Ho scoperto la larghezza massima e l'altezza massima delle icone. E quindi ridimensionare la tela alla rispettiva altezza x larghezza. Quindi, selezionare tutti gli oggetti e allinearli orizzontalmente e verticalmente, quindi avviare il processo di esportazione. In questo modo, avrai gli svg con altezza e larghezza adeguate.
Anish Nair,

1

A seconda della condizione preliminare, che tutti i tuoi oggetti siano raggruppati e non combinati in gruppi più grandi stessi, ecco come farlo. (Ho usato i gatti nell'esempio, perché i cani non erano disponibili).

inserisci qui la descrizione dell'immagine In basso a destra vedi un gatto evidenziato, ID oggetto 5358, che è un singolo percorso, quindi ho aggiunto un piano verde in seguito che lo ha cambiato in oggetto 5364 che si verificherà in seguito, quindi non lasciarti confondere. :)

Ottieni l'editor xml premendo il pulsante 4 da destra (freccia 1).

Ho cambiato g5358 in g-cat-5358 (campo 4) per rendere più semplice la selezione di questi oggetti da parte di uno strumento di testo che funziona per la maggior parte degli elementi che non si scontrano con i nomi xml-svg (color, meta, id, ... ).

Nella finestra di sinistra vedi che esiste già un'entità rinominata, g-cat-5312 vicino alla cima allo stesso livello di rientro.

Inkscape organizza ID univoci per gruppi, ma non devono necessariamente essere nella forma gNUMBER, puoi mescolare altri personaggi. Basta non scegliere un identificatore già esistente.

Dopo aver modificato l'identificatore, premi 'setzen (set)' (5) per confermare la modifica. Qui vedi un'interfaccia tedesca, YMMV.

Salvare lo svg (come demo-cats.svg). Passiamo ora allo scripting.

for cat in $( grep g-cat- demo-cats.svg )
do
  id=${cat//[^0-9]/}
  echo $id
  (head -n 53 demo-cats.svg; sed -n "/$cat/,/^    <\/g>/p" demo-cats.svg; echo "</svg>" ) > cat-${id}.svg
done

Che cosa fa? Greps (cerca con grep) per il modello "g-cat-" che è l'inizio della nostra sezione interessante. id=${cat//[^0-9]/}estrae l'id in bash dall'espressione. Echo lo stampa sullo schermo che dovrebbe aiutare a trovare il bug se qualcosa va storto. head -n 53 demo-cats.svg prende le prime 53 righe dallo svg, che contiene tutta la svg-boilerplate. A seconda delle impostazioni con diversi formati svg (inkscape, compresso, svg normale, inkscape compresso) questo può variare. Con nl demo-cats.svg | lessè possibile n umerate i l Ines, per trovare il punto di taglio a destra nel tuo caso.

  </metadata>
  <g
     inkscape:label="Layer 1"
     inkscape:groupmode="layer"
     id="layer1">
     <g

^ Fino a questa parte, le linee dovrebbero essere incluse.

Il comando successivo viene fatto con il s tream ed itor sed: sed -n "/$cat/,/^ <\/g>/p" demo-cats.svg;dice (-n) senza stampa (ma) searche per il gruppo gatto, fino al tag di chiusura g al livello di rientro 2, che è di 4 spazi prima del </g>se non lo facessi cambia le preferenze di Inkscape, che potresti ricordare se lo facessi. Quindi aggiungere il tag di chiusura per SVG: echo "</svg>". Scrivi l'output nel file 'cat- $ id.svg' (questo sovrascrive i file silenziosamente esistenti).

Quindi finisco con due file: cat-5312.svg e cat-5364.svg.

Una soluzione più elegante dovrebbe essere possibile con xmlstarlet o strumenti simili, creati per cercare e modificare file xml. Purtroppo non ci sono abituato e non ho funzionato dopo aver letto 10 minuti di documentazione. Non avresti bisogno di rinominare i gruppi all'inizio.

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.