2012-12-16 19 views
9

我正在搜索工具,程序,實用程序,支持庫和代碼基元的網頁,以幫助優化SVG的簡潔性,空間和優雅,最近鏈接到the Kilobyte SVG Challengetools section,但尚未找到關注以減少路徑的座標數量,而不會損失太多或理想的精度。如何減少任意SVG路徑的座標數,而不會損失太多或精度?

採取Coca Cola logo這個標誌增加了的版本,例如(~7kb, essentially all path data) - 這非常清楚地表明許多承諾減少其貝濟耶的數量,給予一定的工具做數學拿出使用更少的節點的路徑,同時產生基本相同的曲線。對於更簡單的多邊形和多段線問題(讀爲「全線路徑」),可以使用Douglas-Peucker或Visvalingam的算法(參見後者的Mike Bostock's excellent d3 implementation),以簡單地移除最少影響路徑形狀的座標直到您滿意地滿足您的需求的尺寸到精確度。

我正在尋找相當於通知大的曲線(甚至弧)段可以取代大量這些冗餘的中曲線座標停止,沒有大量的手動調整。我認爲一些矢量圖形軟件包(Adobe Illustrator,甚至是Inkscape?)可能會提供類似這樣的功能(有關如何訪問它們的提示,歡迎!) - 儘管我很想找到可以編寫腳本的工具,我們可以推薦並提供如何使用HOWTO命令行甚至是網絡應用程序,它們爲人們擠出多餘的路徑填充材料。

作爲參考,Kilobyte SVG Challenge是一個有趣的SVG教育和倡導特技,我最近成立了。所有關於它的非問題主題討論最好在這裏和/或上面鏈接的github存儲庫中進行。保持好狀況! :)

+0

在Inkscape中,您有菜單項Path => Simplify。也許你可以挖掘用於此功能的代碼。 –

+0

這是一個真正的問題,還是一個僞裝的廣告? – GameAlchemist

+0

@GameAlchemist我想要更好,更容易找到並使用這個複雜問題的解決方案。據我所知,爲了刪除問題以刪除我希望發佈有力答案的地方的內容,可能會更多地與Stack指南保持一致,但可能需要花費更多的精力來拒絕像Ramer-Douglas- Peucker算法僅適用於一些線性插值點。 – ecmanaut

回答

1

您可以使用Ramer–Douglas–Peucker algorithm來簡化多段線或多邊形路徑。

enter image description here

+1

這個問題已經在這個問題中說明了很多,但是感謝這個簡潔地演示它的工作的圖像示例。 問題的複雜性在於,SVG路徑實際上是原始級別的三次樣條曲線而不是多義線/多邊形,並且結果的簡潔近似需要重新創建一些三次樣條曲線以獲得它們所具有的表現力的簡潔性,儘管有不同的控制點。 – ecmanaut