Base64编码及其运用

    说到Base64相信大家都不陌生,在web开发过程中经常可以见到它的身影。Base64是一种编码方式,常用于表示、传输、与存储二进制数据。用64个可打印字符来表示二进制数据,从而解决一些二进制数据无法使用的场景。Base64最初主要用户多用途互联网邮件扩展(MIME Email), MIME规定了用于表示各式各样数据(非英文符号数据)的符号化方法,而Base64编码就作为内容传输编码方式之一(charset)。http协议就是采用了MIME的框架。

    由于2^6=64所以最经济的方式就是把6bit作为一个编码单元,对应一个可打印字符来完成编码工作。来看看Base64编码表:

Base64编码表

Base64编码规则:

Base64编码的时候将三个byte的数据先后放入一个24bit的缓冲区中,先来的byte占高位。然后,每次取出6个bit参照编码码表得出编码。如果被编码字符的长度不能被3整除,那么就在编码输出的末尾补上=号。比如说,如果待编码的字符长度是4个字节,那么编码输出会有两个等号。如果待编码字符的长度是8个字节那么编码输出末尾会补上一个等号。如果待编码的比特位不足一个编码单元(6bit)的时候,则需要在低位补全。当最后剩余一个八位字节(一个byte)时,最后一个6位的base64字节块有四位是0值。

说到这里你可能已经想到编码后的数据比原始数据略长,为原来的4/3。下面来看看Base64编码的应用。

Canvas

    canvas有一个toDataURL接口用于把当前的canvas转换为data url数据格式的图片。

canvas.toDataURL(type, encoderOptions);

  • type属性设置转换的图片格式,默认为image/png
  • encoderOptions为一个数字范围从0-1,用于设置图片的质量。

dataURL格式定义:

data:[mediatype][;base64],

  • mediatype 为一个MIME格式定义的字符串,如image/jpeg表示jpeg图片。
  • base64字段表示后面的数据编码方式。

举个例子:

<script type="text/javascript">
window.onload = function() {
    var canvas = document.getElementById('main-canvas');
    var context = canvas.getContext('2d');
    context.fillRect(0, 0, canvas.width, canvas.height);
    var dataURL = canvas.toDataURL();
    console.log(dataURL);
}
</script>

将会得到如下输出:

data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAeAAAALQCAYAAABIRqOlAAAc9UlEQ…AAgUBAgAN0kwQIECBAQID9AAECBAgQCAQEOEA3SYAAAQIELrSX0B9Umz4MAAAAAElFTkSuQmCC

此外,linux/mac系统有一个命令行工具: uuencode可以把文件转换成Base64格式输出, 先把当前的canvas另存为一个图片,然后运行命令行程序可以得到如下结论,与toDataURL结果一致:

[luncher@localhost ~]$ uuencode -m 123.png 123-base 
begin-base64 640 123-base
iVBORw0KGgoAAAANSUhEUgAAAeAAAALQCAYAAABIRqOlAAAc9UlEQVR4Xu3V
wQkAMAzEsGT/oVvoEPVHWeBABLwzc8YRIECAAAECXwVWgL96GyNAgAABAk9A
gD0CAQIECBAIBAQ4QDdJgAABAgQE2A8QIECAAIFAQIADdJMECBAgQECA/QAB
AgQIEAgEBDhAN0mAAAECBATYDxAgQIAAgUBAgAN0kwQIECBAQID9AAECBAgQ
CAQEOEA3SYAAAQIEBNgPECBAgACBQECAA3STBAgQIEBAgP0AAQIECBAIBAQ4
QDdJgAABAgQE2A8QIECAAIFAQIADdJMECBAgQECA/QABAgQIEAgEBDhAN0mA
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值