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 相关文章推荐
js 设置缓存及获取设置的缓存
May 08 Javascript
node.js中的fs.appendFileSync方法使用说明
Dec 17 Javascript
jQuery实现在最后一个元素之前插入新元素的方法
Jul 18 Javascript
jQuery Validate插件实现表单强大的验证功能
Dec 18 Javascript
AngularJS模板加载用法详解
Nov 04 Javascript
jQuery扩展+xml实现表单验证功能的方法
Dec 25 Javascript
JS实现图片高斯模糊切换效果的焦点图实例
Jan 21 Javascript
提高Web性能的前端优化技巧总结
Feb 27 Javascript
详解基于webpack搭建react运行环境
Jun 01 Javascript
Vue的编码技巧与规范使用详解
Aug 28 Javascript
Vue中keep-alive组件作用详解
Feb 04 Javascript
写一个Vue loading 插件
Nov 09 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
PHP模板引擎SMARTY
2006/10/09 PHP
php操作MongoDB基础教程(连接、新增、修改、删除、查询)
2014/03/25 PHP
php使用ffmpeg向视频中添加文字字幕的实现方法
2016/05/23 PHP
详解thinkphp实现excel数据的导入导出(附完整案例)
2016/12/29 PHP
浅谈PHP的排列组合(如输入a,b,c 输出他们的全部组合)
2017/03/14 PHP
PHP实现字母数字混合验证码功能
2019/07/11 PHP
jquery等宽输出文字插件使用介绍
2013/09/18 Javascript
jQuery Mobile的loading对话框显示/隐藏方法分享
2013/11/26 Javascript
原生js编写设为首页兼容ie、火狐和谷歌
2014/06/05 Javascript
用JavaScript判断CSS浏览器类型前缀的两种方法
2015/10/08 Javascript
学习JavaScript设计模式之模板方法模式
2016/01/20 Javascript
JS动态计算移动端rem的解决方案
2016/10/14 Javascript
微信小程序 后台https域名绑定和免费的https证书申请详解
2016/11/10 Javascript
vue 和vue-touch 实现移动端左右导航效果(仿京东移动站导航)
2017/04/22 Javascript
JS实现的文字间歇循环滚动效果完整示例
2018/02/13 Javascript
react router4+redux实现路由权限控制的方法
2018/05/03 Javascript
原生JS实现的雪花飘落动画效果
2018/05/03 Javascript
jquery.pagination.js分页使用教程
2018/10/23 jQuery
layui 数据表格 点击分页按钮 监听事件的实例
2019/09/02 Javascript
Vue实现仿iPhone悬浮球的示例代码
2020/03/13 Javascript
解决antd datepicker 获取时间默认少8个小时的问题
2020/10/29 Javascript
在Django中输出matplotlib生成的图片方法
2018/05/24 Python
python 实现数字字符串左侧补零的方法
2018/12/04 Python
解决python super()调用多重继承函数的问题
2019/06/26 Python
Python 爬虫的原理
2020/07/30 Python
python opencv实现简易画图板
2020/08/27 Python
WebSphere面试题:在WebSphere里面如何部署一个应用
2015/08/02 面试题
高中毕业自我鉴定
2013/12/13 职场文书
小学后勤管理制度
2014/01/14 职场文书
社区优秀志愿者材料
2014/02/02 职场文书
烹饪大赛策划方案
2014/05/26 职场文书
民主生活会整改措施(党员)
2014/09/18 职场文书
2014领导干部学习焦裕禄同志先进事迹思想汇报
2014/09/19 职场文书
2016秋季幼儿园开学寄语
2015/12/03 职场文书
《游戏公平》教学反思
2016/02/20 职场文书
python如何做代码性能分析
2021/04/26 Python