layui在上传图片在前端处理图片压缩

有的人会遇到需要在前端代码处理图片压缩的问题,下面给大家分享怎么处理。

// 上传图片

var image_src

var IsImgDeal=false;

layui.upload.render({

    elem: "#{tag}{id}",

    url: sessionStorage.getItem('httpUrlPrefix') + '/upload/uploadImage',

    // dataType: 'text',

    // auto: false,

    // multiple: true,

    accept:"images",

    exts: 'jpg|png|jpeg',

    acceptMime:"image/jpeg,image/png",

    before: function (obj) {

        layer.msg("图片上传中...", { icon: 16, shade: 0.01 })

    },

    done: function(res){

         layer.msg(`<div style="display:flex;"><div class="tipsSuccess"></div>

                                               <div class="titleTips">提示

                                               </div>

                                             </div>

                                             <div class="context" ><br>上传成功!</div>`

            , {

                skin: 'success-class',

                time: 1000

            });

             layer.closeAll('loading'); //关闭loading

        console.log("sfafasfa",JSON.stringify(res))

        image_src = res.url

        IsImgDeal = false;

    },

    choose: function (obj) {

        obj.preview(function (index, file, result) {

            console.log("================>",file)

            let filename = file.name

            // console.log("================>",result)

            //临时存储二进制流

            $("#uploadnewImg-{id}").hide()

            $("#uploadexistimg-{id}").show()

            $("#uploadImg-{id}").attr("src", result);

        });

if (IsImgDeal) {

                        return;//图片处理过就直接上传

                    }

                    console.log("图片压缩开始处理");

                    var files = obj.pushFile();

                    var file_tar = null,index_tar = null;

                    for (var k in files) {

                        index_tar = k;

                        file_tar = files[k];

                        break;

                    }

                    

                    

                    //进行图片压缩,直接百度压缩方法

                    let reader = new FileReader();

                    var filename = file_tar.name;

                    

                    reader.readAsDataURL(file_tar);

                    

                    reader.onload = function () {

                        

                        let content = this.result; //图片的src,base64格式

                        let img = new Image();

                        img.src = content;

                        img.onload = function () { //图片加载完毕

                            

                            let canvas = document.createElement("canvas");

                            let ctx = canvas.getContext('2d');

                            

                            let width = Math.ceil(img.width*0.8);

                            let height = Math.ceil(img.height*0.8);

                            canvas.width = width;

                            canvas.height = height;

                            ctx.drawImage(img, 0, 0, width, height);//压缩图片尺寸

                            let dataURL = canvas.toDataURL("image/jpeg");//如果是需要质量压缩就补充参数

                            //将base64数据转化为文件对象

                            var arr = dataURL.split(','), mime = arr[0].match(/:(.*?);/)[1],

                                bstr = atob(arr[1]), n = bstr.length, u8arr = new Uint8Array(n);

                            while (n--) {

                                u8arr[n] = bstr.charCodeAt(n);

                            }

                            IsImgDeal = true;//设置标记

                            //如果有时差问题,后面setTimeout延时再执行,让原来的上传终止

                            obj.upload(index_tar, new File([new Blob([u8arr], { type: mime })], filename));//单独上传

                            

                            //uploadIns.upload();//重新启动全部文件上传

                        }

                    };

                   layer.load(); //上传loading

                    //停止原本的上传,如果多个文件,需要在读取完毕后将files里面的文件队列全删除。

                    return delete files[index_tar];

        

    },

});

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

加瓦程序设计师

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

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

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

打赏作者

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

抵扣说明:

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

余额充值