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 相关文章推荐
javascript实现图片切换的幻灯片效果源代码
Dec 12 Javascript
js的hasownproperty使用示例
Mar 02 Javascript
$.each与$().each的区别示例介绍
Mar 20 Javascript
使用getBoundingClientRect方法实现简洁的sticky组件的方法
Mar 22 Javascript
非常棒的jQuery图片轮播效果
Apr 17 Javascript
浅析javascript异步执行函数导致的变量变化问题解决思路
May 13 Javascript
JS中sort函数排序用法实例分析
Jun 16 Javascript
jQuery移除或禁用html元素点击事件常用方法小结
Feb 10 Javascript
JS原生带小白点轮播图实例讲解
Jul 22 Javascript
vuejs 单文件组件.vue 文件的使用
Jul 28 Javascript
详解离线安装npm包的几种方法
Nov 25 Javascript
vue实现顶部菜单栏
Nov 08 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上传中文文件名乱码问题处理方案
2015/02/03 PHP
几个优化WordPress中JavaScript加载体验的插件介绍
2015/12/17 PHP
Yii框架getter与setter方法功能与用法分析
2019/10/22 PHP
分享14个很酷的jQuery导航菜单插件
2011/04/25 Javascript
jQuery的DOM操作之删除节点示例
2014/01/03 Javascript
详解js闭包
2014/09/02 Javascript
js阻止事件追加的具体实现
2014/10/15 Javascript
JavaScript中 ES6 generator数据类型详解
2016/08/11 Javascript
js+css3制作时钟特效
2016/10/16 Javascript
Bootstrap源码学习笔记之bootstrap进度条
2016/12/24 Javascript
简单实现nodejs上传功能
2017/01/14 NodeJs
原生JS实现圣旨卷轴展开效果
2017/03/06 Javascript
使用JavaScript开发跨平台的桌面应用详解
2017/07/27 Javascript
vue 解决循环引用组件报错的问题
2018/09/06 Javascript
three.js利用gpu选取物体并计算交点位置的方法示例
2019/11/25 Javascript
详解vue 组件的实现原理
2020/11/12 Javascript
浅谈Django中的数据库模型类-models.py(一对一的关系)
2018/05/30 Python
python计算两个数的百分比方法
2018/06/29 Python
Python字典中的键映射多个值的方法(列表或者集合)
2018/10/17 Python
Python 给定的经纬度标注在地图上的实现方法
2019/07/05 Python
Python面向对象之多态原理与用法案例分析
2019/12/30 Python
pytorch中的自定义数据处理详解
2020/01/06 Python
Pycharm中Python环境配置常见问题解析
2020/01/16 Python
学习Python需要哪些工具
2020/09/04 Python
matplotlib运行时配置(Runtime Configuration,rc)参数rcParams解析
2021/01/05 Python
pandas apply使用多列计算生成新的列实现示例
2021/02/24 Python
用CSS3和table标签实现一个圆形轨迹的动画的示例代码
2019/01/17 HTML / CSS
为什么要有struct关键字
2012/05/08 面试题
JAVA招聘远程笔试题
2015/07/23 面试题
大学应届毕业生个人求职信
2013/09/23 职场文书
研发工程师的岗位职责
2013/11/18 职场文书
历史系自荐信范文
2013/12/24 职场文书
销售员个人求职的自我评价
2014/02/10 职场文书
2015年普法依法治理工作总结
2015/05/26 职场文书
职场新人刚入职工作总结该怎么写?
2019/05/15 职场文书
美元符号 $
2022/02/17 杂记