Base64按照字节截取的方法

C 2021-3-11 1680

又是一个rape.js遇到的问题,切割DataURL(base64)图片。

string.slice(start,end) 方法一般用来切割字符串,strat开头到end结尾。

但如果字符串被Base64加密,则无法按照常规方式进行切割。

Base64编码原理是将3个字节(3bytes)也就是3*8比特(3*8bit),

转换为4*6比特(4*6bit)并补码成4个常规8比特字节(4bytes)。

计算原始字符串长度,base64四分之三,减去空字符数量:

base64:输入的base64

length:原始字符串长度

var length=base64.length*0.75-(base64.slice(-2).match(/=/g)||[]).length;

这样Base64长度都是4字节的整数倍,我们从Base64中取出两端完整的字符串:

from:开始截取的位置

till:结束截取的位置

var pick=base64.slice(Math.floor((from||0)/3)*4,Math.ceil((till||length)/3)*4);

转换为utf-8字符串,根据偏移量截取字符串:

let part=atob(pick).slice(from%3,((till||length)%3||3)-3||length);

封装一个函:

function base64_slice(value,from,till){
let length=value.length*0.75-(value.slice(-2).match(/=/g)||[]).length;
if(!from||from<0){from=from?(length+from):0;};
if(!till||till<0){till=length+(till||0);};
if(till>length){till=length;};
return atob(value.slice(Math.floor(from/3)*4,Math.ceil(till/3)*4)).slice(from%3,(till%3||3)-3||length);
};
最新回复 (0)
    • 屌丝论坛
      2