2012-12-16 6 views
9

Je suis à la recherche d'outils, de programmes, d'utilitaires, de bibliothèques de support et de primitives de code qui aident à optimiser les SVG pour la simplicité, l'espace et l'élégance récemment, mais qui n'ont pas encore trouvé de bonnes primitives. réduire le nombre de coordonnées d'un chemin, sans perdre beaucoup - ou idéalement - de précision.Comment réduire le nombre de coordonnées d'un chemin SVG arbitraire, sans perdre beaucoup ou aucune précision?

Prenez cette version marqueur augmentée du Coca Cola logo, par exemple (~7kb, essentially all path data) - qui montre très clairement beaucoup de promesses pour réduire le nombre de BEZIERS, compte tenu de certains outils pour faire le calcul pour trouver un chemin en utilisant moins de nœuds , tout en produisant essentiellement la même courbe. Pour le problème beaucoup plus simple des polygones et des polylignes (lire "all-line paths"), vous pouvez utiliser l'algorithme de Douglas-Peucker ou Visvalingam (voir Mike Bostock's excellent d3 implementation de ce dernier) pour supprimer simplement les coordonnées affectant le moins la forme du chemin jusqu'à ce que vous soyez satisfait d'un ajustement taille-précision adapté à vos besoins.

Je cherche l'équivalent qui remarque que des segments de courbe plus grands (ou même arcs) pourraient remplacer beaucoup de ces arrêts de coordonnées de courbe médiane redondants, sans beaucoup de réglages manuels. Je pense que certains paquets graphiques vectoriels (Adobe Illustrator, peut-être même Inkscape?) Peuvent offrir des fonctionnalités comme celles-ci (des conseils sur la manière d'y accéder!) - bien que j'aimerais trouver des outils scriptables que nous pouvons recommander. la ligne de commande, ou même les applications Web, qui évincent l'excès de matériau de remplissage de chemin pour les personnes.

À titre de référence, le Kilobyte SVG Challenge est un acrobatie SVG pour l'éducation et la défense des droits que j'ai mis en place récemment. Toutes les discussions qui ne sont pas sujettes à des questions à ce sujet y sont mieux conservées, et/ou sur son référentiel github lié ci-dessus. Restez génial! :)

+0

Dans Inkscape, vous avez l'option de menu Chemin => Simplifier. Peut-être que vous pouvez creuser le code qui est utilisé pour cette fonctionnalité. –

+0

Est-ce une vraie question, ou une publicité déguisée? – GameAlchemist

+0

@GameAlchemist Je veux mieux, plus facile à trouver et à utiliser des solutions à ce problème compliqué. Wikifier la question pour supprimer le contexte d'où je veux publier des réponses fortes pourrait aligner plus sur les lignes directrices de Stack, pour autant que je sache, mais probablement au prix d'avoir à mettre plus d'efforts pour rejeter des réponses simplifiées comme le cas spécial Ramer-Douglas- Algorithme de Peucker pour les chemins qui emploient juste un tas de points interpolés linéairement. – ecmanaut

Répondre

1

Vous pouvez utiliser Ramer–Douglas–Peucker algorithm pour simplifier le chemin des polylignes ou des polygones.

enter image description here

+1

Cela est déjà mentionné dans la question, mais merci pour l'exemple d'image qui démontre succinctement son fonctionnement. Ce qui complique le problème, c'est que les chemins SVG sont réellement des splines cubiques au niveau primitif plutôt que des polylignes/polygones, et qu'une approximation succincte du résultat aurait besoin de recréer des splines cubiques pour se rapprocher de la puissance expressive exprimée. mais avec des points de contrôle différents. – ecmanaut

Questions connexes