Wie reduziere ich die Koordinatenanzahl eines beliebigen SVG-Pfades, ohne viel oder keine Genauigkeit zu verlieren?

9

Ich durchstöbere das Internet nach Werkzeugen, Programmen, Hilfsprogrammen, unterstützenden Bibliotheken und Code-Primitiven, die SVGs in letzter Zeit für Einfachheit, Raum und Eleganz optimieren, um von der Kilobyte SVG Challenge Werkzeugbereich , aber müssen noch gute Primitive finden, die sich darauf konzentrieren, wie man die Anzahl der Koordinaten eines Pfades reduzieren kann, ohne viel - oder idealerweise - Genauigkeit zu verlieren.

Nehmen Sie diese markervergrößerte Version des Coca-Cola-Logos , zum Beispiel ( ~ 7kb, im Wesentlichen alle Pfaddaten ) - was sehr deutlich zeigt, dass es sehr vielversprechend ist, die Anzahl der Bèzier zu reduzieren, wenn man ein paar Werkzeuge zur Verfügung hat die Mathematik, um einen Weg mit weniger Knoten zu finden, während im Wesentlichen die gleiche Kurve produzieren.

Für das viel einfachere Problem von Polygonen und Polylinien (lesen Sie "Pfade mit allen Linien") können Sie den Algorithmus von Douglas-Peucker oder Visvalingam verwenden (siehe Mike Bostocks hervorragende d3-Implementierung des letzteren), um einfach die Koordinaten zu entfernen, die die Form des Pfades am wenigsten beeinflussen, bis Sie mit einer Größe-zu-Präzision-Anpassung zufrieden sind, die Ihren Bedürfnissen entspricht.

Ich suche nach dem Äquivalent, das bemerkt, wo größere Kurven- (oder sogar Bogen-) Segmente viele dieser redundanten Mittelkurven-Koordinatenstopps ersetzen könnten, ohne viel manuelle Feinabstimmung. Ich denke, einige Vektor-Grafik-Pakete (Adobe Illustrator, vielleicht sogar Inkscape?) Bieten solche Features (Tipps, wie man auf sie zugreifen kann!) - obwohl ich gerne skriptfähige Tools finden würde, die wir empfehlen und HOWTOs zur Verfügung stellen die Befehlszeile oder sogar Web-Apps, die überschüssiges Pfadfüllmaterial für Personen auspressen.

Zur Referenz: Die Kilobyte SVG Challenge ist eine SVG-Ausbildung, die ich in letzter Zeit aufgebaut habe. Alle nicht-Frage-Themen-Diskussionen dazu finden Sie am besten dort und / oder auf dem oben verlinkten github-Repository. Bleib großartig! :)

    
ecmanaut 16.12.2012, 00:42
quelle

1 Antwort

2

Sie können den Algorithmus Ramer-Douglas-Peucker verwenden, um Polylinien oder Polygone zu vereinfachen.

>

    
cuixiping 28.12.2013 15:26
quelle

Tags und Links