SVG Optimizer — 在浏览器里运行真正的 svgo
用 svgo 全部 45 个插件压缩 SVG,逐个自行开关,并查看真正传输的 gzip 体积。全部在你本机的后台 worker 中运行——无需上传、无需排队、无需注册。
工作原理
三个步骤,中间那步由你决定。
- 1
放入文件
拖入 .svg 或 .svgz、粘贴代码,或从其他工具传过来。此时不会执行任何操作,文件只是等待。
- 2
决定如何处理
选择一个配置,或打开控制项自行设置全部 45 个插件。每个插件都标明它是否会改变可见效果。
- 3
带走结果
下载文件,或复制为 SVG、React 组件、CSS data URI,也可以不经下载文件夹直接送往下一个工具。
功能
真正的 svgo,全部 45 个插件
与整个行业构建时所用的同一引擎,只是跑在你的浏览器里而不是终端。均衡配置与 `npx svgo` 完全一致,你在这里看到的就是构建产出的结果。
打开别家拒收的文件
各类编辑器经常导出无效 XML:未声明的 inkscape: 前缀、孤立的 & 符号、BOM 标记。严格的解析器会拒收整份文档。本工具会修复缺陷、完成优化,并明确告诉你修了什么。
看得见的精度
可放大到 4000%、自由平移,按住 Alt 即可在同一倍率下切回原图。舍入造成的损伤会先以可见的抖动暴露出来,远早于反映在百分比上。
真正传输的体积
原始字节数与 gzip 后字节数并排显示。二者讲的是不同的故事:去掉空白在原始体积上效果惊人,压缩后却几乎没有变化,因为 gzip 早已处理过了。
数据不会离开你的设备
优化在你浏览器内的后台 worker 中运行,文件不会被上传。预览更进一步,会剥离脚本、事件处理器与远程引用,因此恶意 SVG 无法在你查看时执行代码或对外通信。
直接送往下一个工具
把优化后的文件直接送到 favicon 生成器、格式转换器、二维码工具或打包工具,无需下载再上传。
常见问题解答
我的 SVG 会被上传吗?
不会。svgo 运行在你浏览器内的 worker 线程中,文件始终不会离开你的设备。预览更进一步:在绘制任何内容之前,就已剥离脚本、事件处理器以及对远程文件的引用,因此打开别人发来的文件是安全的。
为什么我的文件在别的工具里被拒收,在这里却能用?
因为编辑器经常导出无效的 XML。最常见的元凶是使用了却未声明的命名空间前缀——比如写了 <g inkscape:groupmode="layer">,却没有对应的 xmlns:inkscape。包括 svgo 和你的浏览器在内的严格解析器会拒收整份文档。本工具会在优化前修复它(还有 BOM 标记、孤立的 & 符号和 DOCTYPE 内部子集),并明确告诉你修了什么。
精度最低能调到多少?
取决于图形本身,建议用眼睛看而不是靠猜。降低精度会对坐标取整,在大幅或精细的图形上,这种取整会以曲线抖动的形式显现,而此时文件往往还没小多少。放大后按住 Alt,即可在同一倍率下在结果与原图之间切换比对。
为什么原始体积和 gzip 体积的百分比差这么多?
因为它们衡量的是不同的东西。删空白、缩短属性名在原始字节上看着效果惊人,但 gzip 本就在合并这些重复,所以压缩后的体积几乎不动。几何层面的改动——尤其是 convertPathData——才会同时减小两者。如果你的服务器启用了压缩响应(几乎所有服务器都启用了),真正重要的是 gzip 那个数字。
结果会和我构建里的 svgo 一致吗?
在均衡配置下会:那就是 svgo 自身的 preset-default,插件顺序和默认值完全相同。只要你改动任何一个开关就偏离了它,界面上的"手动"标签会提示你这一点。
某些插件标注的"改变行为"是什么意思?
意思是该插件不只是把文件变小,而是改变了文件的行为本身。removeViewBox 会让 SVG 不再缩放。removeDimensions 会让它填满容器而不是使用自身尺寸。removeTitle 会删掉屏幕阅读器朗读的无障碍名称。它们默认全部关闭,"全部启用"按钮也不会开启其中任何一个。