Как уменьшить количество координат произвольного пути SVG, не теряя много или никакой точности?

Я слежу в Интернете за инструментами, программами, утилитами, вспомогательными библиотеками и примитивами кода, которые в последнее время помогают оптимизировать SVG для простоты, пространства и элегантности, чтобы ссылаться на них изКилобайт SVG Challenge«sраздел инструментов, но еще предстоит найти хорошие примитивы, сосредоточенные на том, как уменьшить количество координат пути, не теряя при этом значительной - или в идеальном случае - точности.

Возьми эту маркерно-дополненную версиюЛоготип кока кола, например (~ 7 КБ, по существу, все данные пути) - который очень ясно показывает многообещающие возможности для сокращения количества безье, учитывая некоторые инструменты для математического анализа, позволяющие найти путь с использованием меньшего количества узлов, в то же время создавая по существу ту же кривую.

Для гораздо более простой задачи о многоугольниках и полилиниях (см. «Пути по всем линиям») вы можете использовать алгоритм Дугласа – Пекера или Висвалингама (см.Отличная реализация Майка Бостока в d3 из последнего) просто удалить координаты, которые меньше всего влияют на форму пути, пока вы не будете удовлетворены размером с точностью, соответствующей вашим потребностям.

Я ищу эквивалент, который замечает, что более крупные сегменты кривой (или даже дуги) могли бы заменить множество этих избыточных координатных остановок в середине кривой без большого количества ручной настройки. Я думаю, что некоторые пакеты векторной графики (Adobe Illustrator, может быть, даже Inkscape?) Могут предлагать такие функции, как эти (советы о том, как получить к ним доступ, приветствуются!) - хотя я хотел бы найти инструменты с поддержкой скриптов, которые мы можем порекомендовать, и предложить HOWTO о том, как их использовать из командная строка или даже веб-приложения, которые выжимают лишний материал для заполнения пути для людей.

Для справки,Килобайт SVG Challenge это забавный трюк в сфере образования и адвокации, который я недавно организовал. Все обсуждения, не связанные с вопросами, лучше всего проводить там, и / или в своем репозитории github, указанном выше. Оставайся классным! :)

Ответы на вопрос(1)

Ваш ответ на вопрос