Od jakiegoś czasu zmagam się z tym i nie mogę znaleźć odpowiedzi (która działa) nigdzie. 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ąć transform="..."
linię, ale nadal mam obraz w miejscu, w którym go umieściłem (w InkScape). Jeśli ręcznie usuwam transformację, obraz przeskakuje do innej części ekranu (zgodnie z oczekiwaniami), ale muszę całkowicie pozbyć się transformacji, a jednocześnie pozostawić obraz dokładnie tam, gdzie chcę. Czy istnieje sposób, aby usunąć / spłaszczyć transformacje do samych współrzędnych ścieżki? (Jedyne transformacje, z którymi mam do czynienia, to translacja i skala, bez macierzy.)
Odpowiedzi:
Jak usunąć transformacje w Inkscape
Jak całkowicie przenieść wszystkie obiekty bez tworzenia kolejnych atrybutów transformacji
Idź do Object -> Transform
W panelu Przekształć
Usuń zaznaczenie opcji Ruch względny i zaznacz Zastosuj do każdego obiektu oddzielnie
źródło
Wykryłem, na czym polega 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ź Duopixel była właściwie najbliższa, choć okazuje się, że działo się coś innego.
Kiedy pracujesz z różnymi ścieżkami w dokumentach Inkscape, uważam, że ich domyślnym zachowaniem jest zgrupowanie ich razem pod
<svg:g.../>
tagiem. Podczas modyfikowania ścieżek w grupie Inkscape automatycznie doda transformację do grupy, aby przedstawić te zmiany. Jeśli jednak otworzysz edytor XML i przeciągniesz ścieżkę poza<svg:g.../>
znacznik i utworzysz własny<svg:path.../>
znacznik, Inkscape może dowolnie edytować poszczególne punkty. Ostatecznie okazało się, że był to problem z grupowaniem, mimo że pracowałem tylko z jedną ścieżką! Mam nadzieję, że pomoże to innym w podobnych sytuacjach.źródło
źródło
Istnieje rozszerzenie Inkscape o nazwie Apply Transforms które ponownie ścieżki wraz z ich transformacjami. To jest dokładnie to, czego szukałem.
Po zainstalowaniu znajdziesz go w menu pod Rozszerzenia> Modyfikuj ścieżkę> Zastosuj transformację .
kredyty: forum Inkscape> Usuń wszystkie transformacje, zachowując na miejscu
źródło
W przypadku grup przegrupowanie może szybko wykonać zadanie. Wybierz grupę i naciśnij Ctrl + Shift + G (degroup), a następnie Ctrl + G (grupa).
W przypadku niektórych obiektów, które mają podobny problem, na przykład spirale i gwiazdy, szybkim sposobem jest naciśnięcie Ctrl + Alt + C (obrys do ścieżki) - to jednak konwertuje obiekt na czystą ścieżkę i usuwa wszystkie dodatkowe atrybuty, takie jak sodipodi: cx, sodipodi: revolutions i tak dalej.
źródło
Otwórz plik SVG w Inkscape :
W ten sposób pozbędziesz się transformacji zastosowanych do grupy i zostaną one przeniesione na ścieżki zawarte w tej grupie.
źródło
Z mojego doświadczenia wynika, że jeśli używasz Inkscape, wystarczy nieznacznie przesunąć element ścieżki (np. Za pomocą klawiszy kursora), a Inkscape usunie atrybut transformacji i odpowiednio dostosuje dane ścieżki. (Irytujące, jeśli faktycznie chcesz zachować atrybut transformacji).
Możesz więc po prostu wybrać ścieżkę (upewnij się, że jest to ścieżka, a nie otaczająca ją grupa), nacisnąć prawy i lewy klawisz kursora i gotowe.
źródło
<g>
i chcę zachować przekształcenie w pliku<g>
.Chociaż wolę Inkscape, Affinity Designer (~ 40 USD / Mac) zaoszczędził mi wielu godzin pracy z Androidem Vector Drawables.
Otwórz plik SVG, Plik -> Eksportuj -> SVG -> Więcej -> Spłaszcz transformacje działały świetnie.
źródło
SVGO to doskonałe narzędzie wiersza poleceń typu open source do tego i wielu innych optymalizacji. Jest dla niego równie doskonały internetowy interfejs użytkownika o nazwie SVGOMG
Odpowiednie opcje są w tym przypadku
moveGroupAttrsToElems
(SVGOMG:Move group attrs to elements
) przenieśćtransform
atrybuty z grup do elementów toru, plusconvertPathData
(SVGOMG:Round/rewrite paths
) spłaszczyćtransform
sięd
.źródło
Należy wspomnieć, że w preferencjach jest tryb „Zoptymalizowany”:
Inkscape Preferences> Transforms> Store Transforms> Optimized
Ma to na celu maksymalne zminimalizowanie występowania
transform
atrybutów (ale tego nie robi).Wydaje się, że i tak jest domyślnie włączone.
Według dyskusji jednym z przypadków, w których w tym trybie zoptymalizowanym brakuje zapału, jest zmiana rozmiaru strony . Powoduje to zastosowanie
translate
transformacji do<g>
elementu warstwy . Wydaje się, że ewakuacja dzieci na inną warstwę jest w tej chwili najlepszym rozwiązaniem.źródło
translate
przekształceń na każdej warstwie, spróbuj otworzyć.svg
plik w edytorze tekstu i manipulować atrybutami wysokości i szerokości, które pojawiają się u góry.Inkscape ma opcję wyczyszczenia danych transformacji, ale nadal pozostawia niezmienioną wartość obiektu.
W Inkscape wybierz obiekt i menu „Ścieżka”, „Uprość”. Teraz będziesz mieć usunięte transformacje.
źródło
W tym przypadku wystarczy dodać translację do m wartości dla każdego dziecka, więc -10,254587 + 10,75 = -0,504587 i -308,96875 + 345,43597 = 36,46722.
Ponieważ wszystkie terminy w przykładzie są względne (tj. Małymi literami), to wszystko. Gdyby którekolwiek były bezwzględne (wielkie litery), np. M lub C, musiałyby również zostać dostosowane.
W przypadku skali pomnożyłbyś w zasadzie wszystkie wartości potomne przez skalę.
źródło
źródło
<g>
ztransform
atrybutem pozostaje taki, jaki był. Również mój obiekt (tak jak ten pokazany w pytaniu) jest już ścieżką.Aby usunąć atrybut transform z
g
elementu (grupy) w Inkscape, możesz przenieść grupę na jej ostateczne miejsce, rozgrupować ją, a następnie przegrupować wszystkie elementy. Teraz została utworzona nowa grupa i jeśli nie przeniesiesz jej ponownie, nie zostanie do niej dołączony atrybut transformacji.źródło
Jeśli ktoś wyląduje tutaj, szukając rozwiązania, aby to zrobić w Szkicu 3, wybierz warstwę, a następnie kliknij Warstwa-> Ścieżki-> Spłaszcz.
źródło
Znalazłem to:
*: Lub przynajmniej umieść obiekty tam, gdzie ich potrzebujesz, w stosunku do 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!
źródło
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.translate(...)
Część mieszkaliśmy choć.źródło
W moim przypadku zapisanie jako zoptymalizowany SVG rozwiązało problem. Więc w Inkscape użyj:
Plik -> Zapisz jako ... -> Zoptymalizowany SVG.
źródło
transform
atrybut nie jest obsługiwany przez Android Studio.Działa to, jeśli używasz Inkscape:
We wszystkich przypadkach, które próbowałem, usunęło to wszelkie atrybuty transformacji. Nie jestem pewien, czy zadziała w przypadku bardziej złożonych plików SVG.
źródło
Wypróbowałem rozwiązanie zamieszczone tutaj, a mianowicie usunięcie tagów grup w pliku SVG i ponowne otwarcie go w Inkscape (w moim przypadku 0.48.3.1). Niestety, po ponownym przetłumaczeniu ścieżek za pomocą trybu zaznaczania i transformacji (F1) i zapisaniu go, znaczniki grupowe pojawiły się ponownie! Inkscape zapisuje wszystkie transformacje zastosowane do ścieżki w otaczającym elemencie grupy. Jeśli nie używasz narzędzia wyboru ścieżki-węzła (F2), naciśnij ctrl + a i przesuń węzły ścieżki we właściwe miejsce. Po tym, jak to zrobiłem, a potem zapisałem, Inkscape nie dodał tagów grup, ponieważ to tłumaczenie zostało zastosowane bezpośrednio do modelu ścieżki. Mam nadzieję że to pomoże.
źródło
W moim przypadku grupy są faktycznie tworzone przez warstwy. Usunięcie wszystkich warstw w dokumencie spowodowało usunięcie grupy i transformacji (prawdopodobnie w połączeniu z rozgrupowaniem obiektów i przegrupowaniem ich itp., Jak w przypadku usuwania przekształceń w plikach SVG (odpowiedź-35490189 z @Charlie powyżej))
źródło
Mój specyficzny problem dotyczył symboli, które zostały zdefiniowane poza stroną, co wymagało pokazania transformacji na stronie.
Aby przenieść symbole na stronę bez konieczności przekształcania, musiałem wykonać następujące kroki w Inkscape:
źródło
Wydaje się to przypadkowe, ale nic innego, co próbowałem, nie działało, więc tutaj idziesz przypadkową inną osobą. Niektóre z moich ścieżek miały wokół siebie margines, który można było zobaczyć tylko po ich wybraniu ( ). Myślę, że zostało to utworzone, gdy wkleiłem warstwę z innego pliku inkscape i obróciłem ją o 90 stopni. To spowodowało, że wypełnienie deseniem na kształtach miało inną transformację (linie oddalone od siebie). Sprawiało również, że wyrównywanie obiektów nie działało zgodnie z oczekiwaniami. Użycie opcji Zastosuj transformację, o której wspomniał @Piotr_cz, naprawiło problem z transformacją, ale dziwny margines pozostał. Przypadkowo się go pozbyłem, zmieniając Blur on Stroke na dowolną wartość i zmieniając go z powrotem na zero.
źródło
Jakoś nie miałem szczęścia w żadnym z podejść. Jeśli
<defs>
w twoim svg jest sekcja i używa się w ten sposób:może być konieczne usunięcie wszystkich zastosowań i usunięcie wszystkiego 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.
źródło
Mam ten problem od lat. Rozwiązaniem jest oczywiście możliwość dynamicznej zabawy z transformacjami w przeglądarce, jeśli nie będzie to „naprawiane” w inkscape.
Użytkownik Mc na forach Inkscape dał mi to rozwiązanie .
Rozwiązanie buduje bieżącą transformację między elementem SVG a jego elementem głównym SVG, a następnie zwraca pełny zestaw informacji BBox na podstawie wszystkich przekształceń.
Byłaby również możliwa łatwa zmiana elementu, do którego odnoszą się obliczenia, gdybyś chciał wykonać w przeglądarce pracę między dwiema częściami tego samego pliku SVG.
Wreszcie mogę mieć panoramiczny widok SVG.
źródło
Inkscape 1.0 na Kubuntu 20.04
Chociaż ten wątek jest dość stary, chciałbym zamieścić moje doświadczenia / rozwiązanie. Natknąłem się na ten problem, próbując utworzyć szablon dla środowiska roboczego FreeCAD TechDrawing. Te szablony nie mogą zawierać żadnych przekształceń.
W moim przypadku musiałem dodać logo firmy z zewnętrznego pliku .svg (w całości wykonanego w Inkscape). Logo zawiera elementy graficzne i tekstowe. Podczas kopiowania tego logo do szablonu utworzono transformacje, które spowodowały, że szablon nie działał poprawnie we FreeCAD.
Po pierwsze, to rozwiązanie sugerowane na www.freecadweb.org / ... nie działa dla mnie. Dlatego przeszukałem sieć i znalazłem tę dyskusję.
Po drugie, żadne z zaproponowanych powyżej rozwiązań nie zadziałało, ale postawiły mnie na właściwej drodze. Odpowiedź Charliego była bliska, ale Obiekt> Przekształć> Odznacz ruch względny> Zastosuj nie wykazał żadnej różnicy.
U mnie zadziałało:
Działa dobrze, gdy używam tego szablonu we FreeCAD.
Jeden dziwny szczegół: chociaż moje rozwiązanie sugeruje, że w moim przypadku problemem były elementy tekstowe, to nie może być takie proste. W rzeczywistości dokument bazowy (ten, do którego skopiowałem logo) zawiera wiele elementów tekstowych i żadnego z nich nie przekonwertowałem. Więc może to być połączenie „źródła zewnętrznego” i elementów tekstowych. Po prostu zamieszczam ten szczegół jako wskazówkę dla innych, którzy mogą mieć podobne problemy.
źródło