← 返回工具箱
🖼️ 图片转Base64

图片 → Base64

📁 点击选择图片 或 拖拽图片到此处


Base64 → 图片

📖 Base64编码完全指南

什么是Base64编码?

Base64是一种基于64个可打印ASCII字符来表示二进制数据的编码方式。它的名字来源于编码所使用的64个字符。Base64最初设计的目的是让二进制数据能够通过只支持文本的传输层(如电子邮件的SMTP协议)进行安全传输。在现代Web开发中,Base64被广泛用于Data URI、JWT令牌、API数据传输等场景。

Base64编码的核心思想是:将每3个字节(共24位)的二进制数据,重新划分为4组,每组6位。由于6位二进制最多能表示2^6=64个不同的值(0-63),因此只需要64个字符就能完整表示所有可能的组合。这64个字符全部是可打印的ASCII字符,确保了数据在任何文本环境中都不会被破坏或误解。

Base64字符编码表(完整64字符)

字符字符字符字符
0A16Q32g48w
1B17R33h49x
2C18S34i50y
3D19T35j51z
4E20U36k520
5F21V37l531
6G22W38m542
7H23X39n553
8I24Y40o564
9J25Z41p575
10K26a42q586
11L27b43r597
12M28c44s608
13N29d45t619
14O30e46u62+
15P31f47v63/

编码算法逐步详解

下面以编码字符串"Hi!"为例,展示完整的Base64编码过程:

第一步:获取ASCII码值
H = 72, i = 105, ! = 33

第二步:转换为8位二进制
H = 01001000, i = 01101001, ! = 00100001

第三步:拼接为24位二进制串
010010000110100100100001

第四步:按每6位分组
010010 | 000110 | 100100 | 100001

第五步:将每组6位转为十进制
18, 6, 36, 33

第六步:查表得到Base64字符
18→S, 6→G, 36→k, 33→h

编码结果:"Hi!" → "SGkh"

填充符号 = 的原理

Base64编码要求输入数据长度必须是3的倍数(因为3字节=24位,恰好分为4组6位)。当原始数据长度不是3的倍数时,需要进行填充处理:

例如:编码单个字母"A"(ASCII 65 = 01000001),补零后得到010000 010000,查表得到Q和Q,再补两个等号,最终结果为"QQ=="。

Base64的主要应用场景

应用场景详细说明实际示例
电子邮件(MIME)SMTP协议只能传输7位ASCII字符,附件和非ASCII内容必须经过Base64编码后才能传输Content-Transfer-Encoding: base64
Data URI将图片、字体等资源直接嵌入HTML/CSS中,减少HTTP请求数量data:image/png;base64,iVBOR...
URL参数传递将复杂数据(如JSON)编码后放入URL查询参数中传递?token=eyJhbGci...
JWT令牌JSON Web Token的header和payload部分使用Base64URL编码header.payload.signature
API数据传输在JSON等纯文本格式中传输二进制数据(如图片、文件内容)"avatar": "data:image/jpeg;base64,..."
证书与密钥PEM格式的SSL证书和私钥使用Base64编码存储-----BEGIN CERTIFICATE-----

标准Base64与URL安全Base64

标准Base64编码中使用的"+"和"/"字符在URL中有特殊含义("+"会被解释为空格,"/"是路径分隔符),因此产生了URL安全的Base64变体(Base64URL)。两者的区别如下:

特性标准Base64(RFC 4648 Section 4)URL安全Base64(RFC 4648 Section 5)
第62个字符+ (加号)- (减号/连字符)
第63个字符/ (斜杠)_ (下划线)
填充符使用 = 填充通常省略 = 填充
典型用途邮件MIME编码、PEM证书JWT令牌、URL参数、文件名

体积与性能考量

Base64编码会使数据体积增大约33%(每3字节变为4字节)。如果编码后的字符串还包含换行符(MIME标准要求每76个字符换行一次),实际体积增加会略多于33%。在使用Base64时需要权衡以下因素:

Data URI格式详解

Data URI语法格式:
data:[<mediatype>][;base64],<data>

各部分含义:
data: — URI方案标识
mediatype — MIME类型,如image/png、image/jpeg、image/svg+xml
;base64 — 声明数据为Base64编码(若省略则为URL编码的文本)
,data — 实际的编码数据

HTML中使用:
<img src="data:image/png;base64,iVBORw0KGgo..." />

CSS中使用:
background-image: url(data:image/svg+xml;base64,PHN2Zy...);

JavaScript中生成:
canvas.toDataURL('image/png') // 返回完整Data URI
btoa(string) // 编码为Base64
atob(base64) // 解码Base64
💡 关于URL安全Base64的重要提示:如果你需要将Base64编码的数据放入URL参数、Cookie或文件名中,请务必使用URL安全的Base64变体(将"+"替换为"-",将"/"替换为"_",并去掉末尾的"="填充)。在JavaScript中,可以通过 btoa(str).replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/, '') 来实现。许多现代库(如js-base64)直接提供了Base64URL编码函数。使用标准Base64直接放入URL会导致数据被错误解析,这是Web开发中常见的隐蔽Bug之一。