2012-10-11 40 views
9

我想知道是否有任何命令行工具可用於在SVG中平滑轉換嵌套組?平滑SVG嵌套轉換的工具

在我的具體情況,我是一個CAD軟件生成PDF轉換爲SVG,然後加入一些元素和發佈修改後的SVG的網頁進行查看。 SVG的響應時間非常緩慢(用於平移和縮放),並且我發現這是由於SVG內嵌入的組數很大,通常高達幾百個深度。對於在SVG的每個元素中,瀏覽器需要計算在其所有父節點的位置...

顯然,這是荒謬,因爲所有這些元件所需要的是一個單一的轉化(矩陣)。所以我想知道是否有人知道一個工具來扁平化(或者C#或Delphi實現會這樣做......)。

+0

你有沒有找到一個體面的解決方案呢? –

+0

@TomHall:除了PStill之外,沒有任何解決方案。我認爲對於任何代碼來說,將許多折線(路徑)轉換爲更簡單的形狀可能太複雜了。 – Optavius

+0

迄今爲止,我發現的最佳選擇是,在將其保存爲「優化PDF」(它是「放棄對象」的一部分)時,使用Adobe PDF中的「拼合表單字段」選項。這至少會消除嵌套,即使它不一定減少對象的數量。 – Optavius

回答

0

你可以去SVG Cleaner。它不幸是一個GUI工具,所以它並不真正滿足你的要求,但它提供了一個批處理理念,可以變得有用。

+1

不幸的是,SVG清潔工並沒有走得太遠。我真的希望有一些準備好的工具來扁平化所有這些廢話,比如'<路徑d =「m0,841.61h5.67」/><路徑d =「m0,841.61h5.67」/> ...' –

1

感謝Delapouite,

同時我發現這一個:(PStill)。它完成了將結構扁平化的完美工作(PDF to PDF),但是由此產生的SVG仍然有很多元素,使得它對於瀏覽器來說非常不可用。 CAD系統產生PDF的真正麻煩在於:很多非常小的路徑,而不是一條較長的路徑。我敢肯定還有優化的餘地。有一天:-)

0

有扁平化變革中Inkscape的圖形編輯的選項。
因此,您可以使用Inkscape終端命令來實現它,但是您必須查看是否存在這樣的命令。

+1

據我所知,Inkscape似乎完成了這項工作(至少在GUI中),但它是一個非常有限的功能: 我需要選擇所有對象,然後取消組合,然後重新選擇它們並取消組合,然後重複,直到我確定沒有更多的組被分組。每次這需要一定的處理時間,所以它變得相當乏味的過程。 – Optavius

5

我發現的最好的是svgo https://github.com/svg/svgo但它仍然不令人滿意。 SVGO的目標是生成一個更小的svg文件。這意味着如果一個轉換允許保存一個較小的svg文件。我的目的與OP相似,但略有不同。我正在尋找一些可以展平並將SVG完全簡化爲基本路徑&元素的東西。

+0

https://jakearchibald.github.io/svgomg/建立在svgo上允許這個 - 嘗試轉換' <克變換= 「翻譯(-10,2.64)」> <路徑d = 「米10201ħ90」 行程= 「石灰」/> ' – Ruskin

+0

我得到' <路徑d =「M0 204h90」stroke =「#0f0」/> '......很可能通過命令行SVGO。 – Ruskin

-1

我是Inkscape的新手,但對GIMP來說很老。

我注意到Inkscape有一個「extensions」文件夾,其中找到了python程序。

我懷疑Inkscape中也有類似的功能(儘管它並沒有立即幫助明顯),以GIMP在允許用戶編寫自己的自定義擴展。在GIMP中,最簡單的腳本只是自動執行用戶從其工作流程中的菜單中選擇的手動步驟。

但是,可能比菜單上提供的更復雜的處理。