encode2026-07-252 分钟阅读
什么是 Base64 编码
Base64 是一种将二进制数据转换为 ASCII 文本的编码方式。它使用 64 个可打印字符(A-Z、a-z、0-9、+、/)来表示任意二进制数据。
编码原理
原始数据(图片):2 字节二进制
↓ Base64 编码
Base64 文本:约 4 字节 ASCII 文本
Base64 编码后的数据大小约为原始数据的 133%(增加约 1/3)。
为什么需要图片转 Base64
- 内联图片:HTML/CSS 中直接嵌入小图片,减少 HTTP 请求
- Data URI:在 HTML 中使用
data:image/png;base64,...内联图片 - JSON 传输:通过 API 传输图片数据(Base64 字符串)
- 邮件附件:邮件系统中传输二进制文件
- 数据库存储:某些数据库不支持二进制类型,用文本存储
- SVG 外的图标:小图标用 Base64 内联避免额外请求
Base64 在前端的应用
Data URI 内联图片
<!-- 传统方式:需要 HTTP 请求 -->
<img src="/images/logo.png" alt="Logo">
<!-- Base64 内联:零额外请求 -->
<img src="data:image/png;base64,iVBORw0KGgo..." alt="Logo">
CSS 内联背景
/* 传统方式 */
.logo { background-image: url('/images/logo.png'); }
/* Base64 内联 */
.logo {
background-image: url('data:image/png;base64,iVBORw0KGgo...');
}
内联图片的优缺点
| 优点 | 缺点 | |------|------| | 减少 HTTP 请求 | 图片体积增大约 33% | | 适合小图标(<5KB) | 无法被浏览器缓存 | | 无跨域问题 | 增加 HTML/CSS 文件大小 | | 适合邮件 HTML | 不适合大图片 |
如何使用在线工具
使用 DevToolkit Pro 的 图片转 Base64 工具:
- 拖拽或点击上传图片
- 支持 PNG、JPG、GIF、WebP 等格式
- 实时显示 Base64 编码结果
- 一键复制编码后的文本
- 显示编码后的文件大小对比
代码中的图片转 Base64
JavaScript(浏览器端)
// 使用 FileReader
function imageToBase64(file) {
return new Promise((resolve, reject) => {
const reader = new FileReader();
reader.onload = () => resolve(reader.result);
reader.onerror = reject;
reader.readAsDataURL(file);
});
}
// 使用
const base64 = await imageToBase64(imageFile);
console.log(base64); // data:image/png;base64,iVBORw0KGgo...
Node.js
const fs = require('fs');
function imageToBase64(filePath) {
const data = fs.readFileSync(filePath);
const base64 = data.toString('base64');
const ext = filePath.split('.').pop();
const mime = { png: 'image/png', jpg: 'image/jpeg', gif: 'image/gif' };
return `data:${mime[ext]};base64,${base64}`;
}
最佳实践
什么时候用 Base64?
- ✅ 小图标(<5KB)
- ✅ 装饰性图片
- ✅ 邮件中的图片
- ✅ 减少首屏 HTTP 请求
什么时候不用 Base64?
- ❌ 大图片(>10KB)
- ❌ 需要被缓存的图片
- ❌ 需要独立 URL 的图片
- ❌ 频繁更新的图片
FAQ
Base64 编码后的字符串能还原成图片吗?
可以。Base64 是无损编码,任何 Base64 编码器都能还原。使用 atob() 解码为二进制数据,再写入文件即可。
为什么 Base64 后的图片体积变大了约 33%?
Base64 使用 6 个 bit 表示原始 8 个 bit 的数据,导致编码后数据量增加约 1/3。这是编码方式的固有开销。
小图用 Base64 还是引用?
小于 5KB 的图标建议用 Base64,可以减少 HTTP 请求。大于 10KB 的图片建议传统引用,因为文件大小增加会抵消请求减少的收益。
本文由 DevToolkit Pro 提供。更多开发者工具请访问 首页。