一、在组件包下新建compressImage.js
 1 // 压缩图片
 2 // eslint-disable-next-line no-unused-vars
 3 export function compressImage (file, config) {
 4   // eslint-disable-next-line no-unused-vars
 5   let src
 6   // eslint-disable-next-line no-unused-vars
 7   let files
 8   // let fileSize = parseFloat(parseInt(file['size']) / 1024 / 1024).toFixed(2)
 9   const read = new FileReader()
10   read.readAsDataURL(file)
11   return new Promise(function (resolve, reject) {
12
read.onload = function (e) {
13
let img = new Image()
14
img.src = e.target.result
15
img.onload = function () {
16
// 默认按比例压缩
17
let w = config.width
18
let h = config.height
19
// 生成canvas
20
let canvas = document.createElement('canvas')
21
let ctx = canvas.getContext('2d')
22 
let base64
23
// 创建属性节点
24
canvas.setAttribute('width', w)
25
canvas.setAttribute('height', h)
26
ctx.drawImage(this, 0, 0, w, h)
27
// 如果图片超过2m 那么压缩0.2
28
base64 = canvas.toDataURL(file['type'], config.quality)
29      
30
// 回调函数返回file的值(将base64编码转成file)
31
// files = dataURLtoFile(base64) // 如果后台接收类型为base64的话这一步可以省略
32 
33
// 回调函数返回file的值(将base64转为二进制)
34
let fileBinary = dataURLtoBlob(base64)
35 
36 
resolve(fileBinary)
37 
}
38     }
39   })
40 };
41 
  // 将base64转为二进制
42 function dataURLtoBlob (dataurl) {
43   let arr = dataurl.split(',')
44   let mime = arr[0].match(/:(.*?);/)[1]
45   let bstr = atob(arr[1])
46   let n = bstr.length
47   let u8arr = new Uint8Array(n)
48   while (n--) {
49
u8arr[n] = bstr.charCodeAt(n)
50   }
51   return new Blob([u8arr], { type: mime })
52 }
53 
54 // base64转码(将base64编码转回file文件)  此方法我没用到
55 // eslint-disable-next-line no-unused-vars
56 function dataURLtoFile (dataurl) {
57   let arr = dataurl.split(',')
58   let mime = arr[0].match(/:(.*?);/)[1]
59   let bstr = atob(arr[1])
60   let n = bstr.length
61   let u8arr = new Uint8Array(n)
62   while (n--) {
63
u8arr[n] = bstr.charCodeAt(n)
64   }
65   return new File([u8arr], { type: mime })
66 }
      

