js图片压缩和上传并显示

由于近期项目中需要做个图片压缩上传,所以就在网上找了些资料自己写了一个

html部分

<input id="file" type="file">
<img id="imga" src="" alt="">

js部分

var eleFile = document.querySelector('#file');
// 压缩图片需要的一些元素和对象
var reader = new FileReader();
var imga=document.getElementById('imga');
var  img = new Image();
// base64地址图片加载完毕后      
     img.onload = function() {
         var originWidth = this.width, //image resize   压缩后的宽
         originHeight=this.height,
         maxWidth = 400, maxHeight = 400,
         quality = 0.8, //image quality  压缩质量
         canvas = document.createElement('canvas'),
         drawer = canvas.getContext("2d");
         canvas.width = maxWidth;
        canvas.height = originHeight/originWidth*maxWidth;
          drawer.drawImage(img, 0, 0, canvas.width, canvas.height);
          //上传到七牛云base64
          var base64 = canvas.toDataURL("image/jpeg", quality); // 这里就拿到了压缩后的base64图片
          //console.log(base64);
          //blob对象
          canvas.toBlob(function(blob){
              //console.log(blob)
          }, "image/jpeg", quality);
          var file = dataURLtoFile(base64, 'name');
          console.log(file);
          imga.src=base64;

      };
 //base64转file
//filename图片的名字dataurl是base64地址
 function 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});
}

// 文件base64化,以便获知图片原始尺寸
reader.onload = function() {
    //reader.result就是base64
    img.src = reader.result;
};
//addEventListener监听change事件
eleFile.addEventListener('change', function () {
    file = this.files[0];
    // 选择的文件是图片
    if (file.type.indexOf("image") == 0) {
        //console.log(file);
        reader.readAsDataURL(file); //以数据url的方式读取文件内容
         
    }
});

效果图

posted @ 2018-05-21 16:13  xue11hua  阅读(3081)  评论(0编辑  收藏  举报