前言:
在项目中,经常会遇到要转码转成base64的场景, 那么什么是base64呢? 为什么要转成base64编码呢?
在阮一峰大神的JavaScript文档中是这么说的:
有时,文本里面包含一些不可打印的符号,比如 ASCII 码0到31的符号都无法打印出来,这时可以使用 Base64
编码,将它们转成可以打印的字符。
另一个场景是,有时需要以文本格式传递二进制数据,那么也可以使用 Base64 编码。
所谓 Base64 就是一种编码方法,可以将任意值转成0~9、A~Z、a-z、+和/这64个字符组成的可打印字符。
使用它的主要目的,不是为了加密,而是为了不出现特殊字符,简化程序的处理。
但这篇文章的重点不是介绍base64, 下面主要还是说说图片资源在什么情况下要使用到base64转码吧
场景一:将用户本地上传的资源转化,即用户通过浏览器点击文件上传时,将图片资源转化成base64:
1 | var reader = new FileReader(); |
场景二:将本项目中的图片资源转化成base64,(我还没有用到过此场景,感觉场景二也可以通过场景三来实现)
1 | function(){ |
场景三:将网络图片资源转化为base64,(感觉场景二中的资源换成绝对路径即可使用在场景三中)
1 | function(){ |
至此,便将图片base64转码的三种场景介绍完毕了,下面是基于以上的一下拓展:
扩展:
拓展一:后台需要以纯字符串的形式上传(即去掉data:image/png;base64,截取字符串即可)
reader.result.substring(reader.result.indexOf(“,”) + 1)
拓展二:判断base64资源大小,超过2M不让上传
var AllowImgFileSize = 2100000; //上传图片最大值(单位字节)( 2 M = 2097152 B )
if (AllowImgFileSize != 0 && AllowImgFileSize < reader.result.length) {
alert( '上传失败,请上传不大于2M的图片!');
return;
}
其中reader.result即是base64转码后的结果。
附上一篇 参考文档: https://blog.csdn.net/tww316/article/details/44343075
JavaScript 图片上传后base64转码直接显示1
2
3
4
5
6
7
8
9
10
11
12
13// 获取文件流
var fileObj = document.getElementById('inputId').files;
// 实例化一个FileReader对象
var reader = new FileReader();
// 创建一个img
var img = $('<img />');
reader.onload = function (e) {
img.attr('src', e.target.result);
$('div-selector').append(img);
}
// base64转码
reader.readAsDataURL(fileObj);