`
sundoctor
  • 浏览: 323793 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

jquery 图片上传前预览,支持ie6+、firefox、chrome

 
阅读更多
项目需要图片上传前预览,网上找了他人写的一个jquery插件,因为作者写的时间较早,浏览器的更新换代很快,我改改了,增强浏览器版本兼容性,支持ie6+、firefox、chrome。

插件代码:
//说明:图片上传预览插件
//上传的时候可以生成固定宽高范围内的等比例缩放图

//参数设置:
//width                     存放图片固定大小容器的宽
//height                    存放图片固定大小容器的高
//imgDiv                    页面DIV的JQuery的id
//maxSize					图片大小最大限制(K)
//imgType                   数组后缀名
//**********************图片上传预览插件*************************
(function($) {
    jQuery.fn.extend({
        uploadPreview: function(opts) {
            opts = jQuery.extend({
                width: 0,
                height: 0,
                imgDiv: "#imgDiv",
                maxSize:300,
                imgType: ["gif", "jpeg", "jpg", "bmp", "png"],
                callback: function() { return false; }
            }, opts || {});
            //var _self = this;
            var _this = $(this);
            var imgDiv = $(opts.imgDiv);
            imgDiv.width(opts.width);
            imgDiv.height(opts.height);
             
            var version = parseInt($.browser.version,10);
            
            autoScaling = function() {
            	
                if (version == 7 || version == 8  || version == 9) imgDiv.get(0).filters.item("DXImageTransform.Microsoft.AlphaImageLoader").sizingMethod = "image";
                var img_width = imgDiv.width();
                var img_height = imgDiv.height();
                if (img_width > 0 && img_height > 0) {
                    var rate = (opts.width / img_width < opts.height / img_height) ? opts.width / img_width : opts.height / img_height;
                    if (rate <= 1) {
                        if (version == 7 || version == 8  || version == 9) imgDiv.get(0).filters.item("DXImageTransform.Microsoft.AlphaImageLoader").sizingMethod = "scale";
                        imgDiv.width(img_width * rate);
                        imgDiv.height(img_height * rate);
                    } else {
                        imgDiv.width(img_width);
                        imgDiv.height(img_height);
                    }
                    var left = (opts.width - imgDiv.width()) * 0.5;
                    var top = (opts.height - imgDiv.height()) * 0.5;
                    imgDiv.css({ "margin-left": left, "margin-top": top });
                    imgDiv.show();
                }
            },
            
            createImg = function(){
        		imgDiv.html('');
        		
                var img = $("<img />");
                imgDiv.replaceWith(img);
                imgDiv = img;
            },
   
            _this.change(function() {
            	
                if (this.value) {
                    if (!RegExp("\.(" + opts.imgType.join("|") + ")$", "i").test(this.value.toLowerCase())) {
                        alert("图片类型必须是" + opts.imgType.join(",") + "中的一种");
                        this.value = "";
                        return false;
                    }
                    imgDiv.hide();
                    if ($.browser.msie && version < 10) {
                    	
                        if (version == 6) {
                        	
                            var image = new Image();
                            image.onload = function(){
                                if( (image.fileSize/1024) > opts.maxSize) {
                                	alert('图片大小不能超过'+opts.maxSize+'K');
                                	return false;
                                }
                            }
                            image.src = 'file:///' + this.value;

                            createImg();
                            imgDiv.attr('src', image.src);
                            autoScaling();
                        }  else {
                        	
                        	this.select();
                        	var img = document.selection.createRange().text;
                            var image = new Image();
                            image.onload = function(){
                                if( (image.fileSize/1024) > opts.maxSize) {
                                	alert('图片大小不能超过'+opts.maxSize+'K');
                                	return false;
                                }
                            }
                            image.src = img;                        	
                            
                        	imgDiv.html('');                        	
                            imgDiv.css({ filter: "progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod=image)" });
                            imgDiv.get(0).filters.item("DXImageTransform.Microsoft.AlphaImageLoader").sizingMethod = "image";                           
                            
                            try {
                                imgDiv.get(0).filters.item('DXImageTransform.Microsoft.AlphaImageLoader').src = img;
                            } catch (e) {
                                alert("无效的图片文件!");
                                return;
                            }                            
                            
                            setTimeout("autoScaling()", 100);                            
                        }
                    }
                    else {
                    	try{   
                    		var file = null;
                    		var size = 0;
                    		if(this.files && this.files[0] ){
                    			file = this.files[0]; 
                    			size = file.size;
                    		}else if(this.files && this.files.item(0)) {                    			
                    			file = this.files.item(0);   
                    			size = file.fileSize;
                    	    } 
 
                    		if((size/1024) > opts.maxSize){
                    			alert('图片大小不能超过'+opts.maxSize+'K');
                            	return false;
                			}
                			
                			createImg();
                    		
                    		//Firefox 因安全性问题已无法直接通过input[file].value 获取完整的文件路径
                    		try{
                    			//Firefox7.0 以下                    			
                    			imgDiv.attr('src', file.getAsDataURL());
                    		}catch(e){
                    			//Firefox8.0以上                    			
                    			imgDiv.attr('src', window.URL.createObjectURL(file));
                    		}
                    		
	                        imgDiv.css({ "vertical-align": "middle" });
	                        setTimeout("autoScaling()", 100);
                    	}catch(e){                    		
                    		//支持html5的浏览器,比如高版本的firefox、chrome、ie10
                    		if (this.files && this.files[0]) {                    		
                    			if((this.files[0].size/1024) > opts.maxSize){
                                	alert('图片大小不能超过'+opts.maxSize+'K');
                                	return false;
                    			}
                    			
                    	        var reader = new FileReader(); 
                    	        reader.onload = function (e) {                      	        	
                    	        	imgDiv.attr('src', e.target.result);  
                    	        };
                    	        reader.readAsDataURL(this.files[0]); 
                    	        setTimeout("autoScaling()", 100);
                    	    }  
                    	};
                    }
                }
            });
        }
    });
})(jQuery);


插件使用:
<div style="width:90px; height:110px; overflow:hidden; border:1px solid red;">
<div id="imgDiv"> </div>
</div>
<br>
<input type="file" value="上传文件">

<script>
$(document).ready(function() {	
     $("input").uploadPreview({ width: 90, height: 110, imgDiv: "#imgDiv"});
});
</script>
分享到:
评论
3 楼 u012920018 2015-12-31  
 
2 楼 icolorfulday 2013-12-15  
IE10不兼容
1 楼 rj0721clp 2013-10-09  
按照你的方法,我的IE9怎么就显示不了图片呢

相关推荐

    jquery file上传预览本地图片支持IE6\7\8\9\10 chrome 火狐

    jquery file上传预览本地图片支持IE6\7\8\9\10 chrome 火狐 网上有很多关于 file上传预览本地图片开源角本但都对支持到IE6\7\8,而且chrome 火狐最新版本也有问题,自己动手丰衣足食。分享给给大家。

    jQuery 图片上传预览

    jquery图片上传预览插件,通过 IE6、7、8、9 , chrome, firefox测试 测试时采用的是jquery1.7.1,未经过其它jquery版本测试。 使用时,您可以根据需要,随意修改! --------------------------------- =====更新...

    jquery图片上传预览插件

    jquery图片上传预览插件,通过 IE6、7、8、9 , chrome, firefox测试,测试时采用的是jquery1.7.1,未经过其它jquery版本测试。 使用时,您可以根据需要,随意修改!

    jQuery+html5图片上传并裁切预览

    jquery+html5实现图片上传并裁切功能,上传图片前可预览裁切效果,显示裁切框,应用jquery.Jcrop.min.js实现,兼容性方面,适用浏览器:FireFox、Chrome、Opera. 不支持IE8、360、Safari、傲游、搜狗、世界之窗。本...

    jquery图片上传预览

    jquery图片上传预览插件,通过 IE6、7、8、9 , chrome, firefox测试,测试时采用的是jquery1.7.1,未经过其它jquery版本测试。 使用时,您可以根据需要,随意修改! PS:这个版本修改上一个版本在IE6、7下的一个...

    jQuery html5图片上传并裁切预览 v1.0.zip

    jquery html5实现图片上传并裁切功能,上传图片前可预览裁切效果,显示裁切框,应用jquery.Jcrop.min.js实现,兼容性方面,适用浏览器:FireFox、Chrome、Opera. 不支持IE8、360、Safari、傲游、搜狗、世界之窗。本...

    jQueryhtml5图片上传并裁切预览php版v1.0

    jquery html5实现图片上传并裁切功能,上传图片前可预览裁切效果,显示裁切框,应用jquery.Jcrop.min.js实现,兼容性方面,适用浏览器:FireFox、Chrome、Opera. 不支持IE8、360、Safari、傲游、搜狗、世界之窗。本...

    jQuery image cropper图片剪裁插件

    jQuery image cropper图片剪裁插件,Slw系列插件,非常精简,兼容IE6,7,8,9,10,11+, Chrome, Edge, Firefox, Safari, Opera,支持对图片选取,剪裁,base64, 预览

    fileUpload:一个用于ajax图片上传jquery插件

    fileUpload v0.0.1一个用于ajax图片上传jquery插件支持的浏览器版本:Firefox,UC,搜狗,360浏览器,Safari4+,Chrome,IOS版Safari和安卓版Webkit,IE9+插件用法:1、下载本插件(git clone :hugzh/fileUpload.git...

    jQuery上传图片裁剪区域并保存代码

    jQuery上传图片裁剪区域并保存代码,适用浏览器:360、FireFox、Chrome、Opera、傲游、搜狗、世界之窗. 不支持Safari、IE8及以下浏览器。

    jQuery插件imgPreviewQs实现上传图片预览

    上传图片预览,支持IE6、IE7、IE8、IE9、IE10、IE11。 火狐、Chrome 具体没有测试,但是高版本都支持。 imgPreviewQs.js /*! 依赖 jQuery 1.5.2 (c) 2016 license: ...

    xZoom:jQuery Zoom Gallery插件

    支持IE6 +,Chrome,FireFox,Opera,Safari,Android,iOS 支持响应输出。 有一个API与其他有用的插件集成,例如 , 和 。安装使用以下方法之一: git clone git@github....

    MPreview:Word,PPT 文档预览js组件(图片预览js组件)

    支持IE7+,FireFox,Chrome。 初始化调用插件的外容器,只需设置宽高样式即可,无需其它设置。 因插件是刚开始阶段,一些功能并未能完善全,如:放大,缩小功能。 插件中一些滚动的计算是硬算出来的(勿喷)。 插件...

    jQuery新浪微博头像裁切预览代码

    上传图片 裁剪 适用浏览器:IE8、360、FireFox、Chrome、Safari、Opera、傲游、搜狗、世界之窗.

    Ajax PHP Image Cut PHP图片裁切

    Ajax PHP Image Cut PHP图片裁切,图片裁切之生成缩略图部分和预览...本图片裁切在 IE11 , FireFox 5 , Chrome55下测试通过(Opear 下有一点点问题,剪切框的初始位置不对,这个问题研究至今一直没解决掉,抱歉!)。

    html+xml+js语言切换插件

    非常不错的轻量级语言切换插件,语言资源统一放在xml文档中,基于jquery,扩展性很...兼容IE、firefox 、chrome等浏览器,注意在预览效果时,如直接打开文件预览请用firefox浏览器,该插件支持所有浏览器的http方式预览

    xheditor v1.0.0 rc2 build 100401

    xhEditor是一个基于jQuery开发的简单迷你并且高效的可视化XHTML编辑器,基于网络访问并且兼容IE 6.0+,Firefox 3.0+,Opera 9.6+,Chrome 1.0+,Safari 3.22+。 xhEditor is a simple,small,fast WYSWYG(What You See ...

    jevictek:讯飞皆成--后端UI界面

    jevictek-ui 讯飞皆成--后端UI界面 ...本框架支持浏览器 IE7+、Chrome、FireFox、Safari;在使用中难免会出现意料之外的Bug,您反馈于我们,我们将用心处理。 采用 Require.js 来编写 JS 模块,一定

    HTML5 jQuery开发的CSS圆角生成工具.rar

    HTML5 jQuery开发的CSS圆角生成工具,生成圆角CSS代码的一个小工个,运行于IE9、Chrome、火狐、Opera或Safari浏览器中。可适时预览所生成的圆角效果,可选择生成的代码是否支持 WebKit Gecko CSS3等内核,对前端...

Global site tag (gtag.js) - Google Analytics