Rimozione delle trasformazioni nei file SVG


155

Ho lottato con questo per un po 'e non riesco a trovare una risposta (che funzioni) da nessuna parte. Ho un file SVG che assomiglia a questo:

<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>

Voglio rimuovere la transform="..."linea ma la mia immagine rimane nel punto in cui l'ho posizionata (in InkScape). Se rimuovo manualmente la trasformazione, l'immagine si sposta su un'altra parte dello schermo (come previsto), ma devo liberarmi completamente della trasformazione e, allo stesso tempo, fare in modo che l'immagine rimanga esattamente dove la voglio. C'è un modo per rimuovere / appiattire le trasformazioni nelle coordinate del percorso stesso? (Le uniche trasformazioni che devo affrontare sono tradurre e ridimensionare, nessuna matrice.)



Risposte:


150

Come rimuovere le trasformazioni in Inkscape

  1. Apri il file svg in Inkscape
  2. Vai a Modifica -> Editor XML
  3. Trova gli attributi "trasforma" in livelli ed eliminali

Come spostare tutti gli oggetti del tutto senza creare altri attributi di trasformazione

  1. Vai a Modifica -> Seleziona tutto in tutti i livelli
  2. Vai su Oggetto -> Trasforma

    Nel pannello Trasforma

  3. Deseleziona Sposta relativa e seleziona Applica a ciascun oggetto separatamente

  4. Impostare i valori orizzontale e verticale in base alle proprie esigenze e fare clic su Applica

16
Ha funzionato per me. Gli oggetti devono essere raggruppati prima di essere trasformati in modo da aggiornare le coordinate effettive dei percorsi.
Rupert Angermeier,

8
Hm, dopo averlo impostato su 0 e facendo clic su Applica la trasformazione si presenta nuovamente nell'editor XML.
Escapedcat,

7
È necessario sbloccare gli oggetti affinché questo funzioni per me, grazie!
Hai Zhang,

1
Non ha funzionato per me. Si appiattirà e sposterà l'attributo di trasformazione sulle foglie (in realtà tutto diventa una foglia dopo il raggruppamento), ma NON RIMUOVERÀ l'attributo di trasformazione e APPLICARLO A GEOMETRIA DEL PUNTO, senza il quale sono tornato al punto di partenza.
Szczepan Hołyszewski,

2
IMPORTANTE: come spiegato in precedenza, è necessario separare gli oggetti affinché funzioni correttamente, altrimenti l'attributo di trasformazione verrà impostato di nuovo automaticamente
Ombra

52

Ho capito qual era il problema. Speravo di non dover ricorrere alla risposta di Robert, anche se sono contento per la conferma che funzionerebbe! Alla fine la risposta di Duopixel era in realtà la più vicina, anche se risulta che stava succedendo anche qualcos'altro.

Quando lavori con percorsi diversi nei documenti Inkscape, credo che il suo comportamento predefinito sia raggrupparli sotto un <svg:g.../>tag. Quando si modificano i percorsi in un gruppo, Inkscape aggiungerà automaticamente una trasformazione al gruppo per rappresentare queste modifiche. Tuttavia, se apri l'editor XML e trascini il tuo percorso all'esterno del <svg:g.../>tag e lo crei come <svg:path.../>tag, Inkscape è libero di modificare i singoli punti a piacimento. Alla fine si è rivelato un problema di raggruppamento anche se stavo lavorando con un solo percorso! Spero che questo aiuti gli altri in situazioni simili.


7
Eccezionale! Grazie! Questo è esattamente quello che stava facendo. Ho appena eliminato il tag di gruppo lasciando i contenuti interni, salvato, e riaperto in inkscape. Ovviamente l'immagine era fuori dal riquadro di visualizzazione (o come si chiama), ma poi ho appena impostato x, y ed è stato risolto. Che dolore. Grazie per aver condiviso questo!
johntrepreneur,

1
Nel mio caso ho combinato gli approcci di questa risposta con un altro di quella risposta .
Quasiyoke,

Questo dovrebbe essere votato e portato in cima. Questo risolve il problema con eleganza e ha funzionato per me. E anche se la grafica è posizionata fuori dalla tela, puoi sempre ridimensionarla (Modifica> Ridimensiona pagina alla selezione)
mandarino

48

inserisci qui la descrizione dell'immagine

  1. Carica il tuo SVG in Method Draw http://editor.method.ac (File> Apri immagine)
  2. Separa i tuoi elementi (Oggetto> Separa elementi) potresti doverlo fare più di una volta.
  3. Seleziona il tuo percorso
  4. Riorienta il percorso (Oggetto> Riorienta percorsi).
  5. Salva la tua immagine (File> Salva immagine) Se appare in una nuova finestra puoi fare clic destro e "Salva immagine come ..."

1
Non esiste alcun oggetto> Percorsi riorientanti. A quale versione ti riferisci?
0__

1
@ 0__ Se questa voce di menu è disabilitata significa che il percorso è ancora all'interno di un gruppo. Separa di nuovo.
methodofaction

37

C'è un'estensione inkscape chiamata Apply Transforms che ricalcola i percorsi con le loro trasformazioni. Questo è esattamente quello che stavo cercando.

Dopo averlo installato, lo troverai nel menu Estensioni> Modifica percorso> Applica trasformazione .


crediti: forum Inkscape> Rimuovi tutte le trasformazioni mantenendo al suo posto


Questa estensione è stata aggiornata e ora funziona anche per i rect, almeno nei miei test.
sil

Assolutamente. La potenza che questo piccolo plug-in ti dà è insostituibile!
Brett

23

Per i gruppi il raggruppamento può fare rapidamente il lavoro. Seleziona il gruppo e premi Ctrl + Maiusc + G (degroup) e poi Ctrl + G (group).

Per alcuni oggetti che hanno un problema simile, spirali e stelle per un esempio, il modo rapido è premere Ctrl + Alt + C (tratto in tracciato); ciò tuttavia converte l'oggetto in un percorso puro e rimuove tutti gli attributi extra, come sodipodi: cx, sodipodi: rivoluzioni e così via.


23

Apri il tuo svg su Inkscape :

  • Seleziona il gruppo che contiene tutte quelle trasformazioni che vuoi eliminare
  • Premi CTRL+ U(separa)
  • Premi CTRL+ G(raggruppa di nuovo)

In questo modo eliminerai le trasformazioni applicate al gruppo e queste verranno trasferite nei percorsi contenuti in questo gruppo.


1
Perfetto!
Funzionava

14

Nella mia esperienza, se stai usando Inkscape, è sufficiente spostare leggermente l'elemento path (ad es. Con i tasti cursore), e Inkscape eliminerà l'attributo transform e regolerà i dati del path di conseguenza. (Fastidioso se vuoi davvero mantenere l'attributo di trasformazione.)

Quindi, puoi semplicemente selezionare il percorso (assicurati che sia il percorso e non il gruppo circostante), premi il tasto cursore destro e sinistro e il gioco è fatto.


1
Questo non sembra funzionare per un elemento <g>. Sto cercando di liberarmi dell'attributo di trasformazione.
Max Spring

5
Forse prova a separare prima e poi a raggrupparti di nuovo.
Thomas W,

1
Wow, ha funzionato come un fascino! Questa dovrebbe essere la risposta accettata. Non sono necessari strumenti aggiuntivi, non sono necessari passaggi complicati. Altre risposte non funzionano se il percorso è nidificato in una trasformata <g>e voglio mantenere la trasformazione su <g>.
tomekwi,

Non funziona neanche per un percorso creato dallo strumento cerchio
sdaau,

1
La migliore risposta Forse una fonte di confusione è l'opzione Preferenze> Trasformazioni> Trasformazioni negozio, che non vedo menzionata altrove qui. Dovrebbe essere impostato su "ottimizzato". Quindi vengono rimosse solo le separazioni di raggruppamento, spostamento, raggruppamento e dud.
Mr5o1,

13

Mentre preferisco Inkscape, Affinity Designer (~ $ 40 / Mac) mi ha permesso di risparmiare ore di lavoro lavorando con Android Vector Drawables.

Apri un file SVG, File -> Esporta -> SVG -> Altro -> Trasforma le trasformazioni hanno funzionato alla grande.

Affinity Designer


12

SVGO è un eccellente strumento da riga di comando open source per questo e una serie di altre ottimizzazioni. Esiste anche un'interfaccia utente Web online altrettanto eccellente chiamata SVGOMG

Le relative opzioni in questo caso sono moveGroupAttrsToElems(SVGOMG: Move group attrs to elements) per spostare transformgli attributi dei gruppi di elementi di percorso, più convertPathData(SVGOMG: Round/rewrite paths) per appiattire transformin d.


1
SVGO è incredibile. Questa dovrebbe davvero essere la risposta accettata, soprattutto perché stackoverflow è per il punto di vista del programmatore, e questa è di gran lunga la migliore soluzione per un programmatore che sviluppa un sito contenente SVG. Metterlo nella pipeline di distribuzione è molto meglio che dover insegnare ai tuoi artisti a rimuovere le trasformazioni a mano (o doverle fare da soli) e ottenere una segnalazione di bug ogni volta che dimenticano
UTF_or_Death

3
Solo che questo non funziona più. Ricordo che una volta funzionava meglio, ma vedo questo problema su questa esatta funzione github.com/svg/svgo/issues/624 per SVGO
morewry

9

Va detto che esiste la modalità "Ottimizzata" nelle preferenze:

Preferenze di Inkscape> Trasformazioni> Trasformazione archivio> Ottimizzato

Il che dovrebbe minimizzare il transformpiù possibile il verificarsi di attributi (ma non lo fa).

Questo sembra essere attivo di default comunque.

Secondo una discussione , un'istanza in cui questa modalità ottimizzata manca di zelo è quando la pagina viene ridimensionata . Questo fa sì che una translatetrasformazione venga applicata <g>all'elemento layer . Sembra che l'evacuazione dei bambini su un altro livello sia la soluzione migliore al momento.


2
Per ridimensionare la pagina senza creare fastidiose translatetrasformazioni su ogni livello, prova ad aprire il .svgfile in un editor di testo e manipola gli attributi di altezza e larghezza che appaiono in alto.
febbraio

7

Inkscape ha la possibilità di cancellare i dati di trasformazione ma di lasciare il valore dell'oggetto non modificato.

In Inkscape, seleziona l'oggetto e il menu "Percorso", "Semplifica". Ora, avrai rimosso le trasformazioni.


16
Tuttavia, modificherà il contorno dei tuoi percorsi e ridurrà il numero di vertici in forme complesse.
Charlie,

1
Questo spesso rende il markup più grande di prima delle trasformazioni.
Charlie,

6

In questo caso è sufficiente aggiungere il valore di conversione ai valori m per ciascun figlio, quindi -10.254587 + 10.75 = -0.504587 e -308.96875 + 345.43597 = 36.46722.

Dato che tutti i termini nell'esempio sono relativi (cioè lettere minuscole), tutto qui. Se uno fosse assoluto (maiuscolo), ad esempio M o C, anche questi dovrebbero essere adeguati.

Per la scala, moltiplicheresti sostanzialmente tutti i valori figlio per la scala.


L'ho fatto, ma nell'editor XML di Inkspace (o in qualsiasi altro editor) la trasformazione è ancora aggiunta. Strano.
Escapedcat,

1
In che modo regoleresti C se avessi i 2 sottotracciati, ad esempio M 8.0 12.0 C 11.3 13.1 14.9 13.55 16.0 13.0 C 2.4 9.8 2.8 10.2 8.0 12.0 C 7.6 7.8 7.6 8.1 5.0 9.0 e M 3.0 5.0 C 2.4 5.5 3.3 6.4 5.0 7.0 Che vuoi trasformarti in un percorso?
Installazione

@Anton usa il pulsante di domanda se hai una domanda che non è coperta dalle risposte esistenti. È difficile chiedere e rispondere nei commenti in quanto è disponibile una formattazione molto limitata.
Robert Longson,

2
@RobertLongson, l'hai fatto bene. Tutto quello che desidero è che tu elabori "Se qualcuno fosse assoluto (maiuscolo), ad es. M o C, dovrebbero anche essere adeguati."
Installazione

6
  1. Seleziona gli elementi in questione
  2. Oggetto> Separa (ripetere fino a quando tutto non è raggruppato; consultare l'editor XML per i nodi nidificati)
  3. Percorso> Oggetto in tracciato (converte i poligoni in tracciati)
  4. Oggetto> Trasforma> Deseleziona la relativa mossa> Applica

Non sembra funzionare in Inkscape 0.91. Il <g>con l' transformattributo rimane esattamente com'era. Inoltre, il mio oggetto (proprio come quello mostrato nella domanda qui) è già un percorso.
OR Mapper

Riesci a incollare un link al tuo SVG?
Charlie,

5

Per rimuovere l'attributo di trasformazione da un gelemento (gruppo) in Inkscape, puoi spostare il gruppo nella sua posizione finale, separarlo e quindi raggruppare tutti gli elementi. Ora è stato creato un nuovo gruppo e, se non lo sposti di nuovo, non verrà associato ad esso un attributo di trasformazione.


4

Se qualcuno arriva qui alla ricerca di una soluzione per farlo in Sketch 3, seleziona il livello e fai clic su Livello-> Percorsi-> Appiattisci.


3

Trovato:

  • Imposta la dimensione della pagina desiderata *
  • Se il tuo livello attuale ha una trasformazione (controlla con l'editor XML, è il gruppo in alto sotto l'elemento SVG) quindi crea un nuovo livello e sposta tutti gli oggetti su di esso
  • Separa tutti i gruppi (potrebbe non essere necessario, YMMV)
  • Seleziona tutti gli oggetti e applica una trasformazione nulla (come ridimensiona del 100% 100% o freccia destra + freccia sinistra) con la trasformazione Memorizza: ottimizzata in Preferenze / Trasformazioni
  • Se hai dovuto annullare qualsiasi gruppo, ora puoi raggrupparli nuovamente
  • Salvare una copia come SVG ottimizzato e impostare la precisione numerica desiderata

*: O almeno posiziona gli oggetti dove ti servono, in relazione all'angolo superiore sinistro della pagina. È un peccato che le coordinate SVG facciano riferimento all'angolo in alto a sinistra, mentre Inkscape ridimensiona la pagina rispetto all'angolo in basso a sinistra!


Avevo bisogno del trucco "sposta su un altro livello" poiché la trasformazione che volevo spingere verso il basso era sul <g> di un livello. Il sistema di coordinate di Inkscape è abbastanza fastidioso.
Mutante Bob

3

Sono stato in grado di liberarmi di una matrix(...)trasformazione (a causa del mirroring) combinando il percorso con un rettangolo e quindi rimuovendo i nodi del rettangolo. La translate(...)parte è rimasta però.


Questa è l'unica soluzione che ho trovato anche io. Combina con un nuovo percorso pulito, quindi rimuovi la parte non necessaria.
Márton Tamás,

2

Nel mio caso il salvataggio come SVG ottimizzato ha risolto il problema. Quindi in Inkscape usa:

File -> Salva come ... -> SVG ottimizzato.


Qual è stato il tuo problema BTW? Sono venuto qui dopo aver provato tutto. Ma il problema persiste ancora.
Sahu V Kumar,

@VishalKumarSahu Non ho potuto importare la mia icona dell'app Android (SVG) come risorsa a causa transformdell'attributo non supportato da Android Studio.
Michał Stochmal,

Sì, ed è lo stesso caso anche nel web. La trasformazione crea problemi nell'output ma è molto utile durante la disposizione degli oggetti come gruppo. Devo fare calcoli per risolvere lo scopo.
Sahu V Kumar,

2

Funziona se stai usando Inkscape:

  1. Seleziona tutto e separa
  2. Salva come "Svg ottimizzato (* .svg)"

In tutti i casi che ho provato, questo ha rimosso tutti gli attributi di trasformazione. Non sono sicuro che funzioni per SVG più complessi.


1

Ho provato la soluzione pubblicata qui, ovvero rimuovere i tag di gruppo nel file SVG e riaprirlo in Inkscape (0.48.3.1 nel mio caso). Purtroppo, dopo aver tradotto nuovamente i percorsi utilizzando la modalità di selezione e trasformazione (F1) e averlo salvato, i tag di gruppo sono riapparsi! Inkscape salva tutte le trasformazioni applicate al percorso in un elemento di gruppo circostante. A meno che non si usi lo strumento di selezione percorso-nodo (F2), premere ctrl + a e spostare i nodi del percorso nella posizione corretta. Dopo averlo fatto e salvato in seguito, Inkscape non ha aggiunto i tag di gruppo, poiché questa traduzione si applicava direttamente al modello di percorso. Spero che questo ti aiuti.


1

Nel mio caso i gruppi sono effettivamente causati da livelli. L'eliminazione di tutti i livelli nel documento ha rimosso il gruppo e la trasformazione (possibilmente combinata con il raggruppamento di oggetti e il loro raggruppamento ecc. Come in Rimozione delle trasformazioni nei file SVG (answer-35490189 da @Charlie sopra))


0

Il mio problema specifico riguardava i simboli definiti all'esterno della pagina, che richiedevano quindi una trasformazione da mostrare sulla pagina.

Per spostare i simboli sulla pagina senza richiedere una trasformazione, ho dovuto seguire questi passaggi in Inkscape:

  1. Apri la finestra Simboli (Maiusc + Ctrl + Y)
  2. Rimuovere il simbolo dalla raccolta documenti. (C'è un pulsante per quello nella finestra.)
  3. Ora l'immagine viene visualizzata nel documento, al di fuori del limite della pagina.
  4. Separa la grafica. (Questo è un passaggio vitale!)
  5. Sposta l'immagine all'interno del bordo della pagina.
  6. Aggiungi la grafica alla libreria dei simboli.

0

Sembra casuale, ma nient'altro che ho provato ha funzionato, quindi eccoti un'altra persona a caso. Alcuni dei miei percorsi avevano una sorta di margine attorno a loro che poteva essere visto solo quando li selezionavo ( esempio). Penso che questo sia stato creato quando ho incollato un livello da un altro file inkscape e l'ho ruotato di 90 gradi. Ciò ha reso un riempimento del motivo sulle forme con una trasformazione diversa (linee distanziate più distanti). Ha inoltre reso gli oggetti di allineamento non funzionanti come previsto. L'uso della trasformazione Transform menzionata da @Piotr_cz ha risolto il problema della trasformazione, ma lo strano margine è rimasto. Me ne sono liberato accidentalmente modificando la sfocatura su tratto su qualsiasi valore e riportandolo a zero.


0

In qualche modo non ho avuto fortuna con nessuno degli approcci. Se c'è una <defs>sezione nel tuo svg e usi come questo:

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

potresti dover eliminare tutti gli utilizzi ed estrarre tutto dalla sezione defs. Quindi, puoi utilizzare inkscape per posizionare tutto nel modo corretto e quindi applicare le trasformazioni utilizzando il plug-in menzionato. Spero che aiuti qualcuno.


0

Ho avuto questo problema per anni. La soluzione è chiaramente quella di essere in grado di giocare dinamicamente con le trasformazioni nel browser, se non verrà "riparato" in inkscape.

Un utente Mc nei forum Inkscape mi ha dato questa soluzione .

La soluzione crea la trasformazione corrente tra un elemento SVG e il suo elemento radice SVG, quindi restituisce un set completo di informazioni BBox in base al totale delle trasformazioni.

Sarebbe anche possibile cambiare facilmente a quale elemento sono relativi i calcoli, se si desidera fare nel lavoro del browser tra due parti dello stesso file SVG.

Finalmente posso effettivamente avere una vista SVG panoramica.


0

Inkscape 1.0 su Kubuntu 20.04

Sebbene questa discussione sia piuttosto vecchia, mi piacerebbe pubblicare la mia esperienza / soluzione. Mi sono imbattuto in questo problema durante il tentativo di creare un modello per il banco di lavoro TechDrawing di FreeCAD. Questi modelli non devono contenere alcuna trasformazione.

Nel mio caso ho dovuto aggiungere un logo aziendale da un file .svg esterno (interamente realizzato con Inkscape). Quel logo contiene elementi grafici e di testo. Quando si copiava quel logo nel modello, venivano create delle trasformazioni, che impedivano al modello di funzionare correttamente in FreeCAD.

  • Innanzitutto, questa soluzione suggerita su www.freecadweb.org / ... non funziona per me. Ecco perché ho cercato nel web e ho trovato questa discussione.

  • In secondo luogo, nessuna delle soluzioni suggerite sopra ha funzionato per me, ma mi hanno messo sulla strada giusta. La risposta di Charlie si avvicinò, ma Oggetto> Trasforma> Deseleziona mossa relativa> Applica non mostrava alcuna differenza.

Ciò che ha funzionato per me è stato:

  1. Come menzionato da altri, separa tutto.
  2. Converti gli oggetti di testo in percorso: nel mio caso mi è sembrato essenziale!
  3. Elimina tutte le trasformazioni esistenti nell'editor xml e osserva cosa succede con gli oggetti correlati. Nel mio caso, gli elementi corrispondenti hanno cambiato posizione.
  4. Correggere queste modifiche manualmente ma non raggruppare nulla.
  5. Salva come normale svg (normale = nessuna ottimizzazione o altre impostazioni speciali utilizzate)

Funziona bene quando uso quel modello in FreeCAD.


Uno strano dettaglio: anche se la mia soluzione connota che gli elementi di testo erano il problema nel mio caso, non può essere così facile. In effetti, il documento di base (quello in cui ho copiato il logo) contiene molti elementi di testo e non li ho convertiti. Quindi potrebbe essere la combinazione di "fonte esterna" ed elementi di testo. Pubblico semplicemente questo dettaglio come suggerimento per gli altri, che potrebbero avere problemi correlati.

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.