Jak zmniejszyć liczbę współrzędnych dowolnej ścieżki SVG, nie tracąc przy tym żadnej precyzji?

Przeszukuję sieć w poszukiwaniu narzędzi, programów, narzędzi, bibliotek wspierających i prymitywów kodu, które ostatnio optymalizują SVG pod kątem prostoty, przestrzeni i elegancji.The Kilobyte SVG Challengejestsekcja narzędzi, ale jeszcze nie znaleźliśmy dobrych prymitywów, skupiając się na tym, jak zmniejszyć liczbę współrzędnych ścieżki, bez utraty precyzji - lub idealnie żadnej.

Weź tę rozszerzoną marką wersjęLogo Coca Coli, na przykład (~ 7kb, zasadniczo wszystkie dane ścieżki) - który bardzo wyraźnie pokazuje wiele obiecujących możliwości zmniejszenia liczby bèzierów, biorąc pod uwagę pewne narzędzia do obliczeń, aby stworzyć ścieżkę wykorzystującą mniej węzłów, wytwarzając zasadniczo tę samą krzywą.

Dla znacznie prostszego problemu wielokątów i polilinii (czytaj „ścieżki wszystkich linii”), możesz użyć algorytmu Douglasa – Peuckera lub Visvalingama (patrzDoskonała implementacja d3 Mike'a Bostocka z tych ostatnich) po prostu usuń współrzędne najmniej wpływające na kształt ścieżki, aż będziesz zadowolony z dopasowania rozmiaru do precyzji odpowiadającego Twoim potrzebom.

Szukam odpowiednika, w którym powiadomienia, w których większe segmenty krzywej (a nawet łuku) mogłyby zastąpić wiele z tych zbędnych przystanków współrzędnych krzywej środkowej, bez dużej ilości ręcznych poprawek. Myślę, że niektóre pakiety grafiki wektorowej (Adobe Illustrator, a może nawet Inkscape?) Mogą oferować takie funkcje (wskazówki, jak uzyskać do nich dostęp!) - choć chciałbym znaleźć narzędzia skryptowe, które możemy polecić i zaoferować HOWTO, jak korzystać z nich wiersz poleceń, a nawet aplikacje internetowe, które wyciskają nadmiar materiału wypełniacza ścieżki dla ludzi.

Dla odniesienia,Kilobyte SVG Challenge to zabawna edukacja SVG i rzecznictwo, które ostatnio założyłem. Wszystkie dyskusje na ten temat, które nie są pytaniami, są najlepiej utrzymywane w tym miejscu i / lub w powiązanym z nim repozytorium github. Bądź niesamowity! :)

questionAnswers(1)

yourAnswerToTheQuestion