前端图片上传的压缩(canvas)

203 阅读1分钟

压缩代码(利用canvas)

/**         * 图片压缩(利用canvas)     
            * @param  path     图片路径      
            * @param  obj      压缩配置width,height,quality,不传则按比例压缩      
            * @param  callback  回调函数     
 */      
        function dealImage(path, obj, callback) {        
            var img = new Image();        
            img.src = path;        
            img.onload = function() {          
            var that = this;          // 默认按比例压缩          
            var w = that.width,           
            h = that.height,            
            scale = w / h;         
            w = obj.width || w;          
            h = obj.height || (w / scale);          
            //生成canvas          
            var canvas = document.createElement('canvas'),          
            ctx = canvas.getContext('2d');          
            canvas.width = w;          
            canvas.height = h;          
            ctx.drawImage(that, 0, 0, w, h);          
            // 默认图片质量为0.7         
            var quality = 0.7;          
            if (obj.quality && obj.quality <= 1 && obj.quality > 0) {           
              quality = obj.quality; 
            }          
            // 回调函数返回base64的值          
            var base64 = canvas.toDataURL('image/jpeg', quality);          
            // console.log('base64==>',base64)          
            callback(base64);       
                }
          } 
    

以下函数对图片进行处理转base64

    function btnUploadFile(e){ 
      for(let i=0,j=e.target.files.length;i<j;i++){        
        var imgFile = e.target.files[i]; //获取图片文件        
        // console.log(imgFile)        
        if (imgFile.size >= 200 * 1024) {          
          // 图片大于200kb进行压缩          
          var reader = new FileReader();          
          reader.readAsDataURL(imgFile);         
          const that = this;        
          reader.onload = function (e) {        
            var img = new Image();        
            img.src = e.target.result; //获取base64          
            //如果图片大小小于200kb,则直接上传        
            dealImage(e.target.result,{},baseToFormDate)             
          }                
        } else{          
          var formData = new FormData();  // 创建form对象        
          formData.append('file', imgFile);  // 通过append向form对象添加数据        
          //uploadImg(formData) 上传        
           }      
       }

base64转图片formData

    function baseToFormDate(base64String){        
        //这里对base64串进行操作,去掉url头,并转换为byte      
        var bytes = window.atob(base64String.split(',')[1]);           
        //处理异常,将ASCII码小于0的转换为大于0,这里有两种写法   
        var ab = new ArrayBuffer(bytes.length);    
        var ia = new Uint8Array(ab);    
        for(var i = 0; i < bytes.length; i++){     
          ia[i] = bytes.charCodeAt(i);     
        }     
       //Blob对象     
       var blob = new Blob([ab], {type: 'image/jpeg'}); //type为图片的格式          
       //FormData对象      
       var fd = new FormData();    
       fd.append('file',blob, Date.now() + '.jpg');          
    }