SVG 内联编码 · 免费

SVG 转 Data URI 转换器

将 SVG 代码编码为内联 Data URI,用于样式表或 img 标签。两种编码实时生成,按字节相互对比,并按浏览器实际加载的方式预览。

在你的浏览器中编码 · 不上传,无需注册
报告问题

源代码

SVG 代码

共 466 B 代码

最大 2 MB · 在此标签页中读取 · 绝不上传

先清理源代码

删除注释和 XML 声明,去掉标签之间的空白,并合并导出工具在属性之间留下的换行。属性、路径数据,以及 text、tspan、title、desc 和 style 中的字符数据都会原样保留。这不是优化器:这里不会进行 SVGO 式的路径改写、精度裁剪或属性精简。

已删除 97 B · 466 B → 369 B

预览

由 Data URI 渲染

下方图像直接从编码后的 URI 加载,因此它出错的方式与你的页面完全相同。

编码后 SVG 的实时预览
width
24
height
24
viewBox
0 0 24 24

已声明命名空间、已设定尺寸,且足够轻量,适合内联。足够小,放进样式表或组件中不会明显改变其大小。

体积

每种编码的开销

源代码及每种编码 Data URI 的字节大小
形式字节相对 SVG
源 SVG369–
URL 编码 URI414+12.2%
Base64 URI518+40.4%

以上数值包含 URI 前缀:普通形式为 19 字节,Base64 形式为 26 字节。去掉前缀后规律十分精确:Base64 会让任何有效载荷膨胀 +33.3%,因为三个字节总会变成四个;而 URL 编码在这里的开销是 +7.0%,每个需要转义的字节多出两个字节,其余字节则毫无额外开销。

适合内联:足够小,放进样式表或组件中不会明显改变其大小。

可直接粘贴

四种输出,全部实时更新

你编辑上方代码时,下方每个字段都会随之重建。所有内容都不在服务器上生成,因此无需重新获取任何东西。

包裹引号
代码片段使用
URL 编码的 Data URI推荐

414 字节 · 相对代码 +12.2%

data:image/svg+xml,%3Csvg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="24" height="24" fill="none"%3E%3Crect x="2.5" y="4" width="19" height="16" rx="3.5" stroke="%237051bd" stroke-width="1.5"/%3E%3Cpath d="M3 16.6 8.6 11l4 4 3-2.6 5.4 4.6" stroke="%237051bd" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/%3E%3Ccircle cx="15.6" cy="8.8" r="1.75" fill="%237051bd"/%3E%3C/svg%3E

Base64 Data URI

518 字节 · 相对 URL 编码形式 +25.1%

data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiBmaWxsPSJub25lIj48cmVjdCB4PSIyLjUiIHk9IjQiIHdpZHRoPSIxOSIgaGVpZ2h0PSIxNiIgcng9IjMuNSIgc3Ryb2tlPSIjNzA1MWJkIiBzdHJva2Utd2lkdGg9IjEuNSIvPjxwYXRoIGQ9Ik0zIDE2LjYgOC42IDExbDQgNCAzLTIuNiA1LjQgNC42IiBzdHJva2U9IiM3MDUxYmQiIHN0cm9rZS13aWR0aD0iMS41IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz48Y2lyY2xlIGN4PSIxNS42IiBjeT0iOC44IiByPSIxLjc1IiBmaWxsPSIjNzA1MWJkIi8+PC9zdmc+

当构建步骤、CMS 字段或预处理器会改写百分号、破坏可读形式时,请使用此版本。

CSS 声明

使用 URL 编码的 URI

background-image: url('data:image/svg+xml,%3Csvg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="24" height="24" fill="none"%3E%3Crect x="2.5" y="4" width="19" height="16" rx="3.5" stroke="%237051bd" stroke-width="1.5"/%3E%3Cpath d="M3 16.6 8.6 11l4 4 3-2.6 5.4 4.6" stroke="%237051bd" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/%3E%3Ccircle cx="15.6" cy="8.8" r="1.75" fill="%237051bd"/%3E%3C/svg%3E');

直接放进规则即可。请保留引号:URL 编码的载荷包含原样的空格,而不带引号的 url() 不接受空格。

HTML img 标签

尺寸 24 × 24,取自 width 和 height 属性

<img src='data:image/svg+xml,%3Csvg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="24" height="24" fill="none"%3E%3Crect x="2.5" y="4" width="19" height="16" rx="3.5" stroke="%237051bd" stroke-width="1.5"/%3E%3Cpath d="M3 16.6 8.6 11l4 4 3-2.6 5.4 4.6" stroke="%237051bd" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/%3E%3Ccircle cx="15.6" cy="8.8" r="1.75" fill="%237051bd"/%3E%3C/svg%3E' width='24' height='24' alt='' />

alt 属性为空,因为内联图形通常只是装饰。只要图像承载含义,就请填写真实的文字。

此处用单引号包裹不会产生任何开销:你的代码中没有单引号,因此其中的每个引号都会原样通过编码器。

请求才是开销时,就内联

一个 700 字节的图标,在建立连接和往返上的开销比字节本身还大。把它并入已经加载的样式表,就能彻底省掉一次请求,这也是内联在小型、一次性图形上胜出的原因。

重复使用时,保留为文件

内联图形会被复制到每个引用它的文件中,并且只能作为该文件的一部分被缓存。一个在四个样式表中使用的标志会被下载四次;而共享的 .svg 只需获取一次,就能到处复用。

Data URI 是一座孤岛

编码后的文档无法触及自身之外。外部字体、链接的图片、样式表和脚本都无法使用,宿主页面的 CSS(包括 currentColor 和自定义属性)也永远无法越过这道边界。

工作原理

省掉一次请求,换来一串必须写对的字符串。

内联 SVG 是用你本来就要发送的文件中的字节,换掉一次网络往返。对小巧、独立的图形来说这笔交易很划算,对在多个页面中重复使用的图形则得不偿失。因此本页会显示两种编码的精确字节开销,在你决定之前先渲染结果,并标出决定内联图标能否显示、以多大尺寸显示的两个属性。

  1. 01

    加载代码

    粘贴 .svg 文件的内容,或直接把文件拖放到面板上。文件在此标签页中读取,2 MB 的上限让编码瞬间完成。

  2. 02

    查看预览和警告

    图形由编码后的 URI 绘制在棋盘格背景上,透明区域一目了然,缺少命名空间的问题也会在字符串进入样式表之前暴露出来。

  3. 03

    选取项目需要的形式

    复制 URL 编码的 URI、Base64 备用版本、完整的 background-image 规则,或已填好尺寸的完整 img 标签。

为样式表而设计

输出可读,测量如实。

只转义会出问题的字符

尖括号、井号、百分号、圆括号、& 符号、反斜杠和换行符会被百分号编码。其余字符都保持可读,包括空格,以及未用于包裹 URI 的那种引号。

保留 Base64 作为备用

模板引擎和 CMS 字段有时会吞掉百分号。对于这类流程,Base64 URI 一键可得,代价是它始终固定多出的三分之一体积。

体积差距,实测而非空谈

一张表格将代码与两种编码对比,把 URI 前缀与有效载荷分开计算,并说明为什么可读形式几乎总是更小。

可审查的清理步骤

可选的清理步骤会删除注释、XML 声明以及标签之间的空白。路径数据、属性和字符数据绝不会被改写,节省的体积以字节显示。

捕捉两种典型故障

缺少 xmlns 会让 Data URI 完全无法渲染;缺少 viewBox 会让图标尺寸出错。两者都会在预览旁标出,而不是藏在控制台里。

本地处理,悄无声息

不上传,不排队,不调用 API。文件由浏览器自身读取,并在内存中从这段文本完成编码,你尚未发布的图形永远不会离开你的设备。

Data URI 常见问题

编码、尺寸、颜色与限制。

什么是 SVG Data URI?+

它是以 URL 形式写出的完整图像。字符串以 data:image/svg+xml 开头,其余部分就是代码本身,经过转义以便在 URL 中保持完整。由于图形随引用一起传递,浏览器拿到样式表时就已经拿到了图像:无需第二次请求,也不必为一个 600 字节的图标等待连接。

SVG 应该用 URL 编码还是 Base64?+

几乎在所有情况下都用 URL 编码。SVG 是文本,Base64 对它毫无益处:它把三个字节变成四个,无论内容如何都固定多出三分之一。百分号编码只对少数必须转义的字符各多付两个字节,结果通常只比源文件大 10% 到 25%。它在 diff 中依然可读,压缩效果也更好,因为 gzip 和 brotli 仍能识别重复的标签名,而 Base64 会把它们打乱。只有在流程会改写或重复转义百分号时,才使用 Base64。

内联的 SVG 完全不显示,缺了什么?+

几乎总是缺命名空间。在 HTML 页面中直接写 svg 元素时,解析器已经知道它是什么。而 Data URI 是作为独立文档加载的,所以文件必须自己声明,在根元素上加上 xmlns="http://www.w3.org/2000/svg"。没有它,浏览器什么也不解析,什么也不绘制,而且不会给出任何提示。另一个常见原因是填充颜色中出现未转义的 #:它会把 URI 的剩余部分变成片段标识符。

为什么图标显示的尺寸不对?+

因为编码后的文档自行决定其几何尺寸。没有 viewBox,也没有 width 或 height 时,浏览器会退回到 300×150 的框。有 width 和 height 但没有 viewBox 时,图形被锁定在该尺寸,无法缩放。只有 viewBox 时可以自由缩放,这通常正是背景所需要的;请搭配 background-size 使用,或在 img 标签上明确设置 width 和 height。

能用 currentColor 或 CSS 变量给 Data URI 中的 SVG 改色吗?+

不能。编码后的 SVG 是一个独立文档,宿主页面的任何东西都进不去:currentColor 按该文档自身的 color 属性解析(除非代码中有设置,否则为黑色),自定义属性也不会跨越这道边界继承。有三种变通办法:编码前在代码中修改填充色,每种颜色保留一个 URI;用 mask-image 控制图形,让可见颜色来自 background-color;或者把 svg 元素直接放进 HTML,让页面 CSS 可以为它设置样式。

SVG 还能加载外部字体、图片或样式表吗?+

不能,这一限制是有意设计的,而不是 bug。通过 url() 或 img 标签加载的 SVG 运行在受限模式下:不执行任何脚本,也不获取任何外部资源,无论是网页字体、链接的位图还是样式表。编码前请把文字转换为路径,并把任何位图作为嵌套的 Data URI 嵌入代码中。

Data URI 有长度限制吗?+

在当前浏览器中没有实际意义上的限制:Chrome、Firefox 和 Safari 都能接受样式表中远超 1 MB 的 Data URI。常被提起的 32 KB 是 Internet Explorer 8 的限制,多年前就已无关紧要。真正的约束在别处:压缩工具和 source map 会变得难以处理,一些 CMS 字段会截断过长的值,而且每一 KB 都会随所在文件被重复下载。可以把 4 KB 视为舒适范围,把 32 KB 视为改用独立文件更合理的分界点。

清理选项究竟改动了什么?+

四项:注释、XML 声明、标签之间只含空白的间隙,以及导出工具在属性之间留下的换行。它绝不会删除属性、舍入坐标、合并路径或重命名 id,也不会改动 text、tspan、textPath、title、desc、style 和 script 中的字符数据。声明了 xml:space="preserve" 的文档还会保留标签之间的所有间隙,不过注释和 XML 声明仍会被删除。因此这一步安全但收效有限。如果想大幅缩减体积,请先用 SVGO 处理文件,再把结果粘贴到这里。

更多专注好用的工具,随时待命。

探索不断扩充的工具合集,涵盖计算、文档、写作和日常工作。

浏览全部工具