2011-08-06 6 views
8

私はsvgグラフィックスグループを持っています(私はパス、recatanglesなどを意味する)。私は70,70にexleのために、特定のサイズにグループをスケールしたい。私はsvgがスケール変換を提供することを知っていますが、スケール変換には、グループには多くの形があり、グループ全体のバウンディングサイズを決定するのは容易ではないため、わからないスケールファクターが必要です。
svg elemenentとpreserveAspectRatioパラメータのviewBoxパラメータで再生しましたが、希望の結果(70,70にスケールグループ)を取得できませんでした。
maxtrix変換でグループをスケールすることは可能でしょうか、それとも他の方法で存在しますか?どのように私はsvgグラフィックスグループをファクタではなく、希望のサイズにスケールできますか?

答えて

6

getBBox()関数を使用して、グラフィックスの現在のサイズを取得し、幅と高さを使用してグラフィックスに適用して、目的のサイズに合わせる必要があるスケール係数を計算できます。 G1は、このソリューションで遊んしたい人のために70

<?xml version="1.0" encoding="UTF-8" ?> 
<svg version="1.2" viewBox="0 0 480 240" width="480" height="240" xmlns="http://www.w3.org/2000/svg" > 
<g id="g1"> 
    <rect x="20" y="20" width="100" height="100" fill="red" /> 
    <rect x="40" y="60" width="100" height="100" fill="blue" /> 
</g> 
<script type="application/ecmascript"> 

    var width=70, height=70; 
    var node = document.getElementById("g1"); 
    var bb = node.getBBox(); 
    var matrix = "matrix("+width/bb.width+", 0, 0, "+height/bb.height+", 0,0)"; 
    node.setAttribute("transform", matrix); 

</script> 
</svg> 
+1

に設定された幅と高さとrectangeに合わせてスケーリングされたグループ内のグラフィックス以下の例では

は、ここにありますあなたのソリューションのJSFiddle:http://jsfiddle.net/luken/4xx9edo2/ ... 'transform'属性を使用しているのは唯一の解決策ですか? ''に親 ' 'の幅と高さを継承するように指示する方法はありませんか? – Luke

+0

完璧に動作します、ありがとう!これは受け入れられた答えでなければなりません。 – Booligoosh

関連する問題