js 压缩上传图片

思路:

  1. 通过input标签获取本地图片
  2. 把获取到的图片转换成base64格式(canvas只能处理base64格式的图片)
  3. 通过canvas的API把图片压缩大小后再生成图片。
  4. 把压缩后的base64图片转成Blob的二进制流文件。
  5. 通过FormData 表单上传的形式提交至后端。
<!DOCTYPE html>
<html>
<head> <meta charset="UTF-8" /> <title>压缩图片demo</title> </head> <body> <img id="img" src="" /> <input id="file" type="file" onchange="compress()" /> </body> <script> // 对图片进行压缩 function compress() { let fileObj = document.getElementById("file").files[0]; //上传文件的对象 let reader = new FileReader(); reader.readAsDataURL(fileObj); reader.onload = function (e) { let image = new Image(); image.src = e.target.result; image.onload = function () {
       let canvas = document.createElement("canvas"),
        context = canvas.getContext("2d");
       canvas.width = image.width;        
       canvas.height = image.height;
       context.drawImage(image, 0, 0, image.width / 2, image.height / 2);

       //预览图片
       let base64img = "";
       base64img = canvas.toDataURL("image/jpeg");
       document.getElementById("img").src = base64img;

       // 上传
       var fileData = new FormData();
       fileData.append("file", convertBase64UrlToBlob(base64img));
       axios.post(url,fileData).then(
          //上传成功!
       );     
            
};
};
}
  /**
  * 将base64的图片转换为Blob
  */
  function convertBase64UrlToBlob(urlData) {
    var arr = urlData.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 Blob([u8arr], { type: mime });
  }
   
</script>
</html>

 附外链:https://blog.csdn.net/a8725585/article/details/84867040 canvas旋转图片

原文地址:https://www.cnblogs.com/kongwei/p/13118343.html