所以,讓我們說我有一個看起來像這樣的SVG:數學變換中的SVG路徑值來填充視框
<svg width="800" height="600" viewBox="0 0 800 600" style="border: 1px solid blue;">
\t <path fill="#f00" stroke="none" d="M720 394.5c-27.98 0-51.61-6.96-71.97-18.72-29.64-17.1-52.36-44.37-71.48-75.12-28-45.01-48.31-97.48-71.39-136.52-20.03-33.88-42.14-57.64-73.16-57.64-31.1 0-53.24 23.88-73.31 57.89-23.04 39.05-43.34 91.45-71.31 136.39-19.28 30.98-42.21 58.41-72.2 75.45C195 387.72 171.62 394.5 144 394.5Z"/>
</svg>
正如你所看到的,路徑僅佔一部分SVG(和viewBox區域)。
我想知道如何轉換填充viewBox的路徑中的值(實際上是重新縮放和重新定位路徑中的值,以便填充整個viewBox)。
[更新]
我增加了一些更多的細節......
以一個例子 - 讓說,我開始與視框像這樣的SVG:0 0 1600 1600
。
在該SVG中,有一條路徑佔用從1200,1200
到1500,1400
的區域。 (即,路徑是300×200)。
我希望能夠提取該路徑,並將其添加到視圖框爲0 0 300 200
的新SVG。
要做到這一點,d
屬性中的值需要相應修改 - 基本上向上移動了1200個點並向左移動。
顯然,絕對座標需要改變,但相對座標不會。 (這應該很容易)。
但我也必須處理曲線及其控制點,這可能會有點棘手。
一個完美的解決方案將能夠檢查路徑,確定可能包含它的最小邊界框,然後調整所有點以使它們適合該邊界框,並將其固定在0,0
處。
我不想縮放或拉伸路徑。
我很喜歡數學過程或函數來做到這一點,或者某種在線工具。
我意識到我可以使用SVG轉換來完成此操作,但我希望能夠更改實際路徑。
(即,我不希望我的網頁,包括「不正確」的數據以及變換爲「糾正」它,我只是希望我的代碼,包括「正確」的數據。)
有一種方法來做到這一點?
[Inkscape中] (http://inkscape.org)可以[凍結轉換](http://www.inkscapeforum.com/viewtopic.php?t=10205) – cxw
其他方法可能會更容易:將視圖框大小調整爲路徑。爲此,你可以看看:http://stackoverflow.com/q/16377186/1169798 – Sirko
@Sirko - 這是一個好主意,但是SVG中的其他所有*必須與該適配viewBox相關。我真正希望能夠做的是從另一個SVG(帶有一個任意的viewBox)開始,並使其適應新的SVG。所以 - 我真的需要能夠適應路徑,而不是viewBox。 – mattstuehler