关于图片按比例自适应缩放的js代码


Posted in Javascript onOctober 30, 2011

如下图。

关于图片按比例自适应缩放的js代码

瞄了一下,居中可以用 text-align:center; 来实现。而按比例缩放,利用预设 <img /> 的 width 、height 属性解决不了。因为用户图片可能是很长的,也可能是很宽的。在线上想了一下他们的关系,按条件来判断是这样的:

if(实际宽度 > 预览最大宽度) { 
缩放宽度 = 预览最大宽度 
} if(实际高度 > 预览最大高度) { 
缩放高度 = 预览最大高度 
}

但是这样会有问题,比如当宽度和高度都被缩放,如果缩放比较不同,图片就不是按比例缩放,会变得非常丑。为了让它按比例缩放,就需要做各种判断了。那这样就违背了我们希望程序自动化的原则了。再想想,虽然不喜欢数学,但数学还是很好用的,应该有其他办法。而既然是按比例缩放,何不用实际图像和预览区域宽度作的比例来计算他们关系?hmmmm… 果然 OK。实际上我们永远都只需要缩放宽度或高度中的其中一个。因为比例只有大和小种情况。具体的,写一个函数来实现它吧:
/** 
* 图片按比例自适应缩放 
* @param img {Element} 用户上传的图片 
* @param maxWidth {Number} 预览区域的最大宽度 
* @param maxHeight {Number} 预览区域的最大高度 
*/ var resizeImg = function(img, maxWidth, maxHeight){ 
var w = img.width, 
h = img.height; 
// 当图片比预览区域小时不做任何改变 
if(w < maxWidth && h < maxHeight) return; 
// 当实际图片比例大于预览区域宽高比例时 
// 缩放图片宽度,反之缩放图片宽度 
w/h > maxWidth/maxHeight ? img.width = maxWidth : img.height = maxHeight; 
};

完整的测试代码:
<!DOCTYPE HTML> 
<html> 
<head> 
<meta charset="utf-8"> 
<title>图片按比例自适应缩放</title> 
<style> 
.cnt{text-align:center;width:600px;height:350px;margin:0 auto;border:1px solid #ddd;} 
</style> 
</head> 
<body> 
<div class="cnt"> 
<img id="img" src="http://www.wallcoo.com/1920x1440/1920x1440_nature_wallpapers_02/wallpapers/1920x1440/%5Bwallcoo.com%5D_1920X1440_nature_wallpapers_aVistas005.jpg" alt="alipay" /> 
<br /> 
<a href="http://www.wallcoo.com/1920x1440/1920x1440_nature_wallpapers_02/wallpapers/1920x1440/%5Bwallcoo.com%5D_1920X1440_nature_wallpapers_aVistas005.jpg" rel="nofollow">查看原图</a> || <a href="http://sofish.de/1679" title="关于图片按比例自适应缩放">返回文章:关于图片按比例自适应缩放 »</a> 
</div> 
<script> 
window.onload = function() { 
var img = document.getElementById('img'), 
/** 
* 图片按比例自适应缩放 
* @param img {Element} 用户上传的图片 
* @param maxWidth {Number} 预览区域的最大宽度 
* @param maxHeight {Number} 预览区域的最大高度 
*/ 
resizeImg = function(img, maxWidth, maxHeight){ 
var w = img.width, 
h = img.height; 
// 当图片比预览区域小时不做任何改变 
if(w < maxWidth && h < maxHeight) return; 
// 当实际图片比例大于预览区域宽高比例时 
// 缩放图片宽度,反之缩放图片宽度 
w/h > maxWidth/maxHeight ? img.width = maxWidth : img.height = maxHeight; 
}; 
resizeImg(img, 500, 300); 
} 
</script> 
</body> 
</html>
Javascript 相关文章推荐
jQuery 表格插件整理
Apr 27 Javascript
javascript实现网页端解压并查看zip文件
Dec 15 Javascript
值得分享的Bootstrap Table使用教程
Nov 23 Javascript
javascript表单正则应用
Feb 04 Javascript
canvas绘制多边形
Feb 24 Javascript
Vue使用vux-ui自定义表单验证遇到的问题及解决方法
May 10 Javascript
vue中使用codemirror的实例详解
Nov 01 Javascript
javascript获取元素的计算样式
May 24 Javascript
layui使用form表单实现post请求页面跳转的方法
Sep 14 Javascript
基于vue实现图片验证码倒计时60s功能
Dec 10 Javascript
微信小程序实现转盘抽奖
Sep 21 Javascript
微前端qiankun改造日渐庞大的项目教程
Jun 21 Javascript
js 弹出菜单/窗口效果
Oct 30 #Javascript
基于Jquery+Ajax+Json的高效分页实现代码
Oct 29 #Javascript
简单的前端js+ajax 购物车框架(入门篇)
Oct 29 #Javascript
分享一个自己写的table表格排序js插件(高效简洁)
Oct 29 #Javascript
Json2Template.js 基于jquery的插件 绑定JavaScript对象到Html模板中
Oct 29 #Javascript
基于jQuery的输入框在光标位置插入内容, 并选中
Oct 29 #Javascript
基于jquery的无限级联下拉框js插件
Oct 29 #Javascript
You might like
PHP生成网页快照 不用COM不用扩展.
2010/02/11 PHP
PHP数组交集的优化代码分析
2011/03/06 PHP
采集邮箱的php代码(抓取网页中的邮箱地址)
2012/07/17 PHP
php 中文字符串首字母的获取函数分享
2013/11/04 PHP
PHP提示Warning:phpinfo() has been disabled函数禁用的解决方法
2014/12/17 PHP
常用PHP封装分页工具类
2017/01/14 PHP
PHP获取表单数据与HTML嵌入PHP脚本的实现
2017/02/09 PHP
PHP删除字符串中非字母数字字符方法总结
2019/01/20 PHP
jBox 2.3基于jquery的最新多功能对话框插件 常见使用问题解答
2011/11/10 Javascript
js动态生成指定行数的表格
2013/07/11 Javascript
js原型链与继承解析(初体验)
2016/05/09 Javascript
Mint UI组件库CheckList使用及踩坑总结
2018/12/20 Javascript
在Vue中用canvas实现二维码和图片合成海报的方法
2019/06/10 Javascript
使用vue打包进行云服务器上传的问题
2020/03/02 Javascript
Element el-button 按钮组件的使用详解
2021/02/01 Javascript
linux 下实现python多版本安装实践
2014/11/18 Python
Python删除空文件和空文件夹的方法
2015/07/14 Python
Python贪吃蛇游戏编写代码
2020/10/26 Python
python协程之动态添加任务的方法
2019/02/19 Python
详解Python中pandas的安装操作说明(傻瓜版)
2019/04/08 Python
记录Python脚本的运行日志的方法
2019/06/05 Python
python模块常用用法实例详解
2019/10/17 Python
解决Pytorch 加载训练好的模型 遇到的error问题
2020/01/10 Python
Python如何读取文件中图片格式
2020/01/13 Python
Python的pygame安装教程详解
2020/02/10 Python
Python使用jupyter notebook查看ipynb文件过程解析
2020/06/02 Python
Django ModelForm组件原理及用法详解
2020/10/12 Python
HTML5移动端开发中的Viewport标签及相关CSS用法解析
2016/04/15 HTML / CSS
html5使用canvas压缩图片的示例代码
2018/09/11 HTML / CSS
印度低票价航空公司:GoAir
2017/10/11 全球购物
材料加工硕士生求职信
2013/10/10 职场文书
幼儿园实习生辞职信
2014/01/20 职场文书
内蒙古鄂尔多斯市市长寄语
2014/04/10 职场文书
《骑牛比赛》教后反思
2014/04/22 职场文书
2014党员干部四风问题对照检查材料思想汇报
2014/09/24 职场文书
mysql 8.0.27 绿色解压版安装教程及配置方法
2022/04/20 MySQL