Javascript获取图片原始宽度和高度的方法详解


Posted in Javascript onSeptember 20, 2016

前言

网上关于利用Javascript获取图片原始宽度和高度的方法有很多,本文将再次给大家谈谈这个问题,或许会对一些人能有所帮助。

方法详解

页面中的img元素,想要获取它的原始尺寸,以宽度为例,可能首先想到的是元素的innerWidth属性,或者jQuery中的width()方法。

如下:

<img id="img" src="1.jpg">

<script type="text/javascript">
 var img = document.getElementById("img");
 console.log(img.innerWidth); // 600
</script>

这样貌似可以拿到图片的尺寸。

但是如果给img元素增加了width属性,比如图片实际宽度是600,设置了width为400。这时候innerWidth为400,而不是600。显然,用innerWidth获取图片原始尺寸是不靠谱的。

这是因为 innerWidth属性获取的是元素盒模型的实际渲染的宽度,而不是图片的原始宽度。

<img id="img" src="1.jpg" width="400">

<script type="text/javascript">
 var img = document.getElementById("img");
 console.log(img.innerWidth); // 400
</script>

jQuery的width()方法在底层调用的是innerWidth属性,所以width()方法获取的宽度也不是图片的原始宽度。

那么该怎么获取img元素的原始宽度呢?

naturalWidth / naturalHeight

HTML5提供了一个新属性naturalWidth/naturalHeight可以直接获取图片的原始宽高。这两个属性在Firefox/Chrome/Safari/Opera及IE9里已经实现。

如下:

var naturalWidth = document.getElementById('img').naturalWidth,
 naturalHeight = document.getElementById('img').naturalHeight;

naturalWidth / naturalHeight在各大浏览器中的兼容性如下:

Javascript获取图片原始宽度和高度的方法详解

图片截取自http://caniuse.com/#search=naturalWidth

所以,如果不考虑兼容至IE8的,可以放心使用naturalWidth / naturalHeight属性了。

IE7/8中的兼容性实现:

在IE8及以前版本的浏览器并不支持naturalWidth和naturalHeight属性。

在IE7/8中,我们可以采用new Image()的方式来获取图片的原始尺寸,如下:

function getNaturalSize (Domlement) {
 var img = new Image();
 img.src = DomElement.src;
 return {
  width: img.width,
  height: img.height
 };
}

// 使用
var natural = getNaturalSize (document.getElementById('img')),
 natureWidth = natural.width,
 natureHeight = natural.height;

IE7+浏览器都能兼容的函数封装:

function getNaturalSize (Domlement) {
 var natureSize = {};
 if(window.naturalWidth && window.naturalHeight) {
  natureSize.width = Domlement.naturalWidth;
  natureSizeheight = Domlement.naturalHeight;
 } else {
  var img = new Image();
  img.src = DomElement.src;
  natureSize.width = img.width;
  natureSizeheight = img.height;
 }
 return natureSize;
}

// 使用
var natural = getNaturalSize (document.getElementById('img')),
 natureWidth = natural.width,
 natureHeight = natural.height;

总结

以上就是这篇文章的全部内容,希望能对大家的学习或者工作带来一定的帮助。如果有疑问大家可以留言交流。

Javascript 相关文章推荐
JS实现简单的Canvas画图实例
Jul 04 Javascript
用jQuery与JSONP轻松解决跨域访问的问题
Feb 04 Javascript
javascript+ajax实现产品页面加载信息
Jul 09 Javascript
js不间断滚动的简单实现
Jun 03 Javascript
详解jquery easyui之datagrid使用参考
Dec 05 Javascript
原生js实现简单的Ripple按钮实例代码
Mar 24 Javascript
React简单介绍
May 24 Javascript
React-router v4 路由配置方法小结
Aug 08 Javascript
Mongoose中document与object的区别示例详解
Sep 18 Javascript
利用js给datalist或select动态添加option选项的方法
Jan 25 Javascript
JavaScript使用面向对象实现的拖拽功能详解
Jun 12 Javascript
详解vue为什么要求组件模板只能有一个根元素
Jul 22 Javascript
AngularJS 过滤器(自带和自建)详解
Sep 19 #Javascript
js Canvas实现圆形时钟教程
Sep 19 #Javascript
Bootstrap模态框调用功能实现方法
Sep 19 #Javascript
javascript实现的上下无缝滚动效果
Sep 19 #Javascript
Angular ng-class详解及实例代码
Sep 19 #Javascript
javascript实现的左右无缝滚动效果
Sep 19 #Javascript
javascript实现图片左右滚动效果【可自动滚动,有左右按钮】
Sep 19 #Javascript
You might like
一个从别的网站抓取信息的例子(域名查询)
2006/10/09 PHP
php使用sql数据库 获取字段问题介绍
2013/08/12 PHP
让firefox支持IE的一些方法的javascript扩展函数代码
2010/01/02 Javascript
extjs 初始化checkboxgroup值的代码
2011/09/21 Javascript
博客侧边栏模块跟随滚动条滑动固定效果的实现方法(js+jquery等)
2013/03/24 Javascript
javascript实现可改变滚动方向的无缝滚动实例
2013/06/17 Javascript
js实现仿京东2级菜单效果(带延时功能)
2015/08/27 Javascript
js实现文件上传表单域美化特效
2015/11/02 Javascript
3种js实现string的substring方法
2015/11/09 Javascript
angular2倒计时组件使用详解
2017/01/12 Javascript
javascript中递归的两种写法
2017/01/17 Javascript
jQuery中元素选择器(element)简单用法示例
2018/05/14 jQuery
JavaScript数据结构与算法之检索算法示例【二分查找法、计算重复次数】
2019/02/22 Javascript
通过扫小程序码实现网站登陆功能
2019/08/22 Javascript
JavaScript如何把两个数组对象合并过程解析
2019/10/10 Javascript
解决VUEX的mapState/...mapState等取值问题
2020/07/24 Javascript
跟老齐学Python之再深点,更懂list
2014/09/20 Python
解决Django模板无法使用perms变量问题的方法
2017/09/10 Python
Python图像处理之直线和曲线的拟合与绘制【curve_fit()应用】
2018/12/26 Python
Python实现的IP端口扫描工具类示例
2019/02/15 Python
对Python中TKinter模块中的Label组件实例详解
2019/06/14 Python
pyqt5 使用cv2 显示图片,摄像头的实例
2019/06/27 Python
Python搭建Spark分布式集群环境
2019/07/05 Python
Python+Selenium使用Page Object实现页面自动化测试
2019/07/14 Python
Python更新所有已安装包的操作
2020/02/13 Python
将tf.batch_matmul替换成tf.matmul的实现
2020/06/18 Python
LookFantastic丹麦:英国美容护肤精品在线商城
2016/08/18 全球购物
瑞典廉价机票预订网站:Seat24
2018/06/19 全球购物
法国隐形眼镜网站:VisionDirect.fr
2020/03/03 全球购物
C语言面试题
2013/05/19 面试题
临床医学系毕业生推荐信
2013/11/09 职场文书
写给妈妈的道歉信
2014/01/11 职场文书
《明天,我们毕业》教学反思
2014/04/24 职场文书
表彰大会策划方案
2014/05/13 职场文书
中国文明网向国旗敬礼寄语大全
2014/09/27 职场文书
HTML页面中使两个div并排显示的实现
2022/05/15 HTML / CSS