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];
    },
});
相关文章
|
前端开发
后端返回图片二进制流,前端转base64
本文介绍了如何将后端返回的图片二进制流转换为Base64格式,以便在前端使用。通过在axios请求中设置`responseType`为`arraybuffer`,然后使用`btoa`和`Uint8Array`进行转换。
1180 5
|
编解码 前端开发 JavaScript
.NET_web前端框架_layui_栅格布局
【8月更文挑战第27天】
298 4
|
存储 前端开发 JavaScript
🚀前端轻松实现网页内容转换:一键复制、保存图片及生成 Markdown
在现代前端开发中,提升用户的交互体验至关重要。本文将详细介绍如何使用 HTML2Canvas 和 Turndown 两个强大的 JavaScript 库,实现将网页选中文本转化为图片并保存或复制到剪贴板,或将内容转换为 Markdown 格式。文章包含核心代码实现、技术细节和功能拓展方向,为开发者提供了一个轻量级的解决方案,提升用户体验。
1560 68
|
前端开发 程序员 API
前端|基于 Layui 实现动态搜索选择框
网页端实现动态搜索选择框,要求下拉选项列表能根据用户输入内容动态刷新,最终提交的值必须是由选项列表中点选的。
636 3
|
JavaScript 前端开发 Python
django接收前端vue传输的formData图片数据
django接收前端vue传输的formData图片数据
342 4
|
前端开发 JavaScript 编译器
不走弯路,纯前端如何把图片导出成视频!
【10月更文挑战第3天】不走弯路,纯前端如何把图片导出成视频!
987 3
|
前端开发 小程序 Java
java基础:map遍历使用;java使用 Patten 和Matches 进行正则匹配;后端传到前端展示图片三种情况,并保存到手机
这篇文章介绍了Java中Map的遍历方法、使用Pattern和matches进行正则表达式匹配,以及后端向前端传输图片并保存到手机的三种情况。
898 1
|
JavaScript 前端开发 编译器
吐血整理:纯前端如何实现批量dom转图片,并下载成压缩包
【10月更文挑战第2天】吐血整理:纯前端如何实现批量dom转图片,并下载成压缩包
402 2
|
前端开发 Windows
【前端web入门第一天】02 HTML图片标签 超链接标签 音频标签 视频标签
本文档详细介绍了HTML中的图片、超链接、音频和视频标签的使用方法。首先讲解了`&lt;img&gt;`标签的基本用法及其属性,包括如何使用相对路径和绝对路径。接着介绍了`&lt;a&gt;`标签,用于创建超链接,并展示了如何设置目标页面打开方式。最后,文档还涵盖了如何在网页中嵌入音频和视频文件,包括简化写法及常用属性。
470 13
|
前端开发
前端之图片操作
前端之图片操作

热门文章

最新文章

  • 1
    前端如何存储数据:Cookie、LocalStorage 与 SessionStorage 全面解析
    988
  • 2
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(九):强势分析Animation动画各类参数;从播放时间、播放方式、播放次数、播放方向、播放状态等多个方面,完全了解CSS3 Animation
    421
  • 3
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(八):学习transition过渡属性;本文学习property模拟、duration过渡时间指定、delay时间延迟 等多个参数
    330
  • 4
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(七):学习ransform属性;本文学习 rotate旋转、scale缩放、skew扭曲、tanslate移动、matrix矩阵 多个参数
    314
  • 5
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(六):全方面分析css的Flex布局,从纵、横两个坐标开始进行居中、两端等元素分布模式;刨析元素间隔、排序模式等
    426
  • 6
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(五):背景属性;float浮动和position定位;详细分析相对、绝对、固定三种定位方式;使用浮动并清除浮动副作用
    609
  • 7
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(四):元素盒子模型;详细分析边框属性、盒子外边距
    789
  • 8
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(三):元素继承关系、层叠样式规则、字体属性、文本属性;针对字体和文本作样式修改
    216
  • 9
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(二):CSS伪类:UI伪类、结构化伪类;通过伪类获得子元素的第n个元素;创建一个伪元素展示在页面中;获得最后一个元素;处理聚焦元素的样式
    635
  • 10
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(一):CSS发展史;CSS样式表的引入;CSS选择器使用,附带案例介绍
    386