做web的同学们经常会碰到客户上传图片将网页内容区撑破了的情况,下面就这个问题我们一种如何使用js处理这个问题的方法,具体思路就是在js判断客户端的图片下载完毕之后适时的对该图片的宽度或者高度做一些处理,js处理图片主要是利用js中Image对象,通过 onload 事件和 onreadystatechange 来进行判断。 (1)第一中方法,通过onload事件,比如: 复制代码 代码如下: <script type="text/javascript"> var obj=new Image(); obj.src="http://www.phpernote.com/uploadfiles/editor/201107240502201179.jpg"; obj.onload=function(){ alert('图片的宽度为:'+obj.width+';图片的高度为:'+obj.height); document.getElementById("mypic").innnerHTML="<img src='"+this.src+"' />"; } </script> <div id="mypic">onloading……</div> (2)第二种方法,使用 onreadystatechange 来判断 复制代码 代码如下: <script type="text/javascript"> var obj=new Image(); obj.src="http://www.phpernote.com/uploadfiles/editor/201107240502201179.jpg"; obj.onreadystatechange=function(){ if(this.readyState=="complete"){ alert('图片的宽度为:'+obj.width+';图片的高度为:'+obj.height); document.getElementById("mypic").innnerHTML="<img src='"+this.src+"' />"; } } </script> <div id="mypic">onloading……</div>
详细出处参考:http://www.jb51.net/article/35385.htm 在动态站点上经常需要上传自己的图片,而这些图片的大小是未知的,在显示成缩略图的时候必须进行按比例的缩放才能美观地显示。以最近做的golf网站(http://www.changligolfsales.com)做例子。 该网站需要上传高尔夫产品图片,并以缩略图显示在列表上,站点服务器支持Asp,但不支持aspjpeg之类的生成缩略图组件,所以将上传的图片直接显示成缩略图,就需要按比例缩放了,前提是要获取图片的长宽,第一个想到的方法是在上传的时候通过ADODB.STREAM对象读取图片的长宽信息保存在数据库并在页面生成的时候读取出来计算比例。这个方法明显的缺点是显示每张图片都要在服务器读取数据并计算,消耗资源多了也加上了页面打开时延。 而第二个方法使用Javascript是将计算量转移到了客户端。 原理是在页面载入完成后(onload触发)在客户端使用Javascript读取每张图片的大小并进行缩放。 //将imageDest图片的大小按比例缩放,适合显示在宽W和高H的区域内 function ResizeImage(imageDest, W, H) { //显示框宽度W,高度H var image = new Image(); image.src = imageDest.src; if(image.width>0 && image.height>0) { //比较纵横比 if(image.width/image.height >= W/H)//相对显示框:宽>高 { if(image.width > W) //宽度大于显示框宽度W,应压缩高度 { imageDest.width = W; imageDest.height = (image.height*W)/image.width; } else //宽度少于或等于显示框宽度W,图片完全显示 { imageDest.width = image.width; imageDest.height = image.height; } } else//同理 { if(image.height > H) { imageDest.height = H; imageDest.width = (image.width*H)/image.height; } else { imageDest.width = image.width; imageDest.height = image.height; } } } } 以上函数对图片进行缩放。 golf网站的每张缩略图的id都设为imgProductItem,如:<img src="<%= imgPath %>" name="imgProductItem" width="150" height="113" border="0" id="imgProductItem" />,里面的150x113就是显示框的最大尺寸,因为处理函数必须在onload完成时运行,所以这里必须设置一定的大小,要不整个页面在载入图片过程中出现排版错乱,到运行了RsizeAllImageById才恢复正常。 添加一个批量操作的函数: //将页面内所有指定id的图片按比例缩放 function RsizeAllImageById(id, W, H) { var imgs = document.getElementsByTagName("img"); for(var i=0; i<imgs.length; i++) { if(imgs[i].id == id) { ResizeImage(imgs[i], W, H); } } } 这样在页面的body添加:<body onload="javascript:init();">;在head区添加: <script language="javascript"> <!-- function init() { RsizeAllImageById("imgProductItem", 150, 113); } --> </script> 就可以将所有图片显示成缩略图了。 还可以用CSS 图片属性:max-width:500px;max-height:300px |