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使用jxl插件导出excel示例
Apr 14 Javascript
js判断是否按下了Shift键的方法
Jan 27 Javascript
JavaScript实现将数组中所有元素连接成一个字符串的方法
Apr 06 Javascript
用window.onerror捕获并上报Js错误的方法
Jan 27 Javascript
JS 清除字符串数组中,重复元素的实现方法
May 24 Javascript
jquery组件WebUploader文件上传用法详解
Oct 23 Javascript
JavaScript运动框架 多值运动(四)
May 18 Javascript
详解Layer弹出层样式
Aug 21 Javascript
解决vue build打包之后首页白屏的问题
Mar 06 Javascript
vuejs实现标签选项卡动态更改css样式的方法
May 31 Javascript
jQuery模拟12306城市选择框功能简单实现方法示例
Aug 13 jQuery
Vue项目接入Paypal实现示例详解
Jun 04 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中操作MySQL数据库的一些要注意的问题
2006/10/09 PHP
针对初学PHP者的疑难问答(2)
2006/10/09 PHP
解析关于java,php以及html的所有文件编码与乱码的处理方法汇总
2013/06/24 PHP
CI框架中site_url()和base_url()的区别
2015/01/07 PHP
使用PHP similar text计算两个字符串相似度
2015/11/06 PHP
基于php(Thinkphp)+jquery 实现ajax多选反选不选删除数据功能
2017/02/24 PHP
php设计模式之状态模式实例分析【星际争霸游戏案例】
2020/03/26 PHP
jQuery切换所有复选框选中状态的方法
2015/07/02 Javascript
总结JavaScript中布尔操作符||与&amp;&amp;的使用技巧
2015/11/17 Javascript
JavaScript实现简易的天数计算器实例【附demo源码下载】
2017/01/18 Javascript
Angular.JS内置服务$http对数据库的增删改使用教程
2017/05/07 Javascript
Angular 4 指令快速入门教程
2017/06/07 Javascript
Angular实现的日程表功能【可添加及隐藏显示内容】
2017/12/27 Javascript
vue.js 实现点击展开收起动画效果
2018/07/07 Javascript
vue监听对象及对象属性问题
2018/08/20 Javascript
关于在vue 中使用百度ueEditor编辑器的方法实例代码
2018/09/14 Javascript
微信小程序实现分享商品海报功能
2019/09/30 Javascript
jQuery实现简单全选框
2020/09/13 jQuery
[49:08]FNATIC vs Infamous 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/18 DOTA
列举Python中吸引人的一些特性
2015/04/09 Python
Python标准库defaultdict模块使用示例
2015/04/28 Python
python引入导入自定义模块和外部文件的实例
2017/07/24 Python
python中requests使用代理proxies方法介绍
2017/10/25 Python
python中sys.argv函数精简概括
2018/07/08 Python
Gauss-Seidel迭代算法的Python实现详解
2019/06/29 Python
如何基于Python + requests实现发送HTTP请求
2020/01/13 Python
Tensorflow之梯度裁剪的实现示例
2020/03/08 Python
pyspark给dataframe增加新的一列的实现示例
2020/04/24 Python
Python xpath表达式如何实现数据处理
2020/06/13 Python
CSS3系列之3D制作方法案例
2017/08/14 HTML / CSS
CSS3 input框的实现代码类似Google登录的动画效果
2020/08/04 HTML / CSS
行政管理人员精品工作推荐信
2013/11/04 职场文书
预备党员表决心书
2014/03/11 职场文书
国际贸易专业自荐信
2014/06/10 职场文书
使用Pytorch实现two-head(多输出)模型的操作
2021/05/28 Python
Python基本的内置数据类型及使用方法
2022/04/13 Python