SVGについて

javascript

SVGについて

SVGについて試してみます。

SVGは Scalavle Vector Grapthics の略です。

画像ファイルには、ラスター形式(jpg、gif、png等)と、ベクター形式があり、SVGはベクター情報になります。

大きな特徴としては、SVGは拡大縮小しても描画精度には影響しません。
ラスター画像の場合は、拡大するとピクセル単位の表示が拡大され、画像の精度が荒くなります。

ここではSVGで表現できる方法を一つ一つ試してみようと思います。

下記に簡単なサンプルを用意しました。

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>テストHTML</title>
</head>
<body>

<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 800 300">
	<defs>
		<linearGradient id="test1">
			<stop offset="0%" stop-color="#ccc" />
		</linearGradient>
	</defs>
	<rect x="10" y="10" width="300" height="200" stroke="#fff" storoke-width="20" fill="url(#test1)"/>
</svg>

</body>
</html>

サーバ上のHTMLはこちら(test1.html)

画面にアクセスすると、rectタグで指定したサイズの長方形が表示されます。
画面の大きさを変えた場合でも、長方形が拡大縮小されることがわかります。
ただし、この長方形は単色で塗りつぶしただけなので、SVGの特徴はわかりにくいです。
本来、ラスター画像なので、座標情報を元に画像が描画されているので、そのサンプルは別な投稿で試します。

「http://www.w3.org/2000/svg」という文字列は慣習的に決められており、この後のサンプルでも同じように記述します。

また、linearGradient要素に複数の色情報を記述すると、グラデーションで表示されます。
下記サンプルを試してみました。

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>テストHTML</title>
</head>
<body>

<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 800 300">
	<defs>
		<linearGradient id="test1">
			<stop offset="0%" stop-color="#cccccc" />
			<stop offset="50%" stop-color="#ffffff" />
			<stop offset="70%" stop-color="#b1d0d5" />
			<stop offset="90%" stop-color="#8eb5df" />
		</linearGradient>
	</defs>
	<rect x="10" y="10" width="300" height="200" stroke="#fff" storoke-width="20" fill="url(#test1)"/>
</svg>

</body>
</html>

サーバ上のHTMLはこちら(test2.html)

画面にアクセスすると、linearGradientタグ内に記載した値でグラデーションされた長方形が表示されます。
このサンプルも先程と同様、単純な長方形なので、まだSVGの特徴がつかめていません。
ここでは、SVGを出力する方法を試す程度にしておきます。

SVGの出力方法について

上記のサンプルは、あらかじめHTMLドキュメント内にSVG用のタグと、SVGの出力内容を記載する方法でした。

ここでは、別な方法としてjavascript内からSVGを生成して出力する方法を試します。

まず、HTMLドキュメント内にSVG描画用のDIVタグを記載し、その後にjavascriptでSVGを定義し、DIVタグに出力する方法です。

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>テストHTML</title>
</head>
<body>

<div id="svgtest"></div>

<script type="text/javascript">
let test1 = document.createElementNS('http://www.w3.org/2000/svg', 'svg');

test1.setAttribute("width"  , "600");
test1.setAttribute("height" , "400");
test1.setAttribute("viewbox", "0 0 600 400");
test1.setAttribute("style"  , "background-color:#e1e1e1;");

let line = document.createElementNS('http://www.w3.org/2000/svg', 'line')

line.setAttribute('x1'    , '30');
line.setAttribute('y1'    , '50');
line.setAttribute('x2'    , '300');
line.setAttribute('y2'    , '200');
line.setAttribute('stroke', '#000000');

test1.appendChild(line);

let svgtest_dom = document.getElementById("svgtest");
svgtest_dom.appendChild(test1);

</script>

</body>
</html>

サーバ上のHTMLはこちら(test3.html)

画面にアクセスすると、横600、縦400の長方形に、SVG用を動的に生成したline要素が表示されます。

サンプルの中で「createElementNS」というメソッドが出てきましたが、
これは名前空間URIと修飾名(第二引数)の要素を生成する命令です。(第三引数はここでは省略しています)
修飾名には

svg
line
rect
circle
ellipse
path
polygon

等があり、svg領域にどんな描画出力をするかを決定します。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です