Usuwanie przekształceń w plikach SVG

Zmagam się z tym od jakiegoś czasu i nie mogę nigdzie znaleźć odpowiedzi (która działa). Mam plik SVG, który wygląda tak:

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

Chcę usunąć linię transform="...", ale mój obraz pozostaje tam, gdzie go umieściłem (w InkScape). Jeśli ręcznie usunę transformację, obraz przesunie się do innej części ekranu (zgodnie z oczekiwaniami), ale muszę całkowicie pozbyć się transformacji i jednocześnie sprawić, że obraz pozostanie dokładnie tam, gdzie chcę. Czy jest jakiś sposób aby usunąć / spłaszczyć transformacje w Współrzędne ścieżki? (Jedyne transformaty, z którymi mam do czynienia to translate i scale, bez matryc.)

Author: Ephemera, 2012-11-11

23 answers

Jak usunąć transformaty w Inkscape

  1. otwórz plik svg w Inkscape
  2. przejdź do edycji - > edytor XML
  3. Znajdź atrybuty "transform" w warstwach i usuń je

Jak przenieść wszystkie obiekty bez tworzenia atrybutów transformacji

  1. przejdź do edycji - > zaznacz Wszystkie we wszystkich warstwach
  2. Przejdź do Object - > Transform

    In Transform panel

  3. Odznacz Relative przenieś i zaznacz Zastosuj do każdego obiektu osobno

  4. Ustaw poziome i pionowe wartości zgodnie z Twoimi potrzebami i kliknij Zastosuj

Bingo

 85
Author: Serge Seletskyy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-06-12 08:43:16

Tutaj wpisz opis obrazka

  1. załaduj swój SVG w metodzie Draw http://editor.method.ac (Plik > Otwórz obraz)
  2. Rozgrupuj swoje elementy (obiekt > Rozgrupuj elementy) być może będziesz musiał to zrobić więcej niż raz.
  3. Wybierz swoją ścieżkę
  4. Zmiana orientacji ścieżki (obiekt > Zmiana orientacji ścieżek).
  5. Zapisz swój obraz (Plik > Zapisz obraz) Jeśli pojawi się w nowym oknie, możesz kliknąć prawym przyciskiem myszy i "Zapisz obraz jako..."
 44
Author: Duopixel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-04-12 16:42:39

Rozgryzłem, w czym tkwi problem. Miałem nadzieję, że nie będę musiał uciekać się do odpowiedzi Roberta, chociaż cieszę się z potwierdzenia, że to zadziała! Ostatecznie odpowiedź Duopixela była najbliższa, choć okazało się, że działo się też coś innego.

Kiedy pracujesz z różnymi ścieżkami w dokumentach Inkscape, domyślnym zachowaniem jest grupowanie ich razem pod znacznikiem <svg:g.../>. Podczas modyfikowania ścieżek w grupie, Inkscape automatycznie doda transformację do grupy, aby reprezentować te zmiany. Jeśli jednak otworzysz edytor XML i przeciągniesz ścieżkę poza znacznik <svg:g.../> i nadasz mu własny znacznik <svg:path.../>, Inkscape może dowolnie edytować poszczególne punkty. W końcu okazało się to problemem grupowania, mimo że pracowałem tylko z jedną ścieżką! Mam nadzieję, że pomoże to innym w podobnych sytuacjach.

 43
Author: Ephemera,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-10-29 10:18:05

Dla grup przegrupowanie może wykonać zadanie szybko. Wybierz grupę i naciśnij Ctrl + Shift + G (grupa), a następnie Ctrl + G (Grupa).

Dla niektórych obiektów, które mają podobny problem, na przykład spirale i gwiazdy, szybkim sposobem jest naciśnięcie Ctrl + Alt + C ( pociągnięcie do ścieżki) - to jednak zamienia obiekt na czystą ścieżkę i usuwa wszystkie dodatkowe atrybuty, takie jak sodipodi:cx, sodipodi:revolutions i tak dalej.

 18
Author: UTF_or_Death,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-08-28 17:57:00

Istnieje rozszerzenie inkscape o nazwie Zastosuj transformaty to rekomplikuje ścieżki z jego transformacjami, to jest dokładnie to, czego szukałem.

Po zainstalowaniu znajdziesz go w menu rozszerzenia > zmodyfikuj ścieżkę > Zastosuj transformację.


Credits: Inkscape forum > Usuń wszystkie transformacje podczas trzymania w miejscu

 13
Author: piotr_cz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-12-21 08:57:37

Z mojego doświadczenia wynika, że jeśli używasz Inkscape, wystarczy lekko przesunąć element ścieżki (np. za pomocą klawiszy kursora), a Inkscape usunie atrybut transform i odpowiednio dostosuje dane ścieżki. (Denerwujące, jeśli rzeczywiście chcesz zachować atrybut transform.)

Możesz więc po prostu wybrać ścieżkę (upewnij się, że jest to ścieżka, a nie otaczająca Grupa), nacisnąć prawy i lewy klawisz kursora i gotowe.

 12
Author: Thomas W,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-11-11 22:04:52

Otwórz plik svg na Inkscape :

  • Wybierz grupę , która zawiera wszystkie transformacje, które chcesz się pozbyć
  • Naciśnij CTRL + U (ungroup)
  • Naciśnij CTRL + G (Grupa ponownie)

W ten sposób pozbędziesz się przekształceń zastosowanych do grupy i zostaną one przeniesione do ścieżek, które są zawarte w tej grupie.

Cheers

 10
Author: rmartrenado,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-17 10:58:45

Choć wolę Inkscape, (~$40 / Mac) zaoszczędziło mi wiele godzin wysiłku podczas pracy z rysunkami wektorowymi Androida.

Otwórz plik SVG, Plik - > Eksportuj - > SVG - > więcej - > spłaszczenie przekształceń działało świetnie.

Affinity Designer

 9
Author: snodnipper,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-10-13 11:05:04

Należy wspomnieć, że w preferencjach jest tryb "zoptymalizowany":

Inkscape Preferences > Transforms > Store transformation > Optimized

, co ma zminimalizować występowanie atrybutów transform w jak największym stopniu (ale nie ma).

To wydaje się być domyślnie włączone.

Zgodnie z dyskusja , jednym z przypadków, w którym ten zoptymalizowany trybnie ma zapału, jest zmiana rozmiaru strony . Powoduje to, że do elementu warstwy <g> zostanie zastosowana transformacja translate. Wygląda na to, że ewakuacja dzieci do innej warstwy jest obecnie najlepszym rozwiązaniem.

 7
Author: Evgeni Sergeev,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-03-10 14:45:18

Inkscape ma opcję wyczyszczenia danych transformacji, ale nadal pozostawia wartość obiektu niezmodyfikowaną.

W Inkscape wybierz menu Obiekt i "ścieżka", "Uprość". Teraz będziesz musiał usunąć transformacje.

Mam nadzieję, że to pomoże.

 6
Author: Kumar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-07-11 12:55:41

SVGO jest doskonałym narzędziem open-source wiersza poleceń do tej i wielu innych optymalizacji. Istnieje równie doskonały interfejs internetowy o nazwie SVGOMG

Odpowiednie opcje w tym przypadku to moveGroupAttrsToElems (SVGOMG: Move group attrs to elements), aby przenieść transform atrybuty z grup do elementów ścieżki, plus convertPathData (SVGOMG: Round/rewrite paths), aby spłaszczyć transform do d.

 6
Author: Rob Hogan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-11-20 16:52:05

W tym przypadku wystarczy dodać translate do wartości M dla każdego dziecka tak -10.254587 + 10.75 = -0.504587 i -308.96875 + 345.43597 = 36.46722.

Ponieważ wszystkie terminy w przykładzie są względne (tj. małe litery), to wszystko. Gdyby były bezwzględne (wielkie litery), np. M lub C, również musiałyby zostać skorygowane.

Dla skali można w zasadzie pomnożyć wszystkie wartości potomne przez skalę.

 5
Author: Robert Longson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-11-11 13:56:12

Aby usunąć atrybut transform z elementu (grupy) g w Inkscape, możesz przenieść grupę na jej ostatnie miejsce, rozgrupować ją, a następnie przegrupować wszystkie elementy. Teraz nowa grupa została utworzona, a jeśli nie przeniesiesz jej ponownie, nie otrzyma atrybutu transform dołączonego do niej.

 4
Author: mcnesium,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-10-17 15:08:47

Jeśli ktoś wyląduje tutaj szukając rozwiązania, aby to zrobić w Sketch 3, Zaznacz warstwę, a następnie kliknij Layer->Paths- > Flatten.

 4
Author: Joel Worsham,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-03-06 15:28:50

Znaleziono:

  • Ustaw żądany rozmiar strony*
  • Jeśli bieżąca warstwa ma transformację (sprawdź w edytorze XML, jest to górna grupa pod elementem SVG), Utwórz nową warstwę i przenieś do niej wszystkie obiekty
  • Rozgrupuj dowolne grupy (może to nie być potrzebne, YMMV)
  • Zaznacz wszystkie obiekty i zastosuj transformację null (taką jak skalowanie o 100% 100% lub Strzałka w prawo + Strzałka w lewo), mając transformację Store: Optimized w preferencjach / transformacje
  • If you had aby cofnąć grupy, możesz je przegrupować
  • Zapisz kopię jako zoptymalizowany SVG i ustaw żądaną precyzję numeryczną

*: albo przynajmniej umieść obiekty tam, gdzie ich potrzebujesz, względem lewego górnego rogu strony. Szkoda, że współrzędne SVG odnoszą się do lewego górnego rogu, podczas gdy Inkscape zmienia rozmiar strony względem lewego dolnego rogu!

 3
Author: Tobia,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-08-15 20:39:31
  1. Wybierz elementy o których mowa
  2. Object > Ungroup (powtarzaj, aż wszystko zostanie rozgrupowane; zobacz edytor XML dla zagnieżdżonych węzłów)
  3. ścieżka > obiekt do ścieżki (konwertuje wielokąty na ścieżki)
  4. obiekt > Przekształć > odznacz względne przesunięcie > Zastosuj
 3
Author: Charlie,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-02-18 19:00:57

Udało mi się pozbyć matrix(...) transformacji (z powodu dublowania), łącząc ścieżkę z prostokątem, a następnie usuwając węzły prostokąta. Część translate(...) została jednak.

 3
Author: Emily L.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-05-28 20:13:19

Próbowałem rozwiązania zamieszczonego tutaj, a mianowicie usunąć znaczniki grup w pliku SVG i otworzyć je ponownie w Inkscape (w moim przypadku 0.48.3.1). Niestety, po przetłumaczeniu ścieżek ponownie za pomocą trybu wyboru i przekształcenia (F1) i zapisaniu go, znaczniki grupy pojawiły się ponownie! Inkscape zapisuje wszystkie przekształcenia zastosowane do ścieżki w otaczającym elemencie grupy. Jeśli nie używasz narzędzia Zaznaczanie ścieżki-węzła (F2), naciśnij ctrl + a I przenieś węzły ścieżki we właściwe miejsce. Po tym, jak zrobiłem to zamiast i zapisane później Inkscape nie dodało znaczników grupy, ponieważ to tłumaczenie dotyczyło bezpośrednio modelu ścieżki. Mam nadzieję, że to pomoże.

 1
Author: Skadi2k3,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-01-24 14:36:29

W moim przypadku grupy są rzeczywiście spowodowane przez warstwy. Usunięcie wszystkich warstw w dokumencie usunęło grupę i przekształciło (prawdopodobnie połączone z rozgrupowaniem obiektów i przegrupowaniem ich itp., jak w Usuwanie przekształceń w plikach SVG (odpowiedź-35490189 od @Charlie powyżej))

 1
Author: Jamie Pate,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 10:31:37

Mój specyficzny problem polegał na symbolach, które były zdefiniowane poza stroną, co wymagało transformacji, która miała być pokazana na stronie.

Aby przenieść symbole na stronę bez konieczności transformacji, musiałem przejść przez następujące kroki w Inkscape:

  1. Otwórz okno symboli (Shift+Ctrl+Y)
  2. Usuń symbol z biblioteki dokumentów. (W oknie jest przycisk do tego.)
  3. Teraz grafika pojawia się w dokumencie, poza stroną granica.
  4. Rozgrupuj grafikę. (To ważny krok!)
  5. Przenieś grafikę wewnątrz granicy strony.
  6. Dodaj grafikę z powrotem do biblioteki symboli.
 0
Author: Peter,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-08-24 12:10:29

To wydaje się przypadkowe, ale nic innego nie próbowałem działa, więc tutaj idziesz przypadkowa inna osoba. Niektóre z moich ścieżek miały wokół siebie pewien margines, który można było zobaczyć tylko przy ich wyborze (przykład). Myślę, że powstał, gdy wkleiłem warstwę z innego pliku inkscape I obróciłem ją o 90 stopni. To sprawiło, że wypełnienie wzoru na kształtach ma inną transformację (linie rozmieszczone dalej od siebie). Spowodowało to również, że obiekty wyrównujące nie działały zgodnie z oczekiwaniami. Używając Zastosuj transformatę @ Piotr_cz naprawił problem z transformacją, ale dziwny margines pozostał. Przypadkowo pozbyłem się go, zmieniając rozmycie przy obrysie na dowolną wartość i zmieniając ją z powrotem na zero.

 0
Author: Jim,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-10-27 02:24:59

Jakoś nie miałem szczęścia z żadnym podejściem. Jeśli w pliku svg znajduje się sekcja <defs> i używa się jej w następujący sposób:

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

Być może będziesz musiał usunąć wszystkie zwyczaje i usunąć wszystko z sekcji defs. Następnie możesz użyć inkscape, aby umieścić to wszystko we właściwy sposób, a następnie zastosować transformacje za pomocą wspomnianej wtyczki. Mam nadzieję, że to komuś pomoże.

 0
Author: k102,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-06-05 12:18:08

Mam ten problem od lat. Rozwiązaniem jest oczywiście możliwość dynamicznej gry z transformami w przeglądarce, jeśli nie zostanie ona "naprawiona" w inkscape.

Użytkownik Mc na forum Inkscape dał mi To rozwiązanie.

Rozwiązanie buduje bieżącą transformację pomiędzy elementem SVG a jego głównym elementem SVG, a następnie zwraca pełny zestaw informacji BBox na podstawie sumy przekształceń.

Byłoby również możliwe, aby łatwo Zmień, do którego elementu odnoszą się obliczenia, jeśli chcesz pracować w przeglądarce między dwiema częściami tego samego pliku SVG.

Wreszcie mogę mieć panoramujący widok SVG.

 0
Author: Jay Day Zee,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-17 21:26:48