Enregistrez plusieurs objets du fichier vectoriel dans des fichiers séparés à l'aide d'Inkscape / OS / Freeware

9

J'ai un fichier vectoriel téléchargé (format AI). Le fichier contient des images vectorielles simples de différentes races de chiens. J'ai chargé le fichier dans Inkscape, les ai dissociés et je voudrais un moyen de sauvegarder chaque vecteur de chien dans un fichier séparé. Existe-t-il un moyen d'automatiser cela avec Inkscape ou un autre outil OS / Freeware? Sinon, je devrai sélectionner chacun et enregistrer sous. Toute aide est très appréciée!

MISE À JOUR Merci à JSBueno pour les conseils sur l'édition du fichier SVG réel. Je ne savais pas que SVG n'était qu'un fichier XML. Je devrais être capable de parcourir facilement le fichier et d'exporter chaque chien dans un fichier distinct. Soit dit en passant, ce sera beaucoup plus rapide que de le faire via l'interface qui était l'objectif de ce post. Merci à tous pour les conseils.

dinki
la source
Pourquoi ne pouvez-vous pas sélectionner chacun et enregistrer sous? Y a-t-il vraiment tellement d'images qu'une solution automatisée est obligatoire?
Scott
2
Pour être en mesure d'automatiser cela, vous devez être en mesure de définir des éléments "dog" à extraire du fichier svg. En réalité, les éléments de votre chien se composeront de lignes composées uniques jusqu'à des groupes coupés. Je vous suggère d'apprendre les raccourcis clavier requis, de sélectionner de la musique et de continuer.
Oui, j'ai plus de 80 objets individuels pour celui-ci. Je cherche juste un moyen plus rapide mais le ferai manuellement si c'est ce qu'il faut.
dinki
Vous pouvez certainement l'écrire. Il faudrait, par exemple, à une personne qualifiée en Python, au moins le temps nécessaire pour "enregistrer sous" 30 de vos 80 chiens pour créer un tel script. Un codeur non qualifié, ou même quelqu'un de compétent mais ne connaissant pas les fonctions d'assistance Inkscape / XML pourrait prendre beaucoup plus de temps que de sauver les 80 chiens.
jsbueno
Ultimement, vous pouvez simplement stylo le fichier SVG dans un éditeur de texte (Notepad ++), et vérifier si chaque chien est contenu dans une balise SVG distincte - tehm c'est une question de copier / coller du texte au lieu de le faire avec des images sur l'interface utilisateur d'Inkscape . Cela pourrait encore être plus rapide en utilisant l'interface utilisateur d'Inkscape.
jsbueno

Réponses:

5

Il y a deux solutions que j'ai trouvées pour exporter plusieurs objets d'Inkscape en tant que SVG. Ces méthodes ont l'avantage d'être des scripts qui peuvent être exécutés automatiquement et n'ont pas besoin d'éditer des SVG dans des éditeurs de texte.

  1. svg-objets-export

Le script svg-objects-export fonctionne en exportant tous les objets basés sur des expressions régulières. Dans votre cas, cela fonctionnerait en exportant tous les objets avec un ID particulier. Pour l'utiliser, clonez d'abord ou téléchargez le script depuis Github .

Dans Inkscape, vous devez modifier l'ID de tous les objets que vous souhaitez exporter pour qu'ils aient le même modèle de nom de fichier. Pour ce faire, ouvrez la boîte de dialogue Propriétés de l'objet en allant dans Objet> Propriétés de l'objet ou en appuyant sur Ctrl+ Shift+ O. Dans le changement de champ ID tous d'avoir le même exemple d'identification basename Dog_1, Dog_2, Dog_3etc (objets ne peuvent pas avoir le même ID).

entrez la description de l'image ici

Une fois le fichier enregistré et le script téléchargé, dans un terminal, exécutez la commande suivante

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

Cela exportera tous les objets avec l'ID de nom de base "Dog_".

  1. inx-exportobjects

L'extension inkscape inx-exportobjects exportera simplement tous les objets sélectionnés. Pour l'utiliser, clonez d' abord ou téléchargez l'extension depuis Gitlab . Pour l'installer copiez les fichiers export_objects.inxet export_objects.pyvers .config/inkscape/extensions/. Dans Inkscape, vous aurez une option appelée "Objets aux fichiers ..." dans Extensions> Exportations. Sélectionnez les objets que vous souhaitez installer et sélectionnez cette option.

entrez la description de l'image ici

Dans cette boîte de dialogue, changez simplement le répertoire d'exportation à l'endroit où vous souhaitez enregistrer vos fichiers et remplacez le nom de base par le nouveau nom des fichiers, puis appuyez sur Appliquer.

entrez la description de l'image ici

Les fichiers seront exportés vers votre répertoire spécifié.

Chacune des solutions a de nombreuses autres options, telles que l'exportation gif animée, que vous devriez certainement expérimenter.

hellocatfood
la source
Excellente solution @hellocatfood Juste un conseil: avant d'exporter, vous pouvez redimensionner le canevas. Dans mon cas, j'avais de nombreuses icônes. J'ai découvert la largeur maximale et la hauteur maximale des icônes. Et puis redimensionné la toile à hauteur x largeur respective. Sélectionnez ensuite tous les objets, alignez-les horizontalement et verticalement, puis lancez le processus d'exportation. De cette façon, vous aurez les svg avec une hauteur et une largeur appropriées.
Anish Nair
1

En fonction de la condition préalable, que tous vos objets soient regroupés et non pas eux-mêmes regroupés en plus grands groupes, voici comment procéder. (J'ai utilisé des chats dans l'exemple, car les chiens n'étaient pas disponibles).

entrez la description de l'image ici En bas à droite, vous voyez un chat en surbrillance, l'objet id 5358, qui est un seul chemin, j'ai donc ajouté un sol vert plus tard qui l'a changé en l'objet 5364 qui se produira plus tard, alors ne vous laissez pas confondre. :)

Vous obtenez l'éditeur xml en appuyant sur le bouton 4 depuis la droite (flèche 1).

J'ai changé g5358 en g-cat-5358 (champ 4) pour qu'il soit facile pour un outil de texte de choisir ces objets qui fonctionnent pour la plupart des éléments qui n'entrent pas en collision avec les noms xml-svg (couleur, méta, id, ... ).

Dans la fenêtre de gauche, vous voyez qu'il existe déjà une entité renommée, g-cat-5312 près du sommet au même niveau d'indentation.

Inkscape organise des identifiants uniques pour les groupes, mais ils n'ont pas besoin d'être de la forme gNUMBER, vous pouvez mélanger d'autres caractères. Ne choisissez tout simplement pas un identifiant déjà existant.

Après avoir changé l'identifiant, appuyez sur 'setzen (set)' (5) pour confirmer votre changement. Vous voyez une interface allemande ici, YMMV.

Enregistrez le svg (comme demo-cats.svg). Nous passons maintenant aux scripts.

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

Qu'est ce que ça fait? Il greps (recherche avec grep) pour le motif "g-cat-" qui est le début de notre section intéressante. id=${cat//[^0-9]/}extrait l'id dans bash de l'expression. Echo l'imprime à l'écran, ce qui devrait aider à trouver le bogue en cas de problème. head -n 53 demo-cats.svg prend les 53 premières lignes du svg, qui contient tous les svg-passe-partout. Selon vos paramètres avec différents formats svg (inkscape, compressé, svg normal, inkscape-compressé), cela peut varier. Avec, nl demo-cats.svg | lessvous pouvez n umer les l ines, pour trouver le bon point de coupe dans votre cas.

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

^ Jusqu'à cette partie, les lignes doivent être incluses.

La commande suivante se fait avec le s ed tr ed ed ou sed: sed -n "/$cat/,/^ <\/g>/p" demo-cats.svg;dit (-n) pas d'impression (mais) recherche pour le groupe cat, jusqu'à la balise de fermeture g au niveau d'indentation 2 qui est 4 espaces avant le </g>si vous ne l'avez pas modifier les préférences d'Inkscape, dont vous vous souviendrez peut-être si vous l'avez fait. Ensuite , ajoutez la balise de fermeture pour svg: echo "</svg>". Écrivez la sortie dans le fichier 'cat- $ id.svg' (cela écrase les fichiers existants en silence).

Je me retrouve donc avec deux fichiers: cat-5312.svg et cat-5364.svg.

Une solution plus élégante devrait être possible avec xmlstarlet ou des outils similaires, qui sont faits pour rechercher et éditer des fichiers xml. Malheureusement, je n'y suis pas habitué et je ne l'ai pas fait fonctionner après avoir lu 10 minutes de documentation. Vous n'auriez pas besoin de renommer les groupes au début.

Utilisateur inconnu
la source