前端-图片压缩canvas干货

需要用户上传图片的时候,怎样只通过前端来压缩图片的大小呢?
往下看⬇️


//canvas压缩图片   参数base64,callback回调函数(由于加载图片是异步的,所以必须要用回调函数来获取base64的图片)
export function imgZip(file, callback) {
  let img = document.createElement('img'); //创建图片元素
  img.src = file; //  传入的base64图片格式
  img.onload = function() { // 创建的图片加载完成,再去压缩图片
    let originWidth = img.width;
    let originHeight = img.height;
    // 最大宽高
    let maxWidth = 400, maxHeight = 300;  // 这个也可以通过参数传入设置
    // 目标尺寸
    let targetWidth = originWidth, targetHeight = originHeight;
    // 图片尺寸超过400*300,重新计算targetWidth,targetHeight
    if (originWidth > maxWidth || originHeight > maxHeight) {
      if (originWidth / originHeight > maxWidth / maxHeight) {
        // 更宽,按照宽度限定尺寸
        targetWidth = maxWidth;
        targetHeight = Math.round(maxWidth * (originHeight / originWidth));
      } else {
        targetHeight = maxHeight;
        targetWidth = Math.round(maxHeight * (originWidth / originHeight));
      }
    }
    // 创建canvas画布
    let canvas = document.createElement('canvas');
    let context = canvas.getContext('2d');
    canvas.width = targetWidth;
    canvas.height = targetHeight;
    // 清除画布
    context.clearRect(0, 0, targetWidth, targetHeight);
    // 图片压缩
    context.drawImage(img, 0, 0, targetWidth, targetHeight);
    let url = canvas.toDataURL('image/jpg'); //  获取压缩后图片的base64数据
    callback(url) // 通过回调函数使用url
  };
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值