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实现自定义标签
May 08 Javascript
jquery 页面全选框实践代码
Apr 02 Javascript
require.js深入了解 require.js特性介绍
Sep 04 Javascript
js实现宇宙星空背景效果的方法
Mar 03 Javascript
js实现将选中内容分享到新浪或腾讯微博
Dec 16 Javascript
js实现一个可以兼容PC端和移动端的div拖动效果实例
Dec 09 Javascript
JQuery Dialog对话框 不能通过Esc关闭的原因分析及解决办法
Jan 18 Javascript
详解Node.js access_token的获取、存储及更新
Jun 20 Javascript
完美实现js拖拽效果 return false用法详解
Jul 28 Javascript
关于express与koa的使用对比详解
Jan 25 Javascript
JavaScript实现HSL拾色器
May 21 Javascript
解决vue做详情页跳转的时候使用created方法 数据不会更新问题
Jul 24 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个人网站架设连环讲(一)
2006/10/09 PHP
常用PHP框架功能对照表
2014/10/23 PHP
分享10段PHP常用代码
2015/11/11 PHP
jQuery boxy弹出层插件中文演示及使用讲解
2011/02/24 Javascript
JavaScript在多浏览器下for循环的使用方法
2012/11/07 Javascript
javascript中Array数组的迭代方法实例分析
2015/02/04 Javascript
javascript实现图片循环渐显播放的方法
2015/02/24 Javascript
jquery延迟对象解析
2016/10/26 Javascript
vue2.0实现导航菜单切换效果
2017/05/08 Javascript
Ionic项目中Native Camera的使用方法
2017/06/07 Javascript
vue过渡和animate.css结合使用详解
2017/06/14 Javascript
vue 请求后台数据的实例代码
2017/06/22 Javascript
JavaScript正则表达式和级联效果
2017/09/14 Javascript
JavaScript程序设计高级算法之动态规划实例分析
2017/11/24 Javascript
JS 音频可视化插件Wavesurfer.js的使用教程
2018/10/31 Javascript
微信小程序上传多图到服务器并获取返回的路径
2019/05/05 Javascript
[01:09:23]KG vs TNC 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/16 DOTA
Python的另外几种语言实现
2015/01/29 Python
python使用插值法画出平滑曲线
2018/12/15 Python
VPS CENTOS 上配置python,mysql,nginx,uwsgi,django的方法详解
2019/07/01 Python
Django后台admin的使用详解
2019/07/08 Python
如何更改 pandas dataframe 中两列的位置
2019/12/27 Python
Python request post上传文件常见要点
2020/11/20 Python
最新英语专业学生求职信范文
2013/09/21 职场文书
通信专业个人自我鉴定
2013/10/21 职场文书
2014年应届大学生自我评价
2014/01/09 职场文书
新领导上任欢迎词
2014/01/13 职场文书
推广普通话演讲稿
2014/05/23 职场文书
三严三实对照检查材料
2014/09/22 职场文书
2014年新教师工作总结
2014/11/08 职场文书
继承公证书格式
2015/01/26 职场文书
建议书范文
2015/02/05 职场文书
2019西餐厅创业计划书范文!
2019/07/12 职场文书
java固定大小队列的几种实现方式详解
2021/07/15 Java/Android
教你利用Nginx 服务搭建子域环境提升二维地图加载性能的步骤
2021/09/25 Servers
Python中字符串对象语法分享
2022/02/24 Python