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 相关文章推荐
基于jquery的direction图片渐变动画效果
May 24 Javascript
jQuery1.9.1针对checkbox的调整方法(prop)
May 01 Javascript
详解js的延迟对象、跨域、模板引擎、弹出层、AJAX【附实例下载】
Dec 19 Javascript
jQuery实现最简单实用的分秒倒计时
Feb 05 Javascript
原生JS中slice()方法和splice()区别
Mar 06 Javascript
JavaScript实现两个select下拉框选项左移右移
Mar 09 Javascript
Angular移动端页面input无法输入的解决方法
Nov 14 Javascript
详解Angular5 路由传参的3种方法
Apr 28 Javascript
小程序实现选择题选择效果
Nov 04 Javascript
jquery将json转为数据字典的实例代码
Oct 11 jQuery
jQuery实现中奖播报功能(让文本滚动起来) 简单设置数值即可
Mar 20 jQuery
Vue.Draggable实现交换位置
Apr 07 Vue.js
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的5个入手程序
2006/11/23 PHP
PHP has encountered an Access Violation
2007/01/15 PHP
php版本的cron定时任务执行器使用实例
2014/08/19 PHP
Laravel 5 框架入门(一)
2015/04/09 PHP
php fseek函数读取大文件两种方法
2016/10/12 PHP
Colortip基于jquery的信息提示框插件在IE6下面的显示问题修正方法
2010/12/06 Javascript
JS替换字符串中字符即替换全部而不是第一个
2014/06/04 Javascript
JS辨别访问浏览器判断是android还是ios系统
2014/08/19 Javascript
javascript框架设计读书笔记之数组的扩展与修复
2014/12/02 Javascript
jQuery实现友好的轮播图片特效
2015/01/12 Javascript
JavaScript分页功能的实现方法
2015/04/25 Javascript
jQuery异步上传文件插件ajaxFileUpload详细介绍
2015/05/19 Javascript
说说node中的可读流和可写流的区别
2018/06/01 Javascript
jQuery实现百度图片移入移出内容提示框上下左右移动的效果
2018/06/05 jQuery
vue cli安装使用less的教程详解
2019/07/12 Javascript
JS操作字符串转数字的常见方法示例
2019/10/29 Javascript
[00:42]《辉夜杯》—职业组预选赛12月3日15点 正式打响
2015/12/03 DOTA
[50:17]Newbee vs Serenity 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/18 DOTA
在Python的Django框架下使用django-tagging的教程
2015/05/30 Python
windows下pycharm安装、创建文件、配置默认模板
2018/07/31 Python
django使用haystack调用Elasticsearch实现索引搜索
2019/07/24 Python
python使用beautifulsoup4爬取酷狗音乐代码实例
2019/12/04 Python
python requests模拟登陆github的实现方法
2019/12/26 Python
python+selenium+chromedriver实现爬虫示例代码
2020/04/10 Python
Kipling凯浦林美国官网:世界著名时尚休闲包袋品牌
2016/08/24 全球购物
计算机专业应届毕业生自荐信
2013/09/26 职场文书
公司合作协议书范本
2014/04/18 职场文书
汽车维修求职信
2014/06/15 职场文书
高效课堂标语
2014/06/26 职场文书
店铺转让协议书
2014/12/02 职场文书
爱情保证书
2015/01/17 职场文书
销售员岗位职责范本
2015/04/11 职场文书
花木兰观后感
2015/06/10 职场文书
python读取pdf格式文档的实现代码
2021/04/01 Python
Python自然语言处理之切分算法详解
2021/04/25 Python
浅析Django接口版本控制
2021/06/26 Python