web网页按比例显示图片实现原理及js代码


Posted in Javascript onAugust 09, 2013

在动态站点上经常需要上传自己的图片,而这些图片的大小是未知的,在显示成缩略图的时候必须进行按比例的缩放才能美观地显示。以最近做的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区添加: <mce:script language="javascript"><!-- 
function init() 
{ 
RsizeAllImageById("imgProductItem", 150, 113); 
} 
// --></mce:script>

就可以将所有图片显示成缩略图了。
Javascript 相关文章推荐
在jquery中处理带有命名空间的XML数据
Jun 13 Javascript
jquery绑定原理 简单解析与实现代码分享
Sep 06 Javascript
javascript 实现简单的table排序及table操作练习
Dec 28 Javascript
3种不同的ContextMenu右键菜单实现代码
Nov 03 Javascript
select下拉框插件jquery.editable-select详解
Jan 22 Javascript
微信小程序搜索组件wxSearch实例详解
Jun 08 Javascript
在vue项目中使用md5加密的方法
Sep 14 Javascript
npm 常用命令详解(小结)
Jan 17 Javascript
微信小程序实现授权登录
May 15 Javascript
基于layui框架响应式布局的一些使用详解
Sep 16 Javascript
微信小程序 SOTER 生物认证DEMO 指纹识别功能
Dec 13 Javascript
jquery实现穿梭框功能
Jan 19 jQuery
html向js方法传递参数具体实现
Aug 08 #Javascript
js获取控件位置以及不同浏览器中的差别介绍
Aug 08 #Javascript
用JavaScript计算在UTF-8下存储字符串占用字节数
Aug 08 #Javascript
Jquery chosen动态设置值实例介绍
Aug 08 #Javascript
extjs两个tbar问题探讨
Aug 08 #Javascript
JS实现随机数生成算法示例代码
Aug 08 #Javascript
判断是否安装flash player及当前版本的JS代码
Aug 08 #Javascript
You might like
php echo 输出字符串函数详解
2010/05/13 PHP
php使用pdo连接报错Connection failed SQLSTATE的解决方法
2014/12/15 PHP
php实现数组中索引关联数据转换成json对象的方法
2015/07/08 PHP
IE autocomplete internet explorer's autocomplete
2007/06/30 Javascript
js工具方法弹出蒙版
2013/05/08 Javascript
js禁止页面刷新禁止用F5键刷新禁止右键的示例代码
2013/09/23 Javascript
javascript实现文本域写入字符时限定字数
2014/02/12 Javascript
javascript中html字符串转化为jquery dom对象的方法
2015/08/27 Javascript
js如何打印object对象
2015/10/16 Javascript
ES6记录异步函数的执行时间详解
2016/08/31 Javascript
DropDownList实现可输入可选择(两种版本可选)
2016/12/07 Javascript
JavaScript实现设置默认日期范围为最近40天的方法分析
2017/07/12 Javascript
JavaScript实现简单评论功能
2017/08/17 Javascript
[45:50]完美世界DOTA2联赛PWL S3 CPG vs Forest 第二场 12.16
2020/12/17 DOTA
写了个监控nginx进程的Python脚本
2012/05/10 Python
Python操作mongodb的9个步骤
2018/06/04 Python
python tkinter实现彩球碰撞屏保
2019/07/30 Python
python 动态迁移solr数据过程解析
2019/09/04 Python
解决tensorflow由于未初始化变量而导致的错误问题
2020/01/06 Python
基于Python3.6中的OpenCV实现图片色彩空间的转换
2020/02/03 Python
Python实现括号匹配方法详解
2020/02/10 Python
Python面向对象程序设计之继承、多态原理与用法详解
2020/03/23 Python
学会python自动收发邮件 代替你问候女友
2020/05/20 Python
阿根廷票务网站:StubHub阿根廷
2018/04/13 全球购物
Omio荷兰:预订火车、巴士和机票
2018/11/04 全球购物
文言文形式的学生求职信
2013/12/03 职场文书
学校大课间活动方案
2014/01/30 职场文书
中专生自荐信
2014/06/25 职场文书
青春飞扬演讲稿
2014/09/11 职场文书
关于调整工作时间的通知
2015/04/24 职场文书
干部培训工作总结2015
2015/05/25 职场文书
捐款仪式主持词
2015/07/04 职场文书
MySQL令人咋舌的隐式转换
2021/04/05 MySQL
Nginx配置Https安全认证的实现
2021/05/26 Servers
Springboot如何使用logback实现多环境配置?
2021/06/16 Java/Android
教你如何用cmd快速登录服务器
2022/06/10 Servers