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 ui(接口)介绍
Sep 17 Javascript
js兼容的placeholder属性详解
Aug 18 Javascript
使用jquery获取网页中图片高度的两种方法
Sep 26 Javascript
js改变文章字体大小的实例代码
Nov 27 Javascript
Chrome下ifame父窗口调用子窗口的问题示例探讨
Mar 17 Javascript
jQuery+CSS3实现树叶飘落特效
Feb 01 Javascript
用户代理字符串userAgent可实现的四个识别
Sep 20 Javascript
bootstrap datetimepicker控件位置异常的解决方法
Nov 23 Javascript
微信小程序自定义带价格显示日历效果
Dec 29 Javascript
Android 自定义view仿微信相机单击拍照长按录视频按钮
Jul 19 Javascript
微信小程序绘制半圆(弧形)进度条
Nov 18 Javascript
实现AJAX异步调用和局部刷新的基本步骤
Mar 17 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利用header函数实现文件下载时直接提示保存
2009/11/12 PHP
PHP 5.3.1 安装包 VC9 VC6不同版本的区别是什么
2010/07/04 PHP
LotusPhp笔记之:Logger组件的使用方法
2013/05/06 PHP
php数组去重复数据示例
2014/02/25 PHP
非常全面的php日期时间运算汇总
2015/11/04 PHP
对javascript的一点点认识总结《javascript高级程序设计》读书笔记
2011/11/30 Javascript
javascript中处理时间戳为日期格式的方法
2014/01/02 Javascript
js数组中如何随机取出一个值
2014/06/13 Javascript
JS实现星星评分功能实例代码(两种方法)
2016/06/09 Javascript
利用css+原生js制作简单的钟表
2020/04/07 Javascript
layui框架中layer父子页面交互的方法分析
2017/11/15 Javascript
three.js实现3D影院的原理的代码分析
2017/12/18 Javascript
JS实现生成由字母与数字组合的随机字符串功能详解
2018/05/25 Javascript
ES6 系列之 WeakMap的使用示例
2018/08/06 Javascript
快速解决vue-cli在ie9+中无效的问题
2018/09/04 Javascript
vue-cli3.0配置及使用注意事项详解
2018/09/05 Javascript
uni-app实现点赞评论功能
2019/11/25 Javascript
python实现图片筛选程序
2018/10/24 Python
pandas.DataFrame删除/选取含有特定数值的行或列实例
2018/11/07 Python
Flask框架工厂函数用法实例分析
2019/05/25 Python
Python字符串中添加、插入特定字符的方法
2019/09/10 Python
Django中使用MySQL5.5的教程
2019/12/18 Python
基于numpy中的expand_dims函数用法
2019/12/18 Python
pytorch三层全连接层实现手写字母识别方式
2020/01/14 Python
django为Form生成的label标签添加class方式
2020/05/20 Python
美国咖啡批发网站:Coffee.org
2017/06/29 全球购物
马耳他航空公司官方网站:Air Malta
2019/05/15 全球购物
说一下Linux下有关用户和组管理的命令
2014/08/18 面试题
学生会宣传部部长竞选演讲稿
2014/04/25 职场文书
专科应届毕业生求职信
2014/06/04 职场文书
颐和园导游词400字
2015/01/30 职场文书
数据库的高级查询六:表连接查询:外连接(左外连接,右外连接,UNION关键字,连接中ON与WHERE的不同)
2021/04/05 MySQL
Django显示可视化图表的实践
2021/05/10 Python
交互式可视化js库gojs使用介绍及技巧
2022/02/18 Javascript
MySQL优化及索引解析
2022/03/17 MySQL
baselines示例程序train_cartpole.py的ImportError
2022/05/20 Python