SVGオブジェクトの拡大縮小とミラーリング
質問
オブジェクトを現在のサイズの 2 倍に拡大縮小してから、垂直方向と水平方向、またはその両方に反転させるには、どのようにすれば最も簡単でしょうか?
今のところ、幅と高さが2倍になるように "scale(2,2)" を設定することはできますが、垂直反転のために scale(-1,1) で同時に反転させることができません。
エクスポートするためのフォーマットとして、プログラムでSVGオブジェクトを作成しています。
どのように解決するのですか?
スケールとフリップの両方を適用するには、transformに両方を記述すればよいでしょう。
transform="scale(2,2) scale(-1,1)"
あるいは、単純に値を組み合わせてもよい。
transform="scale(-2,2)"
もちろん、負のスケールで発生する問題は、オブジェクトがSVGの原点(左上)を横切って反転するため、ドキュメントの端から外れてしまう可能性があることです。 同様にtranslateを追加することによって、これを修正する必要があります。
例えば、100×100のドキュメントがあったとします。
<svg width="100" height="100">
<polygon points="100,0,100,100,0,100"/>
</svg>
これを縦に反転させるには、こうします。
<polygon points="100,0,100,100,0,100" transform="scale(2,-2)"/>
そして、画面外の動きを修正するには、次のどちらかを行います。
(オプション1) フリップする前にマイナスにシフトする(そうすれば、画面上で反転する)。
<polygon points="100,0,100,100,0,100" transform="scale(2,-2) translate(0,-100)"/>
(トランスフォームのリストは右から左へと効果的に適用されるため、ここではトランスレートを2番目にリストアップしています。)
(オプション2) あるいは、後から(スケーリングされたサイズ分だけ)正方向にシフトさせることもできます。
<polygon points="100,0,100,100,0,100" transform="translate(0,200) scale(-2,2)"/>
更新
画面上のどこかにある既存のオブジェクトを(位置的に)反転させる。 まず、そのバウンディングボックス (minX, minY, maxX, maxY) または centerX,centerY を使うことができます。
そして、そのtransformの前に以下を追加します。
translate(<minX+maxX>,0) scale(-1, 1) // for flip X
translate(0,<minY+maxY>) scale(1, -1) // for flip Y
または、センターがある場合は
translate(<2 * centreX>,0) scale(-1, 1) // for flip X
つまり、あなたの例では
<rect x="75" y="75" width="50" height="50" transform="translate(-100, -100) scale(2, 2) scale(1, 1) rotate(45, 100, 100)" />
は minX+maxX は200になります。そこで、水平方向に反転させるために、前置詞をつける。
translate(200,0) scale(-1, 1)
というわけで、最終的なオブジェクトはこうなる。
<rect x="75" y="75" width="50" height="50" transform="translate(200,0) scale(-1, 1) translate(-100, -100) scale(2, 2) scale(1, 1) rotate(45, 100, 100)" />
関連
-
[解決済み] d3.jsでノードのダブルクリックイベントを作成するにはどうすればよいですか?
-
[解決済み] getBBox() SVGRectはどのように計算するのですか?
-
[解決済み] SVGのストロークが一方向のみ
-
[解決済み] svg要素の色を変更するには?
-
[解決済み] Do I use <img>, <object>, or <embed> for SVG files?
-
[解決済み] ImageMagickでSVGをPNGに変換する方法は?
-
[解決済み】PNG画像をSVGに変換する方法は?[クローズド]
-
[解決済み] enable-background属性は、具体的に何をするのですか?
-
[解決済み] svgコードを.svg画像として保存するにはどうすればよいですか?[クローズド]
-
[解決済み] <svg> viewBox属性を使用するには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] SVGのストロークが一方向のみ
-
[解決済み] SafariでSvg画像要素が表示されない
-
[解決済み] ImageMagickでSVGをPNGに変換する方法は?
-
[解決済み】PNG画像をSVGに変換する方法は?[クローズド]
-
[解決済み】円弧(のSVGパス)を計算する方法)
-
[解決済み] SVG ルート要素のデフォルトの背景色
-
[解決済み] SVGの円弧パスによる円形描画
-
[解決済み] SVG における text 要素の垂直アライメント
-
[解決済み] svgコードを.svg画像として保存するにはどうすればよいですか?[クローズド]
-
[解決済み] SVGドキュメントはカスタムdata-属性をサポートしていますか?