vue 上传图片进行压缩图片

1 篇文章 0 订阅
1 篇文章 0 订阅
afterRead(file){
             if(this.fileList.length > 1){
                 this.fileList.splice(1);
                 this.$msg({
                     text:'只能选择这么多!',
                     type:'info'
                 })
                 return false;
             }
            
            let maxSize = 1 * 1024 * 1024;  //自己定义的文件大小,超过多少M就开始压缩(现在是1M)
            let fileObj = file.file;  // 当前的图片
             if (fileObj.size > maxSize) {
                this.imgcompress(fileObj, file);
            }else{
                 //没有大于1兆直接执行
                 let Files = this.Files;
                 Files.push(file.file);
            } 
        },
 imgcompress(file, files) {
    const img = document.createElement('img')
    const reader = new FileReader(); // 读取文件资源实例
    reader.readAsDataURL(file);   //读取图片资源
    reader.onload = e => {        //读取成功
        img.src = e.target.result;
        const { width: originWidth, height: originHeight } = img; //上传的图片的宽高
        const maxWidth = 1000, //设置一个canvas 的最大宽高
        maxHight = 1000;
        if (originWidth > maxWidth || originHeight > maxHight) {
        //计算出图片的缩放比例
        if (originWidth > originHeight) {
            //宽 大于 高
            const Proportion = Math.ceil(originWidth / maxWidth);
            let targetWidht = parseInt(originWidth / Proportion); //目标的宽度
            let targetHeight = parseInt(originHeight / Proportion); //目标的高度

            this.createCanvasCompress(targetWidht, targetHeight, img, files);
        } else {
            const Proportion = Math.ceil(originHeight / maxHight); //高大于宽
            let targetWidht = parseInt(originWidth / Proportion); //目标的宽度
            let targetHeight = parseInt(originHeight / Proportion); //目标的高度
            let bold = this.createCanvasCompress(
            targetWidht,
            targetHeight,
            img,
            files
            );
        }
    } else {
      let quality = 0.8;
      this.createCanvasCompress(
        originWidth,
        originHeight,
        img,
        files,
        quality
      );
    }
  };
},
 createCanvasCompress(targetWidth, targetHeight, img, files, quality) {
  let that = this;
  return new Promise((resolve, reject) => {
    const canvas = document.createElement("canvas");
    const context = canvas.getContext("2d");
    // 设置宽高度为等同于要压缩图片的尺寸
    canvas.width = targetWidth;
    canvas.height = targetHeight;
    context.clearRect(0, 0, targetWidth, targetHeight);
    //将img绘制到画布上
    console.log(targetWidth, targetHeight);
    context.drawImage(img, 0, 0, targetWidth, targetHeight);

    let bold = canvas.toBlob(
      function(blob) {
        resolve(blob);
        that.Files.push(blob); //压缩之后的图片
        //拿到的是blob格式的图片,需要把blob格式转换为file格式
        let files1 = new window.File([blob], files.file.name, {type: files.file.type})
        console.log(files1 )
      },
      "image/png",
      quality
    );
  });
  // 创建画布
},
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值