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 设为首页与加入收藏兼容多浏览器代码
Jan 11 Javascript
javascript中input中readonly和disabled区别介绍
Oct 23 Javascript
THREE.JS入门教程(3)着色器-下
Jan 24 Javascript
javascript实现删除前弹出确认框
Jun 04 Javascript
更靠谱的H5横竖屏检测方法(js代码)
Sep 13 Javascript
jquery对象和DOM对象的相互转换详解
Oct 18 Javascript
JQuery validate 验证一个单独的表单元素实例
Feb 17 Javascript
jQuery加密密码到cookie的实现代码
Apr 18 jQuery
Vue组件之Tooltip的示例代码
Oct 18 Javascript
Angular4集成ng2-file-upload的上传组件
Mar 14 Javascript
Angular8 Http拦截器简单使用教程
Aug 20 Javascript
javascript实现点击按钮切换轮播图功能
Sep 23 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 array_map array_multisort 高效处理多维数组排序
2009/06/11 PHP
PHP基于GD库的缩略图生成代码(支持jpg,gif,png格式)
2014/06/19 PHP
php使用unset()删除数组中某个单元(键)的方法
2015/02/17 PHP
php实现统计目录文件大小的函数
2015/12/25 PHP
javascript字典探测用户名工具
2006/10/05 Javascript
基于jquery &amp; json的省市区联动代码
2012/06/26 Javascript
动态读取JSON解析键值对的方法
2014/06/03 Javascript
location.hash保存页面状态的技巧
2016/04/28 Javascript
JS动态给对象添加属性和值的实现方法
2016/10/21 Javascript
jQuery和JavaScript节点插入元素的方法对比
2016/11/18 Javascript
JS中Select下拉列表类(支持输入模糊查询)功能
2017/01/17 Javascript
JavaScript的for循环中嵌套一个点击事件的问题解决
2017/03/03 Javascript
Angular.js ng-file-upload结合springMVC的使用教程
2017/07/10 Javascript
Vue的状态管理vuex使用方法详解
2020/02/05 Javascript
JS通用方法触发点击事件代码实例
2020/02/17 Javascript
vue实现前端分页完整代码
2020/06/17 Javascript
浅析 Vue 3.0 的组装式 API(一)
2020/08/31 Javascript
详解JavaScript数据类型和判断方法
2020/09/04 Javascript
jQuery实现带进度条的轮播图
2020/09/13 jQuery
Python编程在flask中模拟进行Restful的CRUD操作
2018/12/28 Python
Django获取该数据的上一条和下一条方法
2019/08/12 Python
Pyinstaller 打包exe教程及问题解决
2019/08/16 Python
Python实现粒子群算法的示例
2021/02/14 Python
HTML5中meta属性的使用方法
2016/02/29 HTML / CSS
时尚设计师手表:The Watch Cabin
2018/10/06 全球购物
一篇.NET面试题
2014/09/29 面试题
市级三好学生事迹材料
2014/08/27 职场文书
员工辞职信怎么写
2015/02/27 职场文书
统计工作个人总结
2015/03/03 职场文书
2016党员读书思廉心得体会
2016/01/23 职场文书
《称赞》教学反思
2016/02/17 职场文书
python实现求纯色彩图像的边框
2021/04/08 Python
Goland使用Go Modules创建/管理项目的操作
2021/05/06 Golang
如何有效防止sql注入的方法
2021/05/25 SQL Server
简单介绍Python的第三方库yaml
2021/06/18 Python
python实现双向链表原理
2022/05/25 Python