把二进制图片按”3 字节 → 4 字符”的规则转成纯文本字符串,让图片能在只支持文本的环境(HTML/JSON/数据库)中传输和存储。代价是体积膨胀约 33%,仅适合小图。

两个前置概念

图片:本质是字节流,例如 10110010 11010100 ...,文本工具无法直接处理。

Base64:一套二进制 ↔ 文本的编码规则,使用 64 个安全字符:A-Za-z0-9+/,加 = 作为补位。它不加密、不压缩,只做格式转换。

编码原理:四步走

  1. 读取字节流:把图片当字节序列(每字节 8 bit)读进来
  2. 3 字节分组:每 3 字节 = 24 bit
  3. 24 bit 切 4 段:每段 6 bit(,对应 64 个字符),查表得字符
  4. 不足 3 字节补 =:剩 1 字节 → 补 ==,剩 2 字节 → 补 =

示例

输入 3 字节:01100100 01100001 01111001

合并 24 bit:011001 000110 000101 111001

每 6 bit 转十进制并查 Base64 表:

6 bit十进制字符
01100125Z
0001106G
0001015F
111001575

结果:ZGF5

在 Web 中的形式

data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAA...
  • data:image/png — MIME 类型告诉浏览器是 PNG
  • base64, — 标记编码方式
  • 后面是真正的 Base64 字符串

用途

  • HTML/CSS 内嵌小图(避免额外 HTTP 请求)
  • JSON / API 传输图片或附件
  • 数据库存小图标
  • 文本编辑器粘贴图片

关键缺点

  • 体积膨胀约 33%(原 100 KB → 约 133 KB)
  • 字符串极长,加大 HTML/JSON 体积 → 影响首屏与缓存
  • 不可流式处理:必须整体加载才能解码

结论:仅适合 KB 级小图。中大图请走 CDN 链接。