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.)
Comment supprimer transforme dans Inkscape
Comment déplacer tous les objets sans créer un autre attribut de transformation
Aller à l'objet -> Transformer
Dans le panneau Transform
Décochez Déplacement relatif et cochez Appliquer à chaque objet séparément
Bingo
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.
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.
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
Ouvrez votre svg sur Inkscape:
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é
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é.
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é.
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
.
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.
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.
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.
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.
Si quelqu'un atterrit ici dans Sketch 3 à la recherche d'une solution, sélectionnez le calque, puis cliquez sur Couche-> Chemins-> Aplanir.
Trouvé le:
*: 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!
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.
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.
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))
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 ( ). 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.
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.
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é.
Dans mon cas, économiser en tant que SVG optimisé a résolu le problème. Donc, dans Inkscape, utilisez:
File->Save as...->Optimized SVG.
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: