H5 压缩图片上传(pc端适用)支持png/jpg格式(其他格式都会转为png)


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="点击选择图片" οnclick="$('#fileId').click();">
	<img src="addimg.jpg">
	</div>
    <button type="button" οnclick="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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值