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

简介: 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];
    },
});
相关文章
|
3月前
|
前端开发
后端返回图片二进制流,前端转base64
本文介绍了如何将后端返回的图片二进制流转换为Base64格式,以便在前端使用。通过在axios请求中设置`responseType`为`arraybuffer`,然后使用`btoa`和`Uint8Array`进行转换。
350 5
|
4月前
|
编解码 前端开发 JavaScript
.NET_web前端框架_layui_栅格布局
【8月更文挑战第27天】
52 4
|
2月前
|
存储 前端开发 JavaScript
🚀前端轻松实现网页内容转换:一键复制、保存图片及生成 Markdown
在现代前端开发中,提升用户的交互体验至关重要。本文将详细介绍如何使用 HTML2Canvas 和 Turndown 两个强大的 JavaScript 库,实现将网页选中文本转化为图片并保存或复制到剪贴板,或将内容转换为 Markdown 格式。文章包含核心代码实现、技术细节和功能拓展方向,为开发者提供了一个轻量级的解决方案,提升用户体验。
189 68
|
2月前
|
前端开发 程序员 API
前端|基于 Layui 实现动态搜索选择框
网页端实现动态搜索选择框,要求下拉选项列表能根据用户输入内容动态刷新,最终提交的值必须是由选项列表中点选的。
58 3
|
2月前
|
JavaScript 前端开发 Python
django接收前端vue传输的formData图片数据
django接收前端vue传输的formData图片数据
63 4
|
2月前
|
前端开发 小程序 Java
java基础:map遍历使用;java使用 Patten 和Matches 进行正则匹配;后端传到前端展示图片三种情况,并保存到手机
这篇文章介绍了Java中Map的遍历方法、使用Pattern和matches进行正则表达式匹配,以及后端向前端传输图片并保存到手机的三种情况。
27 1
|
2月前
|
前端开发 JavaScript 编译器
不走弯路,纯前端如何把图片导出成视频!
【10月更文挑战第3天】不走弯路,纯前端如何把图片导出成视频!
79 3
|
2月前
|
JavaScript 前端开发 编译器
吐血整理:纯前端如何实现批量dom转图片,并下载成压缩包
【10月更文挑战第2天】吐血整理:纯前端如何实现批量dom转图片,并下载成压缩包
61 2
|
3月前
|
前端开发
前端之图片操作
前端之图片操作
|
3月前
|
前端开发 JavaScript
node接收前端上传的图片,单文件、多文件同name、多文件不同name
本文介绍了在Node.js中使用multer模块接收前端上传的图片,包括单文件上传、多文件上传(同name和不同name)以及任意类型文件上传的方法。
103 0