上传文件
  1. base64hub
  2. 图片工具
  3. SVG 转 Base64

SVG 转 Base64

拖入一个 SVG,即可得到现成的 background-image: url("data:image/svg+xml;base64,...") 规则,也可以切换为 data URI、<img> 标签或纯 Base64。

免费 无需注册,不限次数 本地 不上传任何内容 更新于 2026年10月27日
将文件拖到这里、粘贴或选择文件
输入 –输出 –大小 –

在你的浏览器中处理。此页面无法将你的数据发送到任何地方: 我们如何确认

如何把 SVG 转成 Base64

  1. 把 .svg 文件拖到框里,或者用文件选择器选择它。
  2. 输出为 默认是 CSS background-image。如果需要其他形式,可切换为 Data URI、HTML <img>、Markdown 或 纯 Base64。
  3. 点击 复制输出,把规则粘贴到样式表中。

SVG 会按保存时的原样编码。这里没有缩放或质量选项,因为矢量图不需要。如果想要更短的字符串,先用 SVG 优化工具处理一下文件;去掉编辑器元数据省下的空间,往往比选择哪种编码更多。

Base64 还是 URL 编码的 SVG

SVG 是文本,所以根本不必用 Base64。只要对少数字符做百分号编码,data URI 就能直接携带代码。下面是同一个 104 字节的三角形图标的两种写法:

/* Base64: 140 characters of data */
.a { background-image: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZD0iTTEyIDIgMiAyMmgyMHoiIGZpbGw9IiNmOTAiLz48L3N2Zz4="); }

/* URL-encoded: 118 characters of data */
.b { background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M12 2 2 22h20z' fill='%23f90'/%3E%3C/svg%3E"); }

URL 编码的版本更短,gzip 之后差距更大:上面两条规则分别压缩到 200 和 162 字节。在一个样式表中放 20 个小图标时,Base64 版本是 4,421 字节(gzip 后 801),URL 编码版本是 3,720 字节(gzip 后 615)。重复的代码压缩效果好,而 Base64 打乱了这种重复。

Base64 不需要任何转义规则,在任何接受 URL 的上下文中都不会出问题,也是许多 API 和构建工具所期望的格式。URL 编码的形式,如果忘记转义 #(它会开始一个 URL 片段),或者引号样式与外层的 url("...") 冲突,就会出错。SVG 转 Data URI 会生成两种版本并显示大小。

SVG data URI 的要求

  • MIME 类型 image/svg+xml。 即使类型写错,浏览器也会嗅探 PNG 和 JPEG 数据,但 SVG 不会。用其他任何类型,图片都无法渲染。
  • xmlns 属性。 HTML 中的内联 <svg> 没有它也能工作,但作为图片时,根元素必须声明 xmlns="http://www.w3.org/2000/svg"。很多手写的图标缺少它,于是悄无声息地失败。
  • 格式正确的 XML。 一个未闭合的标签或未转义的 & 会让整张图片失败,不会部分渲染。

SVG 的 Base64 通常以 PHN2Zy(<svg)或 PD94bWwg(<?xml )开头。开头是其他内容(比如注释或字节顺序标记)对浏览器没有影响,但会让人更难通过前缀识别格式。

样式和颜色

用作 background-image 或放在 <img> 中的 SVG 是一个独立的文档。页面的 CSS 无法作用到它内部,所以悬停颜色和 currentColor 都不起作用。两种常见的变通办法:

  • 把 data URI 用作遮罩,再用 background-color 上色:
.icon {
  width: 24px;
  height: 24px;
  background-color: currentColor;
  mask: url("data:image/svg+xml;base64,PHN2Zy...") center / contain no-repeat;
}
  • 当图标需要随状态或主题变化时,把 <svg> 代码内联到 HTML 中。

解码和修复

Base64 转 SVG 可以把 Base64 字符串还原为可读、可编辑的代码。如果 SVG 在编辑器中能渲染、作为 data URI 却不行,先在那里解码,检查根元素上有没有 xmlns。

常见问题

SVG data URI 用 Base64 还是 URL 编码?

URL 编码的 SVG 通常更短,gzip 压缩效果也更好,因为代码保持可读。Base64 更简单,也不会出现转义错误。SVG 转 Data URI 会把你的文件两种方式并排显示。

为什么我的 SVG data URI 什么都不显示?

检查三件事:MIME 类型必须是 image/svg+xml,根元素需要 xmlns="http://www.w3.org/2000/svg",文件必须是格式正确的 XML。一个在 HTML 中内联能正常渲染的 SVG,如果缺少 xmlns,作为图片使用时仍然会失败。

能用 CSS 修改 Base64 SVG 的颜色吗?

不能直接修改。作为图片加载的 SVG 与页面的 CSS 隔离,样式表中的 fill 和 currentColor 作用不到它。可以把它用作彩色背景上的 mask-image,或者改为内联 <svg> 元素。

SVG 作为 data URI 使用时,里面的脚本会运行吗?

作为图片使用时(<img>、CSS background-image)不会。浏览器渲染图片形式的 SVG 时,不运行脚本,也不加载外部资源。