web-dev-qa-db-fra.com

Supprimer les transformations dans les fichiers SVG

Cela fait un moment que je me bats avec cela et je n'arrive pas à trouver une réponse (qui fonctionne) où que ce soit. J'ai un fichier SVG qui ressemble à ceci:

<svg

   xmlns:dc="http://purl.org/dc/elements/1.1/"
   ...
   width="72.9375"
   height="58.21875"
   ...>
   ...
   <g
     ...
     transform="translate(10.75,-308.96875)"
     style="...">
     <path
       inkscape:connector-curvature="0"
       d="m -10.254587,345.43597 c 0,-1.41732 0.17692,-2.85384 0.5312502,-3.5625 0.70866,-1.41733 2.14518,-2.82259 3.5625,-3.53125 1.41733,-0.70866 2.11392,-0.70867 3.53125,0 1.41732,0.70866 ... z"
       ... />
  </g>
</svg>

Je souhaite supprimer la ligne transform="..." mais conserver mon image à l'endroit où je l'ai placée (dans InkScape). Si je supprime manuellement la transformation, l’image se glisse dans une autre partie de l’écran (comme prévu), mais j’ai besoin de la supprimer complètement et, en même temps, de garder l’image exactement où je la souhaite. Existe-t-il un moyen de supprimer/aplatir les transformations dans les coordonnées de chemin elles-mêmes? (Les seules transformations que je dois traiter sont translation et mise à l'échelle, pas de matrices.)

119
Ephemera

Comment supprimer transforme dans Inkscape

  1. Ouvrir le fichier svg dans Inkscape
  2. Allez dans Edition -> Editeur XML
  3. Trouvez les attributs de "transformation" dans les couches et supprimez-les 

Comment déplacer tous les objets sans créer un autre attribut de transformation

  1. Allez dans Édition -> Sélectionner tout dans tous les calques
  2. Aller à l'objet -> Transformer

    Dans le panneau Transform

  3. Décochez Déplacement relatif et cochez Appliquer à chaque objet séparément

  4. Définissez les valeurs Horizontal et Vertical en fonction de vos besoins, puis cliquez sur Appliquer

Bingo

99
Serge Seletskyy

J'ai résolu le problème. J'espérais ne pas avoir à recourir à la réponse de Robert, bien que je sois heureux d'avoir la confirmation que cela fonctionnerait! En fin de compte, la réponse de Duopixel était en réalité la plus proche, bien qu'il se soit avéré que quelque chose d'autre se passait également.

Lorsque vous utilisez différents chemins dans les documents Inkscape, je pense que son comportement par défaut consiste à les regrouper sous une balise <svg:g.../>. Lors de la modification des chemins d'un groupe, Inkscape ajoute automatiquement une transformation au groupe pour représenter ces modifications. Toutefois, si vous ouvrez l'éditeur XML et faites glisser votre chemin en dehors de la balise <svg:g.../> pour en faire sa propre balise <svg:path.../>, Inkscape est libre de modifier les points individuels à volonté. En fin de compte, cela s'est avéré être un problème de regroupement même si je ne travaillais qu'avec un seul chemin! J'espère que cela aide les autres dans des situations similaires.

46
Ephemera

 enter image description here

  1. Chargez votre fichier SVG dans Method Draw http://editor.method.ac (Fichier> Ouvrir une image)
  2. Dissociez vos éléments (Objet> Dissocier des éléments), vous devrez peut-être le faire plusieurs fois.
  3. Sélectionnez votre chemin
  4. Réorientez le chemin (Objet> Réorienter les chemins).
  5. Enregistrer votre image (Fichier> Enregistrer l'image) S'il apparaît dans une nouvelle fenêtre, vous pouvez cliquer avec le bouton droit de la souris sur "Enregistrer l'image sous ...".
44
Duopixel

Pour les groupes, le regroupement permet de faire le travail rapidement. Sélectionnez le groupe et appuyez sur Ctrl + Maj + G (décomposer), puis sur Ctrl + G (groupe).

Pour certains objets qui ont un problème similaire, des spirales et des étoiles, par exemple, le moyen le plus rapide consiste à appuyer sur Ctrl + Alt + C (contour à tracé), ce qui convertit toutefois l'objet en chemin pur et supprime tous les attributs supplémentaires tels que sodipodi: cx, sodipodi: révolutions et ainsi de suite. 

21
UTF_or_Death

Il existe une extension inkscape appelée Apply Transforms qui recalcule les chemins avec ses transformations, c'est exactement ce que je cherchais.

Après l’avoir installé, vous trouverez le menu sous Extensions> Modifier le chemin> Appliquer la transformation.


crédits: forum Inkscape> Supprimer toutes les transformations tout en les maintenant

18
piotr_cz

Ouvrez votre svg sur Inkscape:

  • Sélectionnez le groupe qui contient toutes les transformations que vous souhaitez supprimer
  • Presse CTRL + U (dégrouper)
  • Presse CTRL + G (groupe à nouveau)

De cette façon, vous vous débarrasserez des transformations appliquées au groupe et elles seront transférées vers les chemins contenus dans ce groupe.

À votre santé

13
rmartrenado

Selon mon expérience, si vous utilisez Inkscape, il suffit de déplacer légèrement l’élément path (par exemple avec les touches de curseur), et Inkscape supprimera l’attribut de transformation et ajustera les données de chemin en conséquence. (Ennuyant si vous voulez réellement conserver l'attribut de transformation.)

Donc, vous pouvez simplement sélectionner le chemin (assurez-vous que c'est le chemin et non le groupe environnant), appuyez sur les touches de curseur droite et gauche, et vous avez terminé.

13
Thomas W

Bien que je préfère Inkscape, Affinity Designer (~ 40 $/Mac) m'a permis d'économiser des heures d'effort lorsque je travaillais avec Android Vector Drawables.

Ouvrez un fichier SVG, Fichier -> Exporter -> SVG -> Plus -> Aplatir transforme a bien fonctionné.

 Affinity Designer

11
snodnipper

SVGO est un excellent outil de ligne de commande à source ouverte pour cela et de nombreuses autres optimisations. Il existe également une excellente interface utilisateur Web en ligne appelée SVGOMG

Les options pertinentes dans ce cas sont moveGroupAttrsToElems (SVGOMG: Move group attrs to elements) pour déplacer les attributs transform de groupes en éléments de chemin, plus convertPathData (SVGOMG: Round/rewrite paths) pour aplatir transform dans d.

8
Rob Hogan

Il convient de mentionner qu’il existe le mode "Optimisé" dans les préférences:

Inkscape Preferences > Transforms > Store transformation > Optimized

Ce qui est supposé minimiser l'occurrence d'attributs transform autant que possible (mais ne le fait pas).

Cela semble être activé par défaut de toute façon.

Selon une discussion , une instance dans laquelle ce mode {Optimisé} _ manque de zèle est lorsque la page est redimensionnée. Cela provoque l'application d'une transformation translate à l'élément <g> de la couche. Il semble que l'évacuation des enfants vers un autre niveau constitue la meilleure solution pour le moment.

7
Evgeni Sergeev

Inkscape a la possibilité d'effacer les données de transformation tout en laissant la valeur de l'objet non modifiée.

Dans Inkscape, sélectionnez l'objet et le menu "Chemin", "Simplifier" ... .. Maintenant, les transformations seront supprimées.

J'espère que ça aide.

6
Kumar

Dans ce cas, il suffit d’ajouter la traduction aux valeurs m pour chaque enfant afin que -10.254587 + 10.75 = -0.504587 et -308.96875 + 345.43597 = 36.46722.

Étant donné que tous les termes de l'exemple sont relatifs (c'est-à-dire minuscules), c'est tout. Si certains étaient absolus (majuscules), par ex. M ou C ils devraient être ajustés aussi.

Pour l'échelle, vous devez pratiquement multiplier toutes les valeurs enfants par l'échelle.

5
Robert Longson

Pour supprimer l'attribut de transformation d'un élément (groupe) g dans Inkscape, vous pouvez déplacer le groupe à son emplacement final, le dissocier, puis regrouper tous les éléments. Maintenant, un nouveau groupe a été créé et si vous ne le déplacez pas à nouveau, il ne sera pas associé à un attribut de transformation.

4
mcnesium
  1. Sélectionnez les éléments en question
  2. Objet> Dissocier (à répéter jusqu'à ce que tout soit dissocié; voir l'éditeur XML pour les nœuds imbriqués)
  3. Chemin> Objet en chemin (convertit les polygones en chemins)
  4. Objet> Transformer> Décocher le déplacement relatif> Appliquer
4
Charlie

Si quelqu'un atterrit ici dans Sketch 3 à la recherche d'une solution, sélectionnez le calque, puis cliquez sur Couche-> Chemins-> Aplanir.

4
Joel Worsham

Trouvé le:

  • Définissez le format de page souhaité *
  • Si votre calque actuel a une transformation (vérifiez avec l'éditeur XML, c'est le groupe supérieur de l'élément SVG), créez un nouveau calque et déplacez-le vers tous les objets.
  • Dissociez tous les groupes (cela peut ne pas être nécessaire, YMMV)
  • Sélectionnez tous les objets et appliquez une transformation null (telle qu'une échelle de 100% à 100%, ou une flèche à droite + une flèche à gauche) tout en ayant la transformation de magasin: optimisée dans Préférences/Transformées
  • Si vous deviez annuler des groupes, vous pouvez maintenant les regrouper
  • Enregistrer une copie au format SVG optimisé et définir la précision numérique souhaitée

*: Ou au moins placez les objets là où vous en avez besoin, par rapport au coin supérieur gauche de la page. Il est regrettable que les coordonnées SVG fassent référence au coin supérieur gauche alors qu'Inkscape redimensionne la page par rapport au bas à gauche!

3
Tobia

Je pouvais me débarrasser d'une transformation matrix(...) (due à la mise en miroir) en combinant le chemin avec un rectangle, puis en supprimant les nœuds du rectangle. La partie translate(...) est restée cependant.

3
Emily L.

J'ai essayé la solution publiée ici, à savoir supprimer les balises de groupe dans le fichier SVG et les rouvrir dans Inkscape (0.48.3.1 dans mon cas). Hélas, après avoir traduit à nouveau les chemins en utilisant le mode sélection et transformation (F1) et les avoir enregistrés, les balises de groupe sont réapparues! Inkscape enregistre toutes les transformations appliquées au tracé dans un élément de groupe environnant. Sauf si vous utilisez l'outil de sélection de nœud de chemin (F2), appuyez sur ctrl + a et déplacez les nœuds du chemin à leur place. Après avoir fait cela à la place, puis enregistré, Inkscape n'a pas ajouté les balises de groupe, car cette traduction s'appliquait directement au modèle de chemin. J'espère que cela t'aides.

1
Skadi2k3

Dans mon cas, les groupes sont en réalité causés par des couches. La suppression de toutes les couches du document supprimait le groupe et la transformation (éventuellement combinées avec des objets dissociés et regroupés, etc. comme dans Suppression des transformations dans des fichiers SVG (answer-35490189 de @Charlie ci-dessus))

1
Jamie Pate

Cela semble aléatoire, mais rien d’autre que j’ai essayé n’a fonctionné, alors voici une autre personne aléatoire. Certains de mes chemins avaient une sorte de marge autour d’eux qui ne pouvait être vue que lorsqu’ils les sélectionnaient (  example ). Je pense que cela a été créé lorsque j'ai collé une couche à partir d'un autre fichier inkscape et que je l'ai tournée de 90 degrés. Cela a permis de transformer un motif sur les formes ayant une transformation différente (lignes plus espacées). Cela a également fait en sorte que les objets align ne fonctionnent pas comme prévu. En utilisant Apply Transform mentionné par @Piotr_cz, le problème de la transformation a été résolu, mais la marge étrange est restée. Je m'en suis débarrassé accidentellement en modifiant le flou sur le contour en une valeur quelconque et en le ramenant à zéro.

0
Jim

J'ai eu ce problème depuis des années. La solution est clairement de pouvoir jouer dynamiquement avec les transformations dans le navigateur, si cela ne va pas "être corrigé" dans inkscape.

Un utilisateur Mc sur les forums Inkscape m'a donné cette solution

La solution crée la transformation actuelle entre un élément SVG et son élément racine SVG, puis renvoie un jeu complet d'informations BBox en fonction du total des transformations.

Il serait également possible de changer facilement l'élément auquel les calculs sont relatifs, si vous souhaitez effectuer un travail de navigateur entre deux parties du même fichier SVG.

Enfin, je peux réellement avoir une fenêtre panoramique SVG.

0
Jay Day Zee

D'une manière ou d'une autre, je n'ai eu aucune chance avec aucune des approches. S'il existe une section <defs> dans votre svg et que les utilisations sont les suivantes:

<g transform="matrix( *** ) "><use xlink:href="#***"/></g>

vous devrez peut-être supprimer tous les usages et tout supprimer de la section defs. Ensuite, vous pouvez utiliser inkscape pour placer le tout correctement, puis appliquer des transformations à l’aide du plugin mentionné.

0
k102

Dans mon cas, économiser en tant que SVG optimisé a résolu le problème. Donc, dans Inkscape, utilisez:

File->Save as...->Optimized SVG.
0
Michał Stochmal

Mon problème spécifique concernait les symboles définis en dehors de la page, ce qui nécessitait qu'une transformation soit affichée sur la page.

Pour déplacer les symboles sur la page sans nécessiter de transformation, j'ai dû suivre ces étapes dans Inkscape:

  1. Ouvrez la fenêtre Symboles (Maj + Ctrl + Y)
  2. Supprimez le symbole de la bibliothèque de documents. (Il y a un bouton pour cela dans la fenêtre.)
  3. À présent, le graphique apparaît dans le document, en dehors du bord de la page.
  4. Dissocier le graphique. (Ceci est une étape vitale!)
  5. Déplacez le graphique à l'intérieur du bord de la page.
  6. Ajoutez le graphique à la bibliothèque de symboles.
0
Peter