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 实现的自定义对话框
Mar 24 Javascript
jQuery源码分析-04 选择器-Sizzle-工作原理分析
Nov 14 Javascript
js动态往表格的td中添加图片并注册事件
Jun 12 Javascript
JQuery中的html()、text()、val()区别示例介绍
Sep 01 Javascript
jQuery+html5+css3实现圆角无刷新表单带输入验证功能代码
Aug 21 Javascript
jQuery移动端图片上传组件
Jun 12 Javascript
jQuery处理XML文件的几种方法
Jun 14 Javascript
Angular4项目中添加i18n国际化插件ngx-translate的步骤详解
Jul 02 Javascript
Angular 4.0学习教程之架构详解
Sep 12 Javascript
vue.js select下拉框绑定和取值方法
Mar 03 Javascript
JS实现的检验身份证格式并输出出生日期,年龄,性别,出生地示例
May 17 Javascript
Layui 解决表格异步调用后台分页的问题
Oct 26 Javascript
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对接芝麻信用踩的坑
2016/12/01 PHP
php实现购物车产品删除功能(2)
2020/07/23 PHP
thinkPHP5.0框架开发规范简介
2017/03/25 PHP
PHP实现找出有序数组中绝对值最小的数算法分析
2017/08/07 PHP
laravel框架添加数据,显示数据,返回成功值的方法
2019/10/11 PHP
javascript Array.remove() 数组删除
2009/08/06 Javascript
javascript事件问题
2009/09/05 Javascript
Node.js中使用计时器定时执行函数详解
2014/08/15 Javascript
JS实现5秒钟自动封锁div层的方法
2015/02/20 Javascript
教你使用javascript简单写一个页面模板引擎
2015/05/05 Javascript
js图片轮播特效代码分享
2015/09/07 Javascript
javascript生成img标签的3种实现方法(对象、方法、html)
2015/12/25 Javascript
AngualrJS中的Directive制作一个菜单
2016/01/26 Javascript
Javascript基础知识盲点总结之函数
2016/05/15 Javascript
深入理解JavaScript中的浮点数
2016/05/18 Javascript
AngularJS基础 ng-class-odd 指令示例
2016/08/01 Javascript
JavaScript实现解析INI文件内容的方法
2016/11/17 Javascript
jQuery为DOM动态追加事件的方法
2017/02/16 Javascript
JavaScript面向对象的程序设计(犯迷糊的小羊)
2018/05/27 Javascript
基于Vue 服务端Cookies删除的问题
2018/09/21 Javascript
JavaScript实现邮箱后缀提示功能的示例代码
2018/12/13 Javascript
详解vue-cli+element-ui树形表格(多级表格折腾小计)
2019/04/17 Javascript
微信小程序去除左上角返回键的实现方法
2020/03/06 Javascript
[47:06]DOTA2上海特级锦标赛主赛事日 - 4 败者组第五轮 MVP.Phx VS EG第一局
2016/03/05 DOTA
[55:32]2018DOTA2亚洲邀请赛 4.4 淘汰赛 EG vs LGD 第二场
2018/04/05 DOTA
python3.4控制用户输入与输出的方法
2018/10/17 Python
基于MATLAB和Python实现MFCC特征参数提取
2019/08/13 Python
py-charm延长试用期限实例
2019/12/22 Python
Python图像处理库PIL的ImageEnhance模块使用介绍
2020/02/26 Python
python开发一款翻译工具
2020/10/10 Python
Java里面StringBuilder和StringBuffer有什么区别
2016/06/06 面试题
如何在.net Winform里面显示PDF文档
2012/09/11 面试题
应聘护理专业毕业自荐书范文
2014/02/12 职场文书
信息管理专业自荐书
2014/06/05 职场文书
放假通知
2015/04/14 职场文书
工伤事故赔偿协议书
2015/08/06 职场文书