压缩 SVG

从Figma、Illustrator或Sketch导出的 SVG 文件通常包含比实际所需多2至5倍的标记信息:编辑器命名空间、注释、空组、冗余变换以及六位小数坐标。该工具会以 SVGO 风格处理您的 SVG ,去除冗余内容,同时确保渲染输出与原始像素完全一致。

如何压缩 SVG

  1. 1

    粘贴或上传您的 SVG

    支持接收原始 XML 文本或 .svg 文件。

  2. 2

    选择优化级别

    安全模式(移除注释及编辑器元数据)、激进模式(合并组别、四舍五入坐标值、合并路径)或自定义模式。

  3. 3

    查看差异

    比较处理前后的字节数,并预览渲染结果以确认视觉效果无变化。

  4. 4

    复制或下载

    将优化后的 SVG 直接粘贴到代码中,或另存为文件。

什么会导致 SVG 臃肿

在文本编辑器中打开Figma导出的 SVG 时,通常会看到以下内容:

<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="..."
     xmlns:sketch="..." width="24.000000" height="24.000000"
     viewBox="0 0 24.000000 24.000000" ...>
  <!-- Generator: Figma ... -->
  <title>icon</title>
  <desc>Created with Figma</desc>
  <g id="Page-1" stroke="none" fill="none" fill-rule="evenodd">
    <g id="icon" transform="translate(0.000000, 0.000000)">
      <path d="M12.000000,2.000000 L..." fill="#000000"/>
    </g>
  </g>
</svg>

几乎每一行都可以删除。渲染输出只需要 svgviewBoxpath

优化器会移除的内容

移除项 为何安全
XML 注释 从不参与渲染
编辑器命名空间(sketch、figma) 浏览器不会使用
<title> / <desc>(可选) 无障碍文本,若有意义请保留
空的 <g> 无视觉效果
默认属性值 浏览器本来就会使用默认值
恒等变换 translate(0,0) 不起任何作用
坐标的小数位数 保留 3 位小数在屏幕上看起来完全一致
未使用的 ID 仅保留在别处被引用的 ID

注意事项

  • 请勿移除 被 CSS 或填充、遮罩、滤镜中的 url(#...) 引用的 ID。激进模式可能会破坏渐变效果。
  • 请保留 viewBox。若缺少它,SVG 将无法进行响应式缩放。
  • 请保留 <title>,如果你依赖它来实现无障碍访问(屏幕阅读器会朗读它)。
  • 避免折叠 <use> 实例。优化器可能会将其内联,从而丢失作为唯一来源的图案定义。

压缩何时能真正节省字节

SVG 是文本,这意味着服务器端的 gzip 压缩本身就已消除了大量冗余。一个未压缩时从 4KB 降到 1KB 的 SVG,经过传输后可能只从 1.2KB 降到 0.7KB。但这依然值得,而且更小的源文件也更易于阅读。

常见问题

安全模式不会。激进模式可能会移除 CSS 或 SMIL 动画所引用的 ID。如果你的 SVG 包含动画,请使用安全模式,或手动将相关 ID 加入白名单。

Figma/Illustrator 导出的文件通常可缩减 50%-80%。手写的 SVG 本身已较为紧凑,通常只能减少 10%-20%。

默认情况下为“是”,<title><desc>aria-*属性将被保留。若 SVG 仅具装饰性且周围HTML已提供标签,则可选择移除这些属性。

是的。保留xmlns属性是因为在将 SVG 直接粘贴到HTML时该属性是必需的。对于小型图标而言,内联 SVG 通常是最快的呈现方式。

相关工具