SVG 优化器,免费

通过移除注释、元数据和多余空白来优化和压缩 SVG 文件。

预览

关于 SVG 优化

从 Illustrator、Figma 或 Inkscape 导出的 SVG 文件通常包含元数据、注释、编辑器特定属性和多余空白,这些会增大文件而不影响视觉渲染。优化 SVG 可将体积减小 20–60%,提升加载速度。此工具应用安全的优化,保留视觉外观。

工作原理

  1. 粘贴或上传 SVG:直接输入 SVG 标记,或上传来自 Illustrator、Figma 或 Sketch 导出的 .svg 文件。
  2. 配置优化通道:选择要应用的优化 · 移除注释、移除元数据、简化路径和规范化 viewBox。
  3. 执行优化:工具运行选定的通道,并显示体积减小的百分比。
  4. 下载或复制:保存优化后的 SVG,或复制标记粘贴到您的代码中。

为什么要优化 SVG?

从设计工具导出的 SVG 文件包含大量不必要的数据 · 编辑器元数据、带默认值的内联 style 声明、空组、冗余 transform 属性和注释。这些多余内容会增大体积而对渲染无影响。SVGO(此处使用的行业标准 SVG 优化器)通常能在保持像素级渲染的同时将体积减小 50–80%。更小的 SVG 加载更快、在 HTML 中内联更迅速、节省带宽 · 对每页加载数十个 SVG 的图标系统尤为重要。

应用的优化

SVG 与 SVGO 简史

可缩放矢量图形(SVG)起源于两个 W3C 提案之间的竞争:Adobe、IBM、Netscape 和 Sun 提出的 Precision Graphics Markup Language(PGML),以及 Microsoft 提出的 Vector Markup Language(VML)。两者均于 1998 年提交;W3C 的妥协成为 SVG,于 2001 年 9 月作为 SVG 1.0 推荐发布。Internet Explorer 出名地拒绝提供 SVG 支持,直到 IE9(2011 年),而 Firefox、Safari 和 Opera 从 2000 年代中期就支持了。SVG 1.12003 年出现,2011 年有第二版。SVG Tiny 1.22008 年针对移动设备。SVG 2 大约在 2016 年开始起草但停滞了;今天它仍然是候选推荐草案(最后于 2018 年触及),浏览器单独推出各个部分。优化稍后出现。SVGOKir Belevich(svg-go)创建,并于 2012 年 10 月首次在 GitHub 上发布,用 JavaScript 编写。它成为事实上的标准,集成到 webpack-loader、Vite、Sketch、Figma 导出插件,以及 2015 年由 Jake Archibald(Chrome 团队)启动的 SVGOMG Web UI。SVGO 3(2023 年发布)使代码库现代化。此工具实现了 SVGO 最有影响力的插件的安全子集,完全在你的浏览器中运行。

SVG 优化器实际做什么

SVG 优化在哪里重要

破坏 SVG 的优化错误

更多常见问题

SVG 优化实际能节省多少?

这在很大程度上取决于来源。Adobe Illustrator 导出在首次通过时通常缩小 60-80%,主要来自元数据、编辑器命名空间和小数精度减少。Figma 导出开箱即用就更干净(通常 20-40% 的节省)。开发人员手写的 SVG?通常 5-15%,因为没有太多可剥离的。维基百科徽标,Illustrator 膨胀的极端案例,从 39 KB 降到 11 KB。Figma 中典型的 24×24 图标从 1.4 KB 降到 0.6 KB。

我什么时候应该内联 SVG vs 作为外部文件使用?

内联(HTML 中的 <svg>...</svg>)用于小图标(2 KB 以下)、关键的首屏内容,以及你需要 CSS 来设置 SVG 样式的任何地方(例如 currentColor、悬停状态、暗模式)。外部文件(<img src="icon.svg"> 或 CSS background-image)用于重复使用的相同图标(浏览器缓存)、较大的插图、不需要 CSS 主题化的内容。SVG 雪碧图(单个文件具有多个 <symbol> 元素,由 <use> 引用)是 2014-2019 年的图标系统模式,现在大多被 React/Vue/Svelte 中的内联 svg 组件取代。

未优化的 SVG 中是否存在安全风险?

是的。SVG 可以嵌入 <script> 标签和 onloadonclick 事件处理程序;用户上传的 SVG 是 XSS 向量。SVG 可以通过 <image href="..."> 引用外部资源,泄漏查看者的 IP。SVG 字体(已弃用但仍可解析)历史上有缓冲区溢出。良好的优化器作为清理的一部分剥离 <script> 和事件处理程序;如果你接受用户 SVG 上传,在提供服务之前通过强化的清理器(带有 SVG 配置文件的 DOMPurify)运行它们。

我可以使用命令行优化 SVG 吗?

可以。npx svgo input.svg -o output.svg 使用规范的 SVGO 库。通过 svgo.config.js 配置插件。CI 集成:webpack 中的 imagemin-svgovite-plugin-svgo、GitHub Action antfu/svg-opt。批量优化:svgo -f ./icons -o ./icons-optimised。这里的浏览器工具对于一次性操作更快,并且无需安装 Node 即可工作。

我在这里优化时,我的 SVG 是否会发送到服务器?

不。优化完全在你的浏览器中通过 JavaScript 在你粘贴的 SVG 标记上运行。优化时在 DevTools 中打开 Network 标签;你会看到零出站请求。对专有徽标、未发布的图标设计、内部公司 SVG 以及任何受 NDA 约束的内容都安全。

相关工具