Base64编码、解码

Base64 就是一种编码方法,可以将任意值转成 0~9、A~Z、a-z、+、/ 这64个字符组成的可打印字符。主要用于转换二进制数据。经编码后,文本体积会变大 1/3。

一、ASCII 编码转 Base64

js原生提供两个 Base64 相关的方法:

  • window.btoa():ASCII 编码转为 Base64 编码
  • window.atob():Base64 编码转为原来的ASCII 编码
window.btoa('hello') // aGVsbG8=
window.atob('aGVsbG8=') // hello

非 ASCII 编码(如:汉字)使用上述2个方法会报错。

二、非 ASCII 编码转 Base64

要将非 ASCII 码字符转为 Base64 编码,中间要用 encodeURIComponent 方法进行一次转码。

function b64Encode(str) {
    return btoa(encodeURIComponent(str));
}
function b64Decode(str) {
    return decodeURIComponent(atob(str));
}
    
let strChinaBase64 = b64Encode('你好'); // "JUU0JUJEJUEwJUU1JUE1JUJE"
console.log(b64Decode(strChinaBase64)); // "你好"

三、字符串(ASCII 和 非 ASCII 都适用)转 Base64

js-base64 npm 包可用于字符串转 Base64。

$ cnpm i -S js-base64
import { Base64 } from 'js-base64';

// 加密
Base64.encode('dankogai'); // ZGFua29nYWk=
// 解密
Base64.decode('ZGFua29nYWk='); // dankogai

四、图片转 Base64

var img = "http://xxx.com/img/xx.png";  

function getBase64Image(img) {  
     var canvas = document.createElement("canvas");  
     canvas.width = img.width;  
     canvas.height = img.height;  
     var ctx = canvas.getContext("2d");  
     ctx.drawImage(img, 0, 0, img.width, img.height);  
     var ext = img.src.substring(img.src.lastIndexOf(".")+1).toLowerCase();  
     var dataURL = canvas.toDataURL("image/"+ext);  
     return dataURL;  
}  

// 下面的代码也可以封装到getBase64Image函数里面
var image = new Image();  
image.src = img;  
image.onload = function(){  
  var base64 = getBase64Image(image);  
  console.log(base64);  
}

五、图片还没上传时的预览图片

const inp = document.querySelector('input');
inp.onchange = e => {
  const file = e.target.files[0];
  const reader = new FileReader();
  reader.onload = e => {
    const dataurl = e.target.result;
    preview.src = dataurl;
  }
  reader.readAsDataURL(file);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值