H5 压缩图片上传(pc端适用)支持png/jpg格式(其他格式都会转为png)
2016-05-25 13:09
931 查看
html代码: <pre name="code" class="html"><!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <script src="js/jquery.js"></script> <script src="js/jquery-ui.js"></script> <script src="js/upload/jquery.fileupload.js"></script> <script src="js/upload/preview.js"></script> </head> <body style="background:#000; color:#FFF"> <div> <input hidden="hidden" id="fileId" type="file" name="imgFile" accept="image/*" /> <div id="progress" class="overlay"/></div> </div> <div id="picId" title="点击选择图片" onclick="$('#fileId').click();"> <img src="addimg.jpg"> </div> <button type="button" onclick="uploadImage()">确定</button> </body> </html>
js:(设置宽高就压缩指定大小,不设置就原大小)
<script type="text/javascript"> //图片压缩 $('#fileId').fileupload({ dropZone:null, pasteZone:null, add: function (e, data) { if($.support.localPreview){ var file = data.files[0]; $(this).previewImg({ uploadFile: file, uploadData: data, divName:'picId', fileName:'picId', width: 118, height: 40, quality: 90, }); }else{ if (e.isDefaultPrevented()) { return false; } } }, }).prop('disabled', !$.support.fileInput).parent().addClass($.support.fileInput ? undefined : 'disabled'); function uploadImage() { alert($("#bigPreviewImgpicId").attr("src")); var img = $("#bigPreviewImgpicId").attr("src"); $.ajax({ type : "POST", url : "footerConfig.action?action=saveImg", data : { base64Data : img }, cache : false, success : function(data) { alert("上传成功"); }, error : function(XMLHttpRequest, textStatus, errorThrown) { alert("上传失败,请检查网络后重试"); } }); } </script>
preview.js(此处是将别人发给我参考代码的稍加修改,做成了兼容png格式图片,原地址不详。)
;(function ($) { "use strict"; $.support.localPreview = !!(window.FileReader && window.Image && document.createElement('canvas').getContext); var defaults = { uploadFile: null, uploadData: null, width: null, height: null, resizable: false, selectable: false, avatarParams: {}, padding:0, afterOpen: function(modal) { //do your stuff }, afterClose: function(modal) { //do your suff } }; var config = {}; var jcrop = null; var $this = new Object(); var methods = { init : function(options) { //alert(options.divName); var DivName=options.divName; var fileName=options.fileName; return this.each(function() { $this.uploader = $(this); $this = $.extend({}, $this, methods); config = $.extend({}, defaults, options); var reader = new FileReader(); var file = config.uploadFile; if(file == null){ $.error( 'uploadFile is not setted!' ); } reader.onload = function(e) { $this.compress(e.target.result, options.quality, file.type,options.width,options.height, function(compressedSrc){ var $img = $('<img>').attr("src", compressedSrc); $img.attr('id', 'bigPreviewImg'+fileName+''); $('#bigPreviewImg'+fileName).css({ width:'300px', }); $('#'+DivName).empty().append($img); }); }, reader.readAsDataURL(file); }); }, compress: function(src, quality, mime_type,width,height, callback){ var image = new Image(); image.src = src; image.onload = function () { // binding onload event var imgWidth = image.naturalWidth; var imgHeight = image.naturalHeight; var canvas = document.createElement('canvas'); /* if(imgHeight > 400) { imgWidth *= 400 / imgHeight; imgHeight = 400; } */ var ctx = canvas.getContext("2d"); ctx.clearRect(0, 0, canvas.width, canvas.height); canvas.width = (undefined==width)?imgWidth:width; canvas.height = (undefined==height)?imgHeight:height; ctx.drawImage(image, 0, 0, canvas.width, canvas.height); mime_type = (undefined==mime_type) ? "image/jpeg" : mime_type; quality = (undefined==quality)?"100" : quality; var newImageData = canvas.toDataURL(mime_type, quality/100); if(undefined !== callback){ callback(newImageData); } }; }, }; $.fn.previewImg = function(method) { if ( methods[method] ) { return methods[ method ].apply( this, Array.prototype.slice.call( arguments, 1 )); } else if ( typeof method === 'object' || ! method ) { return methods.init.apply( this, arguments ); } else { $.error( 'Method ' + method + ' does not exist' ); } }; })(jQuery);
样式:
上传前:
压缩后:(注:此时只是压缩后图片的现实,并没有上传到服务器。我是将得到的base64传到后台,在后台解析上传。后台操作此处没有记录)
代码下载地址:http://download.csdn.net/detail/limyrain/9530715
相关文章推荐
- Extjs4.0 最新最全视频教程
- Javascript中toFixed方法的改进
- 5个常见可用性错误和解决方案
- HTML5中在客户端验证文件上传的大小
- html5 web数据存储
- js数组实现图片轮播
- 页面元素查找之Selectors API
- 使用ajax实现用户登录验证(升级版)
- Canvas 在高清屏下绘制图片变模糊的解决方法
- 关于前端的思考与感悟
- 新时代编辑神器:Atom
- rem : web app适配的秘密武器
- js可突破windows弹退效果代码
- JSP脚本漏洞面面观
- 使用BAT一句话命令实现快速合并JS、CSS
- js显示当前星期的起止日期的脚本
- 爆炸式的JS圆形浮动菜单特效代码
- js select常用操作控制代码
- JS实现不使用图片仿Windows右键菜单效果代码