JS网页图片按比例自适应缩放实现方法


Posted in Javascript onJanuary 15, 2014

用户上传照片,照片的尺寸未知;需要生成一个预览,这个预览图要根据提供给用户预览的区域自应用,并且居中;如果图片太大,需要按比例缩放。如下图。

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;
Javascript 相关文章推荐
Javascript常考语句107条收集
Mar 09 Javascript
终于解决了IE8不支持数组的indexOf方法
Apr 03 Javascript
JQuery实现表格中相同单元格合并示例代码
Jun 26 Javascript
node.js中的fs.link方法使用说明
Dec 15 Javascript
js获取内联样式的方法
Jan 27 Javascript
javascript图片预加载实例分析
Jul 16 Javascript
webpack实现热加载自动刷新的方法
Jul 30 Javascript
javascript如何用递归写一个简单的树形结构示例
Sep 06 Javascript
this在vue和小程序中的使用详解
Jan 28 Javascript
JavaScript实现的拼图算法分析
Feb 13 Javascript
React Native中ScrollView组件轮播图与ListView渲染列表组件用法实例分析
Jan 06 Javascript
解决vue scoped html样式无效的问题
Oct 24 Javascript
javascript删除字符串最后一个字符
Jan 14 #Javascript
javascript制作loading动画效果 loading效果
Jan 14 #Javascript
导入extjs、jquery 文件时$使用冲突问题解决方法
Jan 14 #Javascript
如何动态的导入js文件具体该怎么实现
Jan 14 #Javascript
将查询条件的input、select清空
Jan 14 #Javascript
js导出txt示例代码
Jan 14 #Javascript
javascript 通用loading动画效果实例代码
Jan 14 #Javascript
You might like
不用数据库的多用户文件自由上传投票系统(2)
2006/10/09 PHP
PHP获取文件夹大小函数用法实例
2015/07/01 PHP
php三种实现多线程类似的方法
2015/10/30 PHP
PHP实现数据分页显示的简单实例
2016/05/26 PHP
用PHP的反射实现委托模式的讲解
2019/03/22 PHP
laravel 解决groupBy时出现的错误 isn't in Group By问题
2019/10/17 PHP
JavaScript中的对象化编程
2008/01/16 Javascript
javascript判断ie浏览器6/7版本加载不同样式表的实现代码
2011/12/26 Javascript
JavaScript中的连字符详解
2013/11/28 Javascript
js中typeof的用法汇总
2013/12/12 Javascript
利用Keydown事件阻止用户输入实现代码
2014/03/11 Javascript
JavaScript取得键盘按下方向键是哪个的方法
2015/08/04 Javascript
js实现网站最上边可关闭的浮动广告条代码
2015/09/04 Javascript
JQuery遍历元素的后代和同胞实现方法
2016/09/18 Javascript
微信浏览器禁止页面下拉查看网址实例详解
2017/06/28 Javascript
vue服务端渲染添加缓存的方法
2018/09/18 Javascript
Vue-cli3项目引入Typescript的实现方法
2019/10/18 Javascript
解决Python安装后pip不能用的问题
2018/06/12 Python
详解Python静态网页爬取获取高清壁纸
2019/04/23 Python
浅谈tensorflow中Dataset图片的批量读取及维度的操作详解
2020/01/20 Python
tensorflow 实现打印pb模型的所有节点
2020/01/23 Python
利用pipenv和pyenv管理多个相互独立的Python虚拟开发环境
2020/11/01 Python
Python实现网络聊天室的示例代码(支持多人聊天与私聊)
2021/01/27 Python
CSS3 实现飘动的云朵动画
2020/12/01 HTML / CSS
Brasty波兰:香水、化妆品、手表网上商店
2019/04/15 全球购物
企业军训感想
2014/02/07 职场文书
大学老师推荐信
2014/02/25 职场文书
农村葬礼主持词
2014/03/31 职场文书
行政专员岗位职责说明书
2014/09/01 职场文书
2015年度物业公司工作总结
2015/04/27 职场文书
焦点访谈观后感
2015/06/11 职场文书
父母教会我观后感
2015/06/17 职场文书
致运动员赞词
2015/07/22 职场文书
员工考勤管理制度
2015/08/06 职场文书
Python3 多线程(连接池)操作MySQL插入数据
2021/06/09 Python
Python如何让字典保持有序排列
2022/04/29 Python