前端利用js将用户上传的大图片压缩后上传

最近项目有用到用户上传图片功能,但我用我手机拍一张图片大小是3.2MB,这么大的图片上传到网站后台再压缩的话很耗费流量,所以上网找了一个方法在上传的时候将图片压缩质量,后为300KB的大小。记录下

var fileBtn = $("input[type=file]");
        fileBtn.on("change", function () {
            if (filePathAr.length == 6) {
                alert("最多6张图片哦~(●'◡'●)");
                return;
            }
            var index = $(this).val().lastIndexOf("\\");
            var sFileName = $(this).val().substr((index + 1));
            if (sFileName.length > 0) {
                var fil = this.files;
                var reader = new FileReader(); 
                reader.readAsDataURL(fil[0]);
                reader.onload = function (e) {
                    dealImage(this.result, { width: 200 }, function (base) {
                        reads(fil[0]);
                        document.getElementById('imgGH').setAttribute('src', base)
                    });
                }
            }
        });
        //压缩图片算法
        function dealImage(path, obj, callback) {
            var img = new Image();
            img.src = path;
            img.onload = function () {
                var that = this;
                // 默认按比例压缩
                var w = that.width,
                h = that.height,
                scale = w / h;
               // w = obj.width || w;
              //  h = obj.height || (w / scale);
                var quality = 0.3; // 默认图片质量为0.7
                //生成canvas
                var canvas = document.createElement('canvas');
                var ctx = canvas.getContext('2d');
                // 创建属性节点
                var anw = document.createAttribute("width");
                anw.nodeValue = w;
                var anh = document.createAttribute("height");
                anh.nodeValue = h;
                canvas.setAttributeNode(anw);
                canvas.setAttributeNode(anh);
                ctx.drawImage(that, 0, 0, w, h);
                // 图像质量
                if (obj.quality && obj.quality <= 1 && obj.quality > 0) {
                    quality = obj.quality;
                }
                // quality值越小,所绘制出的图像越模糊
                var base64 = canvas.toDataURL('image/jpeg', quality);
                // 回调函数返回base64的值
                callback(base64);
            }
        }

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_陈陆亮

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值