JS获取上传图片的尺寸和大小

  最近工作要用到上传文件时限制上传图片大小这个功能,于是开始找类似的文章,看了很多东西,最后结果到也还可以。

  目前来说,谷歌,火狐,IE系列的7,8,9都已经过测试,可以获取到上传图片的原尺寸。接下来上代码。

 

第一种方法需要支持H5,思路是先将图片进行预览,然后不对图片进行任何渲染,包括CSS,JS,然后去获取预览图片的尺寸,当然,如果不想预览的话可以将img

标签隐藏掉。

<div>
	<div>
		<input type="text" disabled="disabled" value="建议规格(200*200)"/>
	</div>
	<form id="upload" action="<%=basePath%>tools?fileUpload" method="post" enctype="multipart/form-data">
		<input type="file" accept="image/*" id="file"/>
		<input type="button" value="提交" onclick="sub()"/>
	</form>
	<img id="preview" style="display:none" onload="img(this)"/>
</div>

这是页面的标签,ID为“preview”的img标签用于进行预览,以及在script块里面获取数据

<script type="text/javascript">
	$(function () {
		//调用插件进行预览
		$("#file").uploadPreview({ Img: "preview"});
	});
</script>
<script type="text/javascript">
	var imgWidth, imgHeight;
	//获取图片宽高
	function img(obj){
		//只支持谷歌火狐
		imgWidth = obj.width;
		imgHeight = obj.height;
		alert(obj.width);
		alert(obj.height);
	}
</script>
<script type="text/javascript">
	function sub(){
		var a = $("#file").get(0).files[0];
		//需支持H5
		//获取文件大小 单位B
		//console.log(a.size);
		//对图片的宽和高进行判断
		if(parseInt(imgWidth)>200||parseInt(imgHeight)>200){
			alert("图片规格超出200");
			return false;
		}
		//$("#upload").submit();
	}
</script>

这里用了三段代码进行,第一段就是对上传图片进行预览(写入img标签),第二段则是在img标签onload之后对获取图片本身,并获取图片的尺寸,第三段则是对图片的尺寸进行操作了。这个方法需要jquery和另一个js文件的支持,并且jquery的版本不能高于1.8,否则有些东西就无法使用。接下来就是IE系列了,IE系列则是比较麻烦,而且也是找了好久才找到的。哦对了,第一种方法好像可以支持IE最新的那款浏览器。

看代码。。。

<div>
	<h1>IE兼容测试</h1>
	<div id="preview_wrapper">
		<div id="preview_fake">
			<img id="preview" onload="onPreviewLoad(this)" border="1"/>
		</div>
	</div>
	<br/>
	<input id="upload_img" type="file" onchange="onUploadImgChange(this)"/>
	<br/>
	<img id="preview_size_fake" border="1"/>
</div>

这是页面的代码。

<script type="text/javascript">
function onUploadImgChange(sender){
	if( !sender.value.match( /.jpg|.gif|.png|.bmp/i ) ){
		alert('图片格式无效!');
		return false; 
	} 
	  
	var objPreview = document.getElementById( 'preview' ); 
	var objPreviewFake = document.getElementById( 'preview_fake' ); 
	var objPreviewSizeFake = document.getElementById( 'preview_size_fake' ); 
	
	if( sender.files && sender.files[0] ){
		objPreview.style.display = 'block'; 
		objPreview.style.width = 'auto'; 
		objPreview.style.height = 'auto'; 
		// Firefox 因安全性问题已无法直接通过 input[file].value 获取完整的文件路径 
		objPreview.src = sender.files[0].getAsDataURL();
	}else if( objPreviewFake.filters ){
		// IE7,IE8 在设置本地图片地址为 img.src 时出现莫名其妙的后果 
		//(相同环境有时能显示,有时不显示),因此只能用滤镜来解决 
		// IE7, IE8因安全性问题已无法直接通过 input[file].value 获取完整的文件路径 
		sender.select(); 
		var imgSrc = document.selection.createRange().text; 
		objPreviewFake.filters.item('DXImageTransform.Microsoft.AlphaImageLoader').src = imgSrc; 
		objPreviewSizeFake.filters.item('DXImageTransform.Microsoft.AlphaImageLoader').src = imgSrc; 
		autoSizePreview( objPreviewFake,  
		objPreviewSizeFake.offsetWidth, objPreviewSizeFake.offsetHeight ); 
		alert(objPreviewSizeFake.offsetWidth);     ----------------获取图片尺寸
		alert(objPreviewSizeFake.offsetHeight);     -------------- 获取图片尺寸
		objPreview.style.display = 'none'; 
	}
}

function onPreviewLoad(sender){ 
	autoSizePreview(sender, sender.offsetWidth, sender.offsetHeight );
}

function autoSizePreview( objPre, originalWidth, originalHeight ){ 
	var zoomParam = clacImgZoomParam( 300, 300, originalWidth, originalHeight ); 
	objPre.style.width = zoomParam.width + 'px';
	objPre.style.height = zoomParam.height + 'px';
	objPre.style.marginTop = zoomParam.top + 'px';
	objPre.style.marginLeft = zoomParam.left + 'px';
}

function clacImgZoomParam( maxWidth, maxHeight, width, height ){ 
	var param = { width:width, height:height, top:0, left:0 }; 
	if( width>maxWidth || height>maxHeight ){ 
		rateWidth = width / maxWidth; 
		rateHeight = height / maxHeight; 
		if( rateWidth > rateHeight ){ 
			param.width = maxWidth; 
			param.height = height / rateWidth; 
		}else{ 
			param.width = width / rateHeight; 
			param.height = maxHeight; 
		} 
	} 
	param.left = (maxWidth - param.width) / 2; 
	param.top = (maxHeight - param.height) / 2; 
	return param; 
}
</script>

这里面已经有一部分说明就不再细说,因为是自己先用来测试的,所以现在是实现了需求,具体的好多东西都还没有调整,比如IE获取到尺寸之后下面会多出一块空白。到目前为止第二种方法已经可以在IE的7,8,9三个版本上面获取到尺寸。

目前来说,卡在了IE10上面,这几天有些事情停止继续寻找办法了。等到找到方法之后会回来继续更新的。刚刚找了下发现博客并不支持上传文件,所以在这里把js文件的名字说一下。《《《《《《《《《《《《《《《《prelook.js》》》》》》》》》》》》》》》算不上原创,大多是从网上找来的,发在这里第一是留个纪念,第二是不定什么时候会再用到,做个保存。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值