天下第二博

Tian Xia The Second BO
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

图片自动适应

Posted on 2010-03-19 11:37  Nuke'Blog  阅读(846)  评论(0编辑  收藏  举报
图片自动适应大小是一个非常常用的功能,在进行制作的时候为了防止图片撑开容器而对图片的尺寸进行必要的控制,我们可以用CSS控制图片大小

1. css直接实现: img{max-width: 600px;} (IE6.0不支持此属性)
2. expression实现: img{width:expression(width>600?"600px":this.width+"px");}
3. 使用js.方法在onload事件中处理

昨天在和动漫网站开发人员的交流中发现一个问题,就是新闻详细页面中的图片不会自适应大小,这其实是一个非常常见的问题,目前我所知的解决办法有以下几种:
1. 用后台程序自动生成缩略图
2. 用css调用expression控制图片溢出后的大小;
(http://www.blog.edu.cn/user1/7987/archives/2006/1440861.shtml )
3. 用js写函数控制图片溢出后的大小;

其中后两种都是javascript在起作用,但是工作原理不同,css中调用expression可以解决这个问题,但是解决得不好,因为如果页面中图片一多,expression中的语句会不断被调用,非常耗费客户端内存,容易导致浏览器假死;而直接用javascript,在页面onload的时候就可以轻松解决这个问题,而且只调用一次,比起expression真是好得太多,程序很简单,下面是个简单的例子,我假设这个页面图片宽度不能超过200px,而实际图片宽度是550px:

 

<body>
<img  id="achome" src="http://image2.sina.com.cn/ent/y/2006-10-09/U1819P28T3D1276435F326DT20061009152013.jpg"

onload="SetImageMaxWH('achome',100,200)" />
</body>

<script>

function SetImageMaxWH(imageName,maxWidth,maxHeight)
{
    var imageArr=document.getElementById(imageName);
    var imageRate = imageArr.offsetWidth / imageArr.offsetHeight;   
   
    if(imageArr.offsetWidth > maxWidth)
    {
        imageArr.style.width=maxWidth + "px";
        imageArr.style.Height=maxWidth / imageRate + "px";
    }
   
    if(imageArr.offsetHeight > maxHeight)
    {
        imageArr.style.width = maxHeight * imageRate + "px";
        imageArr.style.Height = maxHeight + "px";
    }
}

</script>

 

 

1、简单的按比例缩放图片:

    设置好图片的宽度,图片就会自动缩放高度。比如:<img src="http://img93.pp.sohu.com/images/blog/2006/10/21/17/7/10efe26831e.jpg" onload='javascript:if(this.width>180)this.width=180' alt="用户头像" />

或者:

if(width>164){
   imgObj.width=164;
   imgObj.height=imgObj.height/(imgObj.width/164);
 }

    缺点就是不能控制高度。

2、完全可控制的按比例缩放图片:

    function ResizeImage(obj, MaxW, MaxH) {

if (obj != null) imageObject = obj;

var state=imageObject.readyState;

if(state!='complete') {

setTimeout("ResizeImage(null,"+MaxW+","+MaxH+")",50);

return;

}

var oldImage = new Image();

oldImage.src = imageObject.src;

var dW=oldImage.width;

var dH=oldImage.height;

if(dW>MaxW || dH>MaxH)

{ a=dW/MaxW; b=dH/MaxH; if(b>a) a=b; dW=dW/a; dH=dH/a; }

if(dW > 0 && dH > 0)

{ imageObject.width=dW; imageObject.height=dH; }

}

    调用方法:<img oncontextmenu="return false;" id="photoImg" name="photoImg" src="images/images.gif" onclick="openPicWin(this.src)" onload="ResizeImage(this,400,253);">

    ResizeImage(this,400,253)调用中 this是图片的路径,400和253分别是自己设定的宽度和高度。如果宽度<400,高度<253,图片就显示原来的大小。相反如果图片宽度>400图片宽度就缩小到400,这个时候如果高度>253图片会继续按比例缩放,直到进入到400和253的范围之内。