可縮放向量圖形

可縮放矢量圖形（Scalable Vector Graphics，縮寫：SVG）是一種基於可擴展標記語言（XML），用於描述二維矢量圖形的圖形格式。SVG由W3C制定，是一個開放標準。

## SVG概述

SVG由1998年成立的W3C SVG工作組啟動開發，隨著當年提交給W3C的六份標準提案而開展。

SVG允許3種圖形物件類型：矢量圖形、柵格圖像以及文本。圖形物件——包括PNG、JPEG這些柵格圖像——能夠被編組、設計、轉換及整合進先前的渲染物件中。文本可以在任何適用於應用程式的XML命名空間之內，從而提高SVG圖形的搜索能力和無障礙性。SVG提供的功能集涵蓋了嵌套轉換、裁剪路徑、Alpha通道、濾鏡效果、模板對象以及可擴展性。

SVG嚴格遵從XML語法，並用文本格式的描述性語言來描述圖像內容，因此是一種和圖像解析度無關的矢量圖形格式。

### 優點

- 圖像文件可讀，易於修改和編輯（理論上如此，但實際上卻是因為各種不同的SVG檔編輯器而可能儲存成不易解讀的SVG檔案）。
- 與現有技術可以互動融合。例如，SVG技術本身的動態部分（包括時序控制和動畫）就是基於SMIL標準。另外，SVG文件還可嵌入JavaScript（嚴格地說，應該是ECMAScript）腳本來控制SVG對象。
- SVG圖形格式可以方便的建立文字索引，從而實現基於內容的圖像搜索。
- SVG圖形格式支持多種濾鏡和特殊效果，在不改變圖像內容的前提下可以實現位圖格式中類似文字陰影的效果。
- SVG圖形格式可以用來動態生成圖形。例如，可用SVG動態生成具有交互功能的地圖，嵌入網頁中，並顯示給終端用戶。

### 缺點

- SVG的本地運行環境下的廠家支持程度。
- 由於原始的SVG檔是遵從XML語法，導致資料採用未壓縮的方式存放，因此相較於其他的矢量圖形格式，同樣的檔案內容會比其他的檔案格式稍大。Adobe因此使用gzip壓縮開發出壓縮的SVG檔格式，附檔名為 .svgz，但此種檔案格式除了Adobe旗下的軟體以外，未被廣泛支援使用。
- 舊版的SVG Viewer無法正確顯示出使用新版SVG格式的矢量圖形。

### SVG Basic

SVG Basic又稱SVGB，是英語「Scalable Vector Graphics, Basic Profile」的簡寫，可以翻譯為「可縮放的矢量圖形標準的基本版」。它是SVG的一個子集，而主要目標是為掌上電腦等高端行動裝置提供矢量圖形顯示格式。

### SVG Tiny

SVG Tiny又稱SVGT，是英語「Scalable Vector Graphics, Tiny Profile」的簡寫，可以翻譯為「可縮放的矢量圖形標準的微型簡化版本」。它也是SVG的一個子集，而主要目標是為手機等低端行動裝置提供矢量圖形顯示格式。

## SVG技術細節

SVG主要支持以下幾種顯示對象：

- 矢量顯示對象，基本矢量顯示對象包括矩形、圓、橢圓、多邊形、直線、任意曲線等
- 嵌入式外部圖像，包括PNG、JPEG、SVG等
- 文字對象

SVG可以實現動態和交互功能。在DOM模型的基礎上，SVG開發設計人員可以利用ECMAScript或者SMIL來進行時序控制或對象的操縱。SVG雖然是文本格式，但是SVG支持利用gzip壓縮演算法減少文件尺寸，壓縮後的文件通常用被稱為「SVGZ文件」。

## 開發歷史

SVG由1998年成立的W3C SVG工作組啟動開發，隨著當年提交給W3C的六份標準提案應運而生：

- Web Schematics，來自CCLRC
- PGML，來自Adobe Systems、IBM、網景和昇陽電腦
- VML，來自Autodesk、惠普、Macromedia、微軟和Vision
- Hyper Graphics Markup Language (HGML)，來自Orange UK和普利茅斯大學
- WebCGM，來自波音、InterCAP Graphics Systems、Inso Corporation、CCLRC和施樂
- DrawML，來自Excosoft AB

當時工作組是由W3C的Chris Lilley領銜。

### SVG 1.x

- 2001年9月4日，發布SVG 1.0。
- 2003年1月4日，發布SVG 1.1。
- 2003年1月14日，推出SVG移動子版本：SVG Tiny和SVG Basic。
- 2008年12月22日，發布SVG Tiny 1.2。
- 2011年8月16日，發布SVG 1.1（第2版），成為W3C目前推薦的標準。
- SVG Tiny 1.2 Portable/Secure是SVG Tiny 1.2較安全的一個子集，於2020年7月29日作為IETF草案標準推出。

### SVG 2

SVG 2棄用了SVG 1.1不受所有瀏覽器支援的功能，並整合了HTML5和Web開放字型格式（WOFF）的新功能：

- SVG 2以WOFF取代了多個字體元素，像是`glyph`和`altGlyph`。
- `xml:space`屬性已被棄用，由CSS取而代之。
- 新增HTML5的功能，例如`translate`和`data-*`屬性。
- SVG Tiny 1.2的文字處理功能在註釋中提及，但尚未在文本中正式化。雖然1.2版中的其他功能也是精心挑選的，但是整體而言，SVG 2並不是SVG tiny 1.2的超集。

W3C目前仍正在研究制定SVG 2，SVG 2於2016年9月15日進入候選推薦階段，修訂版本於2018年8月7日和2018年10月4日發佈。最新草案則於2023年3月8日發佈。

## 示例

<image>

- 示例SVG顯示

<image>

- 簡單SVG圖片，樣如少女。

<image>

- 較為複雜但精細的SVG圖片

SVG格式是XML的一種，意即SVG文件其實只是普通的文本文件，用一般的文本編輯器便可查看或修改。

```xml
<?xml version="1.0"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" 
    "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" 
    width="467" height="462">
  <!-- This is the red square: -->
  <rect x="80" y="60" width="250" height="250" rx="20" fill="red"
         stroke="black" stroke-width="2px" />
  <!-- This is the blue square: -->
  <rect x="140" y="120" width="250" height="250" rx="40" fill="blue"
         stroke="black" stroke-width="2px" fill-opacity="0.7" />
  <rect x="180" y="160" width="250" height="250" rx="40" fill="blue"
         stroke="green" stroke-width="2px" fill-opacity="0.7" />
</svg>
```

## SVG顯示

比較著名的SVG項目包括Mozilla SVG Project，KDE的KSVG，以及Amaya等。

- Mozilla Firefox自版本1.5發行後，即開始支援SVG格式的顯示。
- Opera 8.0 版開始支援顯示Tiny 1.1規格的SVG。
- 基於Java的SVG項目主要有Batik SVG Toolkit等。
- Google Chrome和Safari支持SVG顯示。
- Microsoft的Internet Explorer 8.0版及其更老的版本尚未支援SVG，直至由Internet Explorer 9.0版開始支援SVG。

## 設計工具

能夠設計SVG圖形作品的軟體工具包括開放源代碼的Inkscape、Scribus和Karbon等，還有專有的Adobe Illustrator、Adobe Animate和CorelDRAW等。

另外也有開放源碼、功能簡單但容易操作、免安裝的在線SVG設計工具，例如Svg-edit。

對於行動裝置，安卓系統則可以使用Vector Ink。

## 基本資料

- 日語原文：可縮放矢量圖形
- 擴展名：.svg, .svgz
- mime：image/svg+xml
- 所有者：全球資訊網聯盟
- 最新版本：1.1（第二版）
- 類型：矢量圖形
- 擴展自：XML
- 免費在線檔案：是
- 網站： w3.org/Graphics/SVG/