input file属性上传压缩图片

input上传压缩图片

参考链接: link

代码展示

//点击事件
//压缩的思路是创建一个图片,将file等于这个图片,然后创建一个canvas图层将canvas等比例缩放,
//然后用canvas的drawImage将图片与canvas合起来,然后在转成吧canvas的base64转成file即可
$("#test").unbind().change(function () {
    // 选择的文件对象
    var file = $(".test")[0].files[0];
    //取消上传
    if (file == undefined) {
        return;
    }
    let reader = new FileReader();
    //读取file
    reader.readAsDataURL(file);
    reader.onloadend = function(e) {
        let img = new Image() //新建一个img标签(还没嵌入DOM节点)
        img.src = e.target.result //将图片的路径设成file路径
        img.onload = function() {
            // 缩放图片需要的canvas
            let canvas = document.createElement('canvas'),
                context = canvas.getContext('2d'),
                // 图片原始尺寸
                originWidth = this.width,
                originHeight = this.height,
                // 最大尺寸限制
                maxWidth = 600,
                maxHeight = 600,
                // 目标尺寸
                targetWidth = originWidth,
                targetHeight = originHeight;
            // 图片尺寸超过400x400的限制
            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对图片进行缩放
            canvas.width = targetWidth;
            canvas.height = targetHeight;
            // 清除画布
            context.clearRect(0, 0, targetWidth, targetHeight);
            // 图片压缩
            context.drawImage(img, 0, 0, targetWidth, targetHeight);
            // 图片小于1M不压缩
            console.log("压缩前:"+(file.size / 1024).toFixed(2) + 'kb');
            if (file.size > Math.pow(1024, 2)) {
                //canvas转为base64 缩放比例是0-1
                let data = canvas.toDataURL(file.type || 'image/png', 1.0);
                //压缩完成
                file = dataURLtoFile(data,file.name);
            }
            console.log("压缩后:"+(file.size / 1024).toFixed(2) + 'kb');
            //ajax()....ajax上传file
        }
    }
});
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值