可缩放向量图形

可缩放矢量图形（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/