0
点赞
收藏
分享

微信扫一扫

前端压缩图片

尤克乔乔 2022-03-21 阅读 105

功能介绍

压缩图片

功能实现

示例代码:

export const CompressImage = (file) => {
      let files;
      const fileSize = parseFloat((parseInt(file['size']) / 1024 / 1024).toFixed(2))
      const read = new FileReader();
      read.readAsDataURL(file);
      return new Promise(function (resolve, reject) {
            read.onload = function (e) {
                  var img = new Image();
                  img.src = e.target.result;
                  img.onload = function () {
                        var w = this.width,
                              h = this.height
                        var canvas = document.createElement('canvas');
                        var ctx = canvas.getContext('2d');
                        var base64;
                        canvas.setAttribute("width", w)
                        canvas.setAttribute("height", h)
                        ctx.drawImage(this, 0, 0, w, h)
                        // 针对原图片的大小来设置不同的压缩质量(1最高)
                        if (fileSize < 1) {
                              base64 = canvas.toDataURL(file['type'], 1)
                        } else if (fileSize > 1 && fileSize < 2) {
                              base64 = canvas.toDataURL(file['type'], 0.5)
                        } else {
                              base64 = canvas.toDataURL(file['type'], 0.2)
                        }
                        files = dataURLtoFile(base64, file['name']); //如果后台接收类型为base64的话这一步可以省
                        resolve(files)
                  }
            }
      })
}

export const dataURLtoFile = (dataurl, filename) => {
      var arr = dataurl.split(','), mime = arr[0].match(/:(.*?);/)[1],
            bstr = atob(arr[1]), n = bstr.length, u8arr = new Uint8Array(n);
      while (n--) {
            u8arr[n] = bstr.charCodeAt(n);
      }
      return new File([u8arr], filename, { type: mime });
}
举报

相关推荐

0 条评论