Base64按照字节截取的方法 又是一个rape.js遇到 - Assbbs

Base64按照字节截取的方法 又是一个rape.js遇到的问题,切割DataURL(base64)图片。 string.slice start,end 方法一般用来切割字符串,strat开头到end结尾。 但如果字符串被Base64加密,则无法按照常规方式进行切割。 Base64编码原理是将3个字节(3bytes)也就是3 8比特(3 8bit), 转换为…

Base64按照字节截取的方法 又是一个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 ; };