多张图片上传并压缩

前面已经写了单张图片上传压缩的文章,这里简单拓展下多张图片的,思路还是一样的,只不过多了一些循环,所以不多赘述,直接贴代码。

dom结构如下:

<label for="imgFile">请上传图片:</label><input id="imgFile" type="file" multiple accept="image/jpeg,image/png,image/gif" />
<span id="progress"></span> <!-- 上传本地进度 -->
<div id="imgBox1"></div>    <!-- 展示用图片盒子 -->
<div id="btnBox">
    <button id="upBtn">上传</button>
</div>
<div id="imgBox2"></div>    <!-- 展示myData用图片盒子 -->
<canvas id="myCanvas"></canvas>

js代码如下:

<script src="js/jquery.min.js"></script>
<script>
    // ele 上传input按钮
    function imgUp(ele){
        var dataList = [],btnBox = document.getElementById(‘btnBox‘);
        // 获取fileList 需要注意的是fileList是一个类数组的对象
        var fileList = ele[0].files;
        if(fileList){
            for(var i = 0,file;file = fileList[i];i++){
                    // 实例化fileReader对象
                    var reader = new FileReader();
                    // 调用readAsDataURL方法
                    reader.readAsDataURL(file);
                    reader.onload = function(e){
                        // 获取图片base64编码
                        var result = this.result;
                        // 给压缩前图片赋值src
                        var exImg =new Image();
                        exImg.src = result;
                        $("#imgBox1").append(exImg);
                        var total = fileList.length;
                        var now = $(‘#imgBox1‘).children().length;
                        $(‘#progress‘).html("当前进度:"+now+‘/‘+total);
                        if(now == total){
                            $(‘#upBtn‘).css(‘display‘,‘block‘);
                        }
                        var img = new Image();
                        img.src = result;
                        // 获取上传图片的文件大小 kb
                        var imgSize = (e.total)/1024;
                        if(imgSize<1000){
                            dataList.push(result);
                        }else{
                            img.onload = function(){
                                // 图片原始尺寸,压缩后最大宽高,canvas宽高,尺寸压缩比例
                                var w = this.width,h = this.height,maxWidth = 800,maxHeight = 600,canW,canH,proportion;
                                // 判断图片尺寸是否大于限定尺寸
                                if(w>maxWidth||h>maxHeight){
                                    if(w>h){
                                        // 图片是宽大于高的
                                            canW = maxWidth;
                                            proportion = w/maxWidth;
                                            canH = h/proportion;
                                    }else if(w<h){
                                        // 图片是宽大于高的
                                            canH = maxHeight;
                                            proportion = h/maxHeight;
                                            canW = w/proportion;
                                    }
                                }else{
                                    canW = w;
                                    canH = h;
                                };
                                canvas = document.getElementById(‘myCanvas‘),
                                ctx = canvas.getContext(‘2d‘);
                                canvas.width = canW;
                                canvas.height = canH;
                                ctx.drawImage(img, 0, 0, canW,canH);
                                var result = canvas.toDataURL("image/jpeg",0.9);
                                dataList.push(result);
                            };
                        }
                    };
            };
        }else{
            return false;
        }
        return dataList;
    };

    var myData = [];
    // 选择图片
    $(‘#imgFile‘).change(function(){
        myData = imgUp($(‘#imgFile‘));
    });
    var upBtn = document.getElementById(‘upBtn‘);
    // 上传按钮点击
    upBtn.onclick = function(){
        console.log(myData);
        for(var i in myData){
            var img = $("<img src="+myData[i]+" />")
            $("#imgBox2").append(img);
        }
    };
</script>

如有表述不准确之处,欢迎指正,欢迎补充,感谢阅读。

原文地址:http://www.cnblogs.com/wangzhenyu666/p/8110396.html

时间: 2024-10-13 15:52:29

多张图片上传并压缩的相关文章

spring mvc 图片上传,图片压缩、跨域解决、 按天生成目录 ,删除,限制为图片代码等相关配置

spring mvc 图片上传,跨域解决 按天生成目录 ,删除,限制为图片代码,等相关配置 fs.root=data/ #fs.root=/home/dev/fs/ #fs.root=D:/fs/ #fs.domains=182=http://172.16.100.182:18080,localhost=http://localhost:8080 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE be

多张图片上传功能

今天闲着没事,把之前的多张图片上传代码整理了下. 页面主要代码: 1 <div class="upBox upBox2"> 2 <div class="d1"> 3 <a class="redA1 rightA" href="javascript:choosePhotos();" id="continue_add_button" style="display:none

5.post上传和压缩、插件模拟请求

gzip gzip一种压缩方式,或者是文件形式,它主要用于网络传输数据的压缩 gzip压缩好不好用 浏览器:网速一定.内容越小.请求响应的速度是不是更快 手机server:返回数据类型是json/xml->文本-->压缩率会很高. gzip执行流程 //1. 告知服务器.客户端支持gzip解压 * get.addHeader("Accept-Encoding", "gzip"); //2. 根据响应头得知服务器知否进行了gzip压缩 * Header[]

微信小程序多张图片上传

微信小程序上传图片每次只能上传一张,所有很多朋友就会问想要多张图片上传怎么办? 首先,我们来看一看wx.chooseImage(object)和wx.uploadFile(OBJECT)这两个个api 示例代码是这样的: wx.chooseImage({ success: function(res) { var tempFilePaths = res.tempFilePaths wx.uploadFile({ url: 'http://example.weixin.qq.com/upload',

多张图片上传简单示例

说是原创,其实也是参考了众多网上的贴子,非常感谢那些无私奉献的前辈们! 这个项目在要用到fileupload包及相关的io包(我上传到网上了,大家可以免费下载), 另外也可以用struts2包,为了省事我把整个struts2-core-2.3.24.1的包都导进项目里了,该包里面包含了上传用到的所有包. struts2包可以从官网上下载:http://struts.apache.org/download.cgi#struts23241 1.上传多个图片是要注意 第一:<form id="f

nodejs-使用multer实现多张图片上传,express搭建脚手架

nodejs-使用multer实现多张图片上传,express搭建脚手架 在工作中,我们经常会看到用户有多张图片上传,并且预览展示的需求.那么在具体实现中又该怎么做呢? 本实例需要nodejs基础,本实例尽可能的在代码中实现了解读,如有疑惑点,欢迎提问.但是提问之前,希望你能先自行尝试解决,锻炼解决问题的能力. 首先使用express脚手架生成,并且安装依赖 express --ejsnpm i 在routes文件夹中建立/api/v1/img.js,在app.js中写入代码引入img.js,安

上传 Zip 压缩档并即时解压缩文件保存到 Blob

Upload Zip file and unpack on the fly to Windows Azure Blob Upload Zip file and unpack on the fly to Windows Azure Blob 为求方便(懒惰的做法XD),我直接借用小朱在 边做边学 Windows Azure 应用程序开发基础 Part 2:开发 BLOB.Table 与 Queue 应用程序 一文中的例子来改写. 如图中红色框框:其中最大的不同是使用 DotNetZip 这个组件以

vuejs开发组件分享之H5图片上传、压缩及拍照旋转的问题处理

一.前言 三年.net开发转前端已经四个月了,前端主要用webpack+vue,由于后端转过来的,前端不够系统,希望分享下开发心得与园友一起学习. 图片的上传之前都是用的插件(ajaxupload),或者传统上传图片的方式,各有利弊:插件的问题是依赖jq并且会使系统比较臃肿,还有传统的web开发模式 前后端偶尔在一起及对用户体验要求低,现在公司采用webpack+vue+restfullApi开发模式 前后端完全分离,遵从高内聚,低偶尔的原则,开发人员各司其职,一则提升开发效率(从长期来看,短期

图片上传前压缩 lrz库

之前手机微信端的项目因为图片太大导致体验十分不流畅,后来采用把上传的图片统一压缩大小后解了燃眉之急. 但这个方法的遗憾就是得等到图片上传后在服务器端压缩,用户如果上传比较大的图片耗时太大,而且也耗流量. 关键是在用户上传前就把图片压缩了,如今找到了解决方法: 用了lrz这个库,http://www.jq22.com/jquery-info3419,感谢这个地址 平常手机照片2M的图一般能压缩到150kb左右,效果明显 首先引入三个库文件 <script type="text/javascr