SVGについて
概要
SVG(Scalable Vector Graphics)は、XMLやHTMLのsvg
要素やその子要素によりベクター画像を描画するものです。ベクター画像なので拡大しても画像が劣化しません。
Canvasとは異なりブラウザに表示された画像を画像ファイルとしては保存する事はできなさそうです。
今回、説明はかなり省略しました。詳細は、参考資料を見てください。
はてなブログでのSVGの描画
はてなブログは本文にHTMLを使えます。はてなブログの本文に書いたHTMLはbody
要素の内部に書かれます。本文にsvg
要素を記述すればSVGによる描画ができます。
SVGの描画方法
SVGの描画をおこなうには、描画をおこなうsvg
要素を配置し、子要素に描画用の要素を記述しておこないます。
svg
要素にwidth
やheight
属性を指定しないと、自動的に画面表示一杯のサイズの表示領域になるようです。xmlns
属性やversion
属性は指定してもしなくても構わないようです。
SVGは(Canvasと同じく)、左上が原点(0,0)で、右がX軸方向で下がY軸方向となり、数学でよく使われる座標系とは、原点の位置が異なりY軸の向きが反対です。
フォントや色は、Canvas同様に、CSSフォントやCSSカラーが使われます。
(環境によっては、文字がきちんと表示されていませんがそのままにしておきます。)
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" style="border:1px solid;" width="240" height="120" > <text x="0" y="0" text-anchor="start" dominant-baseline="text-before-edge">(0,0)</text> <text x="240" y="120" text-anchor="end" dominant-baseline="text-after-edge">(240,120)</text> </svg>
SVGファイルの表示
HTMLに直接svg
要素を記述する他に、SVGファイルをobject
要素から指定して表示する方法もあります。
例えば、次の内容のSVGファイル(test.svg
)を作成し配置します。1行目のxml宣言は不要なようです。
<?xml version="1.0" encoding="UTF-8" ?> <svg xmlns="http://www.w3.org/2000/svg" style="border:1px solid;" width="240" height="120" > <text x="0" y="0" text-anchor="start" dominant-baseline="text-before-edge">(0,0)</text> <text x="240" y="120" text-anchor="end" dominant-baseline="text-after-edge">(240,120)</text> </svg>
そして、HTML文書で、次のようなobject
要素から利用します。width
属性やheight
属性は、object
要素で指定したものが優先されSVG自体の幅や高さになるようです。
<object type="image/svg+xml" data="test.svg" style="border:1px solid;" width="240" height="120" >
テキスト描画
テキスト描画は、svg
要素の子要素のtext
要素によりおこないます。
フォントは、前回のCanvasの記事同様に、インストールされているフォントやWebフォントを使えます。今回はGoogle Fontsを使用しています。
詳細は、8.文字列の挿入 - svg要素の基本的な使い方まとめを見て下さい。
<link href='http://fonts.googleapis.com/css?family=Audiowide' rel='stylesheet' type='text/css'> <link href='http://fonts.googleapis.com/css?family=Roboto' rel='stylesheet' type='text/css'> <svg style="border:1px solid;" width="280" height="120"> <text x="0" y="0" text-anchor="start" dominant-baseline="text-before-edge" font-size="20" font-family="'Hiragino Mincho Pro','MS Mincho','TakaoMincho'">インストールされている明朝</text> <text x="0" y="40" text-anchor="start" dominant-baseline="text-before-edge" font-size="20" font-family='Audiowide'>Google FontsのAudiowide</text> <text x="0" y="80" text-anchor="start" dominant-baseline="text-before-edge" font-size="20" font-family='Roboto'>Google FontsのRoboto</text> </svg>
例と説明
前回の、Canvasの記事同様に、理系ジンのアイコンを描いてみます。
<svg style="border:1px solid;" width="240" height="240"> <defs> <filter id="f1" x="0" y="0" width="200%" height="200%"> <feOffset result="offOut" in="SourceAlpha" dx="10" dy="10" /> <feGaussianBlur result="blurOut" in="offOut" stdDeviation="10" /> <feBlend in="SourceGraphic" in2="blurOut" mode="normal" /> </filter> </defs> <rect x="10" y="10" width="220" height="220" rx="10" ry="10" fill="#999" filter="url(#f1)" /> <rect x="10" y="10" width="220" height="220" rx="10" ry="10" fill="#999" /> <rect x="20" y="20" width="200" height="200" fill="#FFF" /> <text x="20" y="20" fill="#999" text-anchor="start" dominant-baseline="text-before-edge" font-size="200" font-family="'Hiragino Kaku Gothic Pro','MS UI Gothic','TakaoGothic'">理</text> </svg>
枠の四角の色が薄くなってしまうのを回避する方法が分からなかったのでフィルター無しで上書きしています。
その他の描画機能
描画の機能はCanvasより豊富です。Canvasに無い主な機能に次のものがあります。
- マーカー:線や頂点に矢印等を付ける機能
- 破線
- アニメーション:SVGの機能でアニメーションする機能
- フィルタ:画像をぼかしたりする機能
- ライティング:画像に立体感を与えたりする機能
これらは、10分でわかるSVG 基礎編 サンプル - @ITや10分でわかるSVG 応用編 サンプル - @ITを見て頂くとどういうものか分かります。非常に簡単にアニメーションができると分かります。
MarkdownエディタのSVG対応
MarkdownエディタのMacDownやLightPaperでは問題なくSVGが表示できます。MouでもSVGを表示できますが、何故か表示されない事もありました(動作確認でペーストした文書の文字コードの問題と思われます)。
AtomのMarkdown Previewでは、SVGを表示できます。link
要素等は無効になります。(20141004追記)
Kobitoでは、svg
要素の表示はされますが、描画はおこなわれません。
StackEditでは、svg
要素は全て削除され使えません。
今回の文書作成も前回と同じくMacDownを使用しました。
理系ジンの意見
Canvas同様SVGでも比較的容易に図を描けます。ベクター画像なので表示上の利点が多いと思います。Canvasより速度は遅いと思いますが、ゲーム用途でなければ問題無さそうです。
SVGの注目度はCanvasより低いようです。ブラウザの実装状況は、すぐに気が付く仕様と異なる動作があります。次回の記事で紹介しますがSVG用のツールは充実しています。
数学の座標系とは、原点の位置が異なりY軸方向の向きが反対です。SVGだけで数式のグラフを描画するのは難しそうです。グラフ描画に関しては、いずれライブラリ等を調べたいと思います。
予定
画像を扱うツールを紹介する予定です。