移动端上传预览压缩图片

一、功能和问题解析

  1. 图片上传,在移动端可以使用input为file,通过base64上传图片

  2. 移动端file有兼容上的问题

  3. 移动端端图片都是几M,必须压缩

二、功能的实现和问题的解决

  1. 初始页面布局
    .add{        width: 100%;        height: 100%;        text-align: center;        border: 1px solid # ccc;    }    .img-box{        position: relative;        display: inline-block;        margin: 10px 0px;        width: 80px;        height: 80px;        color: # 999;    }    .upload{        position: absolute;        top: 0;        left: 0;        padding: 0;        width: 100%;        height: 100%;        opacity: 0;    }    .add span{        display: inline-block;        margin-top: 28px;    }    img{        display: none;        width: 100%;        height: 100%;    }    照片        +![超级产品经理](" >
  1. 移动端file有兼容上的问题的解决

这样可以解决点击调用相册的问题

  1. 上传图片、预览并且图片压缩

  2. 方法为:把图片变成base64位,使用canvas进行压缩,不过在ios中图片大于2000000像素就无法使用canvas压缩,就需要瓦片绘制。

            var upload = document.getElementById('upload');//上传            var pic = document.getElementById('pic');//图片            var add = document.getElementById('add');//空图片样式            var maxsize = 100* 1024;//超过100k进行压缩            if (typeof(FileReader) === 'undefined') {                alert("抱歉,你的浏览器不支持 FileReader,请使用现代浏览器操作!");                upload.setAttribute('disabled', 'disabled');            }            upload.addEventListener('change', function(){                add.css('display')=='block'&&add.css("display","none");                pic.css('display')=='none'&&pic.css("display","block");                var file = this.files[0],                    result = '',                    reader = new FileReader();                if(file){                    pic.setAttribute('src','loading.gif');                }                reader.readAsDataURL(file);                reader.onload = function(e){                    var v = this.result;//获取到base64的图片                    img = new Image();                    img.src = v;                    //大于100k图片进行压缩                    if(v.length>=maxsize){                        img.onload = function(){                            pic.setAttribute('src',compress(img,95).src);                            ajax提交                        }                    }else{                        ajax提交                    }                }            }          //压缩函数 压缩成宽度为400px          function compress(source_img_obj, quality){            var area = source_img_obj.width*source_img_obj.height;            var cvs = document.createElement('canvas');            cvs.width = 400;            var value = source_img_obj.width/400;            var height = source_img_obj.height/value;            cvs.height = height;            var ctx = cvs.getContext("2d");            var version = common.browser();            //解决ios 图片大于2000000像素无法用drawImage的bug            if(area>2000000&&navigator.userAgent.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/)){                //瓦片绘制                var tCanvas = document.createElement("canvas");                var tctx = tCanvas.getContext("2d");                var count = Math.ceil(area/1000000);                tCanvas.height = height;                tCanvas.width =  400/count;                var canvas_width = 400/count;                var pic_width = source_img_obj.width/count;                var pic_height = source_img_obj.height;                for(var i=0;i<count;i++){                    tctx.drawImage(source_img_obj,i*pic_width,0,pic_width,pic_height,0,0,canvas_width,height);                    ctx.drawImage(tCanvas,i*canvas_width,0,canvas_width,height);                }            }else{                ctx.drawImage(source_img_obj,0,0,400,height);            }            var newImageData = cvs.toDataURL('image/jpeg',quality/100);            var result_image_obj = new Image();            result_image_obj.src = newImageData;            return result_image_obj;        }

第一次写文章如上有问题,我会继续完善

关键字:JavaScript, html

版权声明

本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处。如若内容有涉嫌抄袭侵权/违法违规/事实不符,请点击 举报 进行投诉反馈!

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部