编码解码哈希加密格式化时间转换开发生成文本处理网络工具其他工具
首页 / 其他工具 / Data URI生成

Data URI生成

生成可内嵌的 Data URI。

输入
结果

这个工具能做什么

这个工具把一段文本、SVG 图标、内联 CSS 或一小段脚本转成 data: 开头的 URI 字符串,让这些资源不再需要单独放一个文件、发一次 HTTP 请求,而是直接以字符串形式嵌进 HTML、CSS 或 JS 里。典型痛点是页面上有几个几百字节的小图标或占位图,为它们各自建文件、走一次请求时,连接握手和队列排队的开销往往比传输本身还大;把它们编成 data URI 内嵌后,这部分请求数直接归零。你只要粘贴内容、选好编码方式,就能拿到可直接复制的完整 data URI,本地完成编码不上传。

data URI 的格式是 data:[<mediatype>][;base64],<data>,由 RFC 2397 定义。前面的 MIME 类型(如 image/svg+xml、text/css)告诉浏览器该按什么类型解析,后面的数据段有两种写法:一种是 Base64,把任意字节按 6 位一组映射成 64 个可见字符,体积约膨胀三分之一,适合二进制或含大量特殊字符的内容;另一种是百分号编码(URL 编码),只把 #、%、< 这类在 URI 上下文里有歧义的字符转义,对 SVG 这种本身就是文本的内容通常比 Base64 更短。文本会先按 UTF-8 取字节再编码,所以中文、emoji 也能被浏览器正确还原,不会乱码。

最常见的用法是把小图标塞进 CSS:例如一个 16×16 的 SVG 箭头,生成 data URI 后写成 background: url("data:image/svg+xml,..."),省掉一张图片的请求。另一个场景是邮件模板或单文件 HTML——很多邮件客户端和离线页面不方便引用外部资源,把 logo、分隔线转成 data URI 直接内嵌,整个页面就是自包含的一个文件,拷到哪都能显示。其实构建工具里的小图片内联(如 webpack 的 asset/inline、CSS 里的 url-loader 阈值)本质就是同一件事,这个工具让你不启动构建、临时改一个图标时也能手工生成一份对应字符串。

需要注意 data URI 并非越多越好:内联的内容会随 HTML/CSS 一起下载、无法被浏览器单独缓存,同一张图在多个页面重复内联反而浪费流量,一般只对几 KB 以内、复用不多的小资源才划算。Base64 会让体积变大约三分之一,SVG 这类文本优先考虑 URL 编码更省。此外在 CSS 里内联 SVG 时,若不做编码直接塞原文,其中的 # 号会被当成 URL 的片段标识符而截断,双引号也要和外层引号错开,所以即便看起来是纯文本,过一遍编码往往更稳妥。

Data URI生成是一个免费的在线工具,打开网页就能用,不用下载也不用注册。平时大家搜的“data uri生成”、“dataurl生成”、“data uri”,说的都是这个。

常见使用场景

使用方法

  1. 把内容粘贴到输入框(生成类工具直接设置选项)。
  2. 按需要选择选项,点操作按钮。
  3. 结果出现在下方,点「复制结果」即可带走。

常见问题

Base64 和 URL 编码该选哪一种?
对 SVG、CSS 这类文本内容,URL(百分号)编码通常更短也更易读;对含大量特殊字符或二进制性质的内容用 Base64,因为它能安全表示任意字节。代价是 Base64 会让体积增大约 33%。
生成的 data URI 能直接放进 CSS 的 background:url() 里吗?
可以,写成 background: url("data:image/svg+xml,...") 即可。注意用引号包住整段,并让内部的 # 等字符经过编码,否则会被 URL 语法当成片段标识符截断。
支持直接上传图片文件转成 data URI 吗?
本工具面向可粘贴的文本内容,如纯文本、SVG、CSS。如果要把本地 PNG、字体等二进制文件转 data URI,需要读取文件字节再做 Base64,应使用专门的文件转 Base64 工具。
内容里有中文或 emoji,会不会乱码?
不会。文本会先按 UTF-8 编码成字节,再做 Base64 或百分号编码,浏览器按同样规则解回,多字节字符能原样还原。
用 data URI 内嵌资源会影响性能或安全吗?
内联资源无法被单独缓存,Base64 又会增大体积,所以只适合小而复用少的资源,大图或多页复用仍建议走外部文件。此外 data URI 属于独立来源,部分 CSP 策略会拦截它,需要在 img-src/style-src 等指令中放行 data:。

相关工具

查看全部「其他工具」工具 →

相关名词解释