|
| |
| 拡張子 |
.svg、.svgz |
|---|---|
| MIMEタイプ |
image/svg+xml |
| UTI |
public.svg-image |
| 開発者 | W3C |
| 初版 | 2001年9月4日 |
| 最新版 |
1.1 (Second Edition) (2011年8月16日) |
| 種別 | ベクターグラフィック |
| 派生元 | XML |
| オープン フォーマット | Yes |
| ウェブサイト | W3C SVG Working Group |
Scalable Vector Graphics(スケーラブル・ベクター・グラフィックス、SVG、日: 変倍ベクタ図形)は、XMLベースの、2次元ベクターイメージ用の画像形式の1つである。アニメーションやユーザインタラクションもサポートしている。
1998年にアドビシステムズ・IBM・ネットスケープコミュニケーションズの3社によって提案されたPGML(Precision Graphics Markup Language)と、Autodesk・ヒューレット・パッカード・Macromedia・マイクロソフト・Visio の5社によって提案された VML (Vector Markup Language)をもとにして、W3C SVG ワーキンググループにより開発された。現在の規格はオープン標準としてW3Cにより管理されている(#規格)。
ベクタ形式であるため、拡縮自在である。その他に、XMLベースの為、ウェブブラウザで画像としてではなく直接閲覧でき、テキストエディタ等で編集できる。また、HTMLとの親和性により、ハイパーリンクを埋め込んだり、JavaScript 等と連携させることもできる。
SVGはベクター形式の基礎であるパスを <path> 要素としてサポートしている。パスは輪郭線・クリッピングパス・アニメーションパス等に利用される。
1つのパスは複数のセグメント path segment からなる。セグメントの形を指定する命令はコマンドと呼ばれ、<path> 要素の d 属性にコマンドを並べることでパスの形状が指定される。
コマンドは以下の20種類が定義されている:
| コマンド | コマンド名 | 機能 | 出典 |
|---|---|---|---|
| 点 | |||
M/m |
moveto | 始点を置く | |
| 線分 | |||
L/l |
lineto | 線分を伸ばす | |
H/h |
horizontal lineto | 水平な線分を伸ばす | |
V/v |
vertical lineto | 垂直な線分を伸ばす | |
Z/z |
closepath | 始点へ線分を伸ばす | |
| 曲線 | |||
C/c |
curveto | 3次ベジェ曲線を伸ばす | |
S/s |
smooth curveto | ポリ3次ベジェ曲線を滑らかに伸ばす | |
Q/q |
quadratic Bézier curveto | 2次ベジェ曲線を伸ばす | |
T/t |
smooth quadratic Bézier curveto | ポリ2次ベジェ曲線を滑らかに伸ばす | |
A/a |
elliptical arc | 楕円弧を伸ばす | |
SVG図形はパスの集合であるため大量の d 属性を記述することになる。容量最小化の観点から以下の工夫がなされている:
L)l 0 300 → v 300)L 300 100 L 200 300 → L 300 100 200 300)L 300 100 L 200 300 → L300 100L200 300)SVGは基本図形(Basic Shape)を定義している。基本図形を組み合わせて描画・クリッピングすることで複雑な表現を容易に実現できる。

<circle>タグのみで描画可能基本図形は以下の7種類が定義されている:
rx / ry 属性により可能。基本図形にはタグ(DOMインターフェース)が用意されており容易に描画できる。例えば長方形を描画するために四辺全ての位置と長さを定義する必要はなく、<rect> タグに左上角の座標および縦横長さを指定するだけで描画できる(タグ例: <rect x="400" y="100" width="400" height="200"> )。
基本図形は本質的には糖衣構文であり、等価な図形をパスにより描画できる。
SVG はストロークをサポートする。
ストロークは線幅・端点形状・継ぎ方など、様々なバリエーションがある。SVG はこれらを制御するプロパティを定義することで精緻なストロークの描画を可能にする。例えば stroke-width 属性は線幅を指定し(可変幅は非サポート)、 stroke-linecap 属性は端点形状を指定して butt | round | square をサポートし、stroke-linejoin 属性は継ぎ方を指定して miter | miter-clip | round | bevel | arcs をサポートする。具体的なアルゴリズムも SVG 仕様によって指定されている。
SVG は、拡張の自由度が高い XML (Extensible Markup Language) で記述されており、XML ならではの各種機能を定義した要素を持つ。SVG ではそれ自身に回転・拡大・移動などの表現を定義しているため、単体で多様な表現をすることが可能である。
従来のウェブサイトでは、いわゆるインタラクティブな双方性のある画面変化を伴う表示を JavaScript や Adobe Flash を用いてきた。HTML/XHTML に SVG を組み合わせることにより、JavaScript や Adobe Flash を導入せずとも同様の効果が発揮されることが期待される。
XML なので、原理的には専用のアプリケーションを用いることなく通常のテキストファイルとして作製・編集できる。

SVG の特筆すべき点としてレイヤー機能がある。SVG では写真や挿絵などのビットマップデータ部分と座標値で指定された円・線分等を組み合わせた図形をベクターデータ部分として個々に指定でき、互いの苦手とする部分を補完しながら共存して画面表示できる。
SVG では文字をベクター情報の領域に有することで拡大縮小した際にはアウトラインフォントで表現する。この機能により、拡大するとジャギーと呼ばれる文字外延部のギザギザが生じて見にくくなる点が解決されている。具体的には Adobe Acrobat による PDF 形式の文字とほぼ同じ機能を有する。
これらのレイヤー機能により、背景に写真などの画像を置き、ベクターデータによる線画や文字を配置させることが可能である。具体的には等高線を表示した地図画像(ビットマップ)の上に鉄道路線や道路網(ベクターデータ)を重ね、電車や自動車等の移動体を配置して同時表示が可能になる。更に、ベクターデータのみで表現した塗りつぶしでは色の重ね合わせが可能であり、塗りつぶしの透過度の指定により集合論で用いるベン図のような形を必要最低限度の色数で表現できる。
SVG はレンダリング設定機能を提供している。
shape-rendering 属性ではパスと基本図形のレンダリング時にビューアー実装が参照するヒントを設定できる。4種類の設定値が存在し、optimizeSpeed は速度優先(負荷によってはアンチエイリアス OFF)、crispEdges は図形のパキッとさ優先(図形によってはアンチエイリアス OFF や位置・幅の微調整)、geometricPrecision は正確さ優先になる。
SVG はビューアーに対してアンチエイリアスを必須適合性要件としていないが、各種ブラウザなどのビューアー実装はアンチエイリアスを実装し shape-rendering 属性でその ON/OFF を管理しているケースが多い。
基本的に SVG は MIME 形式指定では image/svg+xml で指定された画像フォーマットである。ファイルの拡張子は .svg と gzip 圧縮された .svgz がある。拡張子 .svg はテキストファイルであるため、大きなデータではネット間の通信トラフィックにおいてのデメリットが大きいが、圧縮した .svgz では数分の一のファイルサイズになる。展開機能はWebブラウザ側が受け持つ。
SVG は基本的に文章で構成されており、ブラウザの利用者が入力した情報を CGI や JavaScript を介して SVG データに組み入れることが可能である。これにより、ベクターデータを用いた統計グラフでは可変性のある表示が可能になる。
文書で制作できるため、独自タグを用いることで高品質な表現が可能である。文字情報は文字データのみを明示的にグループ化しているため、文字のグループのみを抽出することで多言語化が比較的容易にできる。
ビットマップデータの大きさは各形式によってある程度左右されるが、ほぼ面積比によってある程度のサイズに納まることが多い。それに対し、ベクターデータは画面表示サイズに関わらず全ての情報を常に保持し続けるため、表示情報が多い場合はビットマップデータよりもサイズが大きくなる傾向がある(ただし、これはベクターデータ形式全般に言えるものであり、SVG のみの欠点ではない)。
いくつかのSVG規格が存在している。
| 規格書名 | 状態 | 更新日 | リンク |
|---|---|---|---|
| 主要規格 | |||
| Scalable Vector Graphics (SVG) 1.0 Specification | W3C勧告 | 2001-09-04 | W3C 2001 |
| Scalable Vector Graphics (SVG) 1.1 (Second Edition) | W3C勧告 | 2011-08-16 | W3C 2011 |
| Scalable Vector Graphics (SVG) 2 | W3C勧告候補 | 2018-10-04 | W3C 2018 |
| 派生規格 | |||
| Scalable Vector Graphics (SVG) Tiny 1.2 Specification | W3C勧告 | 2008-12-22 | W3C 2008 |
SVG は版を重ねるごとに高度な機能を盛り込んでいる。1.1 版以降から、格納しようとする描画情報に当該情報が使用している座標参照系をメタデータとして記述することが可能となった。これにより、SVG を地図として利活用できる道ができ、国土地理院ではその保有する電子国土基幹情報を SVG で配信し、PC のみならず様々な媒体で活用する方法を提案して広く社会実験に供する試みを実施している。
一方で、SVG の高度な機能を用いるものでは、それに対応した編集ツールや、データを忠実に再現してくれるビューアやブラウザのプラグイン等が必須となる。高度な機能を持ちつつも、それを活かせるインフラが追いついていないのが現状である。
これとは別に、比較的利用頻度の高い重要な機能に絞り込み、小型機器にも搭載可能な軽量な規格も登場している。
JIS X 4197:2012「可変ベクタグラフィクス SVG Tiny1.2」としてW3C発行のSVG Tiny 1.2規格を技術的内容を変更することなく邦訳した規格表が発行されている(2012年最終改訂)。
SVG は XML を用いているのでテキストエディタによるデータの作成も一応可能であるが、記述は非常に複雑なため実用的には GUI を前提にした編集ソフトが必須となる。
用途により、高度なグラフィクス作成に主眼を置いた描画ソフトから図、表、フローチャートなどの作成に主眼を置いたソフトまで幅がある。
この他、CAD ソフトウエアには読み書きともに対応しているものが多く存在する。
2010年代にはパソコン用の主要ウェブブラウザでネイティブサポートされるようになった。
2018年5月時点で、HTML標準の仕様ではSVG 2を参照している。さらに、SVGを実装するならそれ以前のバージョンではなくSVG 2を実装しなければならないと規定されている。
Internet Explorer 8以前のIEや、そのレンダリングエンジンを用いているブラウザなどにおいては、第三者製のプラグインを用いることで、SVG 画像を表示させる必要があった。
GNU/Linuxなどの Unix系オペレーティングシステム (OS) では、Freedesktop.org の標準に採用されるなど、様々な利用がされている。GNOME は librsvg を使いアイコンや壁紙に SVG を利用でき、また、KDE では KSVG を利用してアイコンを表示できるほか 3.4 からは SVG を使った壁紙に対応した。
Windows 系では2007年現在では特に動きはない。
miter-clip | arcs はあまりサポートされていない。we define a number of properties that allow the author to control different aspects of a stroke(W3C 2018)