SVG图像文件结构

SVG(Scalable Vector Graphics,可缩放矢量图形)是一种基于 XML 的矢量图像格式,由 W3C 制定。与 JPEG、PNG、GIF 等栅格图像 不同,SVG 使用数学描述(如路径、形状、文本等)来定义图像,因此可以无损缩放到任意尺寸。

一、总体结构:纯文本 XML

SVG 文件本质上是一个 XML 文档 ,通常以 .svg 为扩展名,也可以内嵌在 HTML 中(inline SVG)。

最简 SVG 示例:

xml 复制代码
<svg width="100" height="100" xmlns="http://www.w3.org/2000/svg">
  <circle cx="50" cy="50" r="40" fill="red" />
</svg>

二、基本文件结构

一个完整的 SVG 文件通常包含以下部分:

xml 复制代码
<?xml version="1.0" encoding="UTF-8"?>
<svg
  xmlns="http://www.w3.org/2000/svg"
  xmlns:xlink="http://www.w3.org/1999/xlink"
  width="200"
  height="200"
  viewBox="0 0 200 200"
>
  <!-- 可选:定义区(defs) -->
  <defs>
    <linearGradient id="grad1">
      <stop offset="0%" stop-color="yellow" />
      <stop offset="100%" stop-color="red" />
    </linearGradient>
    <symbol id="icon-star" viewBox="0 0 16 16">
      <path d="M8 0L10 6H16L11 9L13 15L8 12L3 15L5 9L0 6H6Z"/>
    </symbol>
  </defs>

  <!-- 图形元素 -->
  <rect x="10" y="10" width="180" height="180" fill="url(#grad1)" />
  <use href="#icon-star" x="80" y="80" width="40" height="40" />

  <!-- 其他元素:文本、路径、组等 -->
  <text x="50%" y="50%" text-anchor="middle" dominant-baseline="middle">
    Hello SVG
  </text>
</svg>

三、核心组成部分详解

1. XML 声明(可选)

xml 复制代码
<?xml version="1.0" encoding="UTF-8"?>
  • 非必需(尤其在 HTML 内嵌时),但建议保留以确保编码正确。

2. 根元素 <svg>

必须包含命名空间声明:

xml 复制代码
xmlns="http://www.w3.org/2000/svg"
常用属性:
属性 说明
width / height 显示尺寸(可带单位:px, em, % 等)
viewBox 定义用户坐标系:"min-x min-y width height",支持缩放和裁剪
preserveAspectRatio 控制 viewBox 如何适配容器(如 "xMidYMid meet"
version SVG 版本(如 "1.1",现代浏览器通常忽略)

关键概念viewBox 使 SVG 具备响应式能力。例如 viewBox="0 0 100 100" 表示内部使用 100×100 的逻辑坐标系,无论外部容器多大都能自适应。


3. <defs> 区域(Definitions)

用于定义可复用 的图形对象,不会直接渲染 ,需通过引用(如 <use>)显示。

支持定义:

  • <linearGradient> / <radialGradient>:渐变
  • <pattern>:图案填充
  • <symbol>:带独立 viewBox 的可复用图标
  • <clipPath>:裁剪路径
  • <mask>:遮罩
  • <filter>:滤镜效果(如模糊、阴影)

4. 图形元素(可渲染)

SVG 提供多种基本图形和路径:

元素 用途
<rect> 矩形
<circle> / <ellipse> 圆 / 椭圆
<line> 直线
<polyline> / <polygon> 折线 / 多边形
<path> 最强大 :通过 d 属性描述任意路径(贝塞尔曲线、弧线等)
<text> 文本(支持字体、旋转、路径文本等)
<image> 嵌入位图(如 PNG、JPEG)
<g> 分组:对多个元素统一变换或样式
<path> 示例:
xml 复制代码
<path d="M10 10 C 20 20, 40 20, 50 10" stroke="black" fill="none"/>
  • M = Move to
  • C = Cubic Bezier curve

5. <use> 元素

引用 <defs> 中定义的内容(如 <symbol><g>):

xml 复制代码
<use href="#my-icon" x="20" y="30" />
  • 现代标准使用 href(旧版用 xlink:href,需声明 xmlns:xlink

6. 样式与交互

  • 内联样式style="fill:red; opacity:0.8"

  • CSS 类class="icon" + 外部 CSS

  • 事件 :支持 onclickonmouseover 等(可用于交互动画)

  • SMIL 动画 (已逐渐被 CSS/JS 动画取代):

    xml 复制代码
    <circle r="10">
      <animate attributeName="r" values="10;50;10" dur="2s" repeatCount="indefinite"/>
    </circle>

四、SVG 文件类型

类型 说明
Standalone SVG 独立 .svg 文件,可被浏览器直接打开
Inline SVG 直接写在 HTML 中,便于 CSS/JS 控制
SVG Sprite 多个图标合并到一个 <defs><symbol> 中,按需引用
Compressed SVGZ 使用 GZIP 压缩的 SVG(.svgz),需服务器正确配置 MIME 类型

五、优势与局限

✅ 优势:

  • 无限缩放不失真
  • 文件小(尤其简单图形)
  • 可搜索、可编辑、可脚本化
  • 支持 CSS 和 DOM 操作
  • 良好的可访问性 (可加 <title><desc>

❌ 局限:

  • 不适合照片级复杂图像(此时用 JPEG/WebP 更高效)
  • 渲染性能:超复杂路径可能影响性能
  • 安全风险:内嵌 JS 的 SVG 可能被用于 XSS(需过滤)

六、MIME 类型与最佳实践

  • MIME Type : image/svg+xml
  • 编码建议:保存为 UTF-8,避免乱码
  • 优化工具
    • SVGO:压缩 SVG
    • SVGOMG:在线可视化优化

七、参考规范


如需深入了解 路径语法(Path d 属性)渐变与滤镜响应式 SVG 设计如何将位图转为 SVG,我可以进一步展开说明。

相关推荐
还是大剑师兰特1 天前
JEPG图像文件结构
大剑师·jepg结构
还是大剑师兰特1 天前
GIF图像文件结构
大剑师·gif图像结构
还是大剑师兰特2 天前
PNG图像文件结构
服务器·大剑师·png结构
还是大剑师兰特3 天前
单兵作战需要哪些计算能力
大剑师·作战工具
还是大剑师兰特12 天前
MVC和MVVM模式详解+对比
mvc·mvvm·大剑师
还是大剑师兰特12 天前
前端设计模式:详解、应用场景与核心对比
前端·设计模式·大剑师
还是大剑师兰特16 天前
用豆包生成PPT的详细操作步骤
ai·powerpoint·大剑师
还是大剑师兰特16 天前
AI智慧农业20强
人工智能·思维导图·大剑师
还是大剑师兰特18 天前
ES6 class相关内容详解
es6·原型模式·大剑师