1、场景
我们上传图片时,图片如果过大,耗费流量,会要求前端压缩,正常的我们选择好图片时,会拿到这种图片类型,一种是base64,一种是file,我们是不管是那种,最终传给后端的话,一般都会是流,因为base64字符太长了,一般不建议使用。
原理就是拿到图片绘制在canvas上,然后canvas转换为base64的图片(如果需要base64,后面不用再转为file),然后在转换成file返回
第一种,file压缩之后为file
/**
* 图片压缩
*/
export function picReduce({
file=null,
cb = null,
}) {
if(file){
const canvas = document.createElement('canvas');
const ctx = canvas.getContext('2d');
// 先new一个img和fileReader的实例
const img = new Image()
const reader = new FileReader()// 读取文件资源
reader.readAsDataURL(file)
let maxWidth = 1024 //img.naturalWidth/5
let maxHeight = 768 //img.naturalHeight/5
reader.onload = function(e){
console.log(e)
img.src = e.target.result
img.onload = function () { //一定的加这句话,不然上传较慢的话,是获取不到图片的大小的&#x