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 相关文章推荐
jquery监控数据是否变化(修正版)
Apr 12 Javascript
深入理解JavaScript系列(12) 变量对象(Variable Object)
Jan 16 Javascript
通过jQuery源码学习javascript(一)
Dec 27 Javascript
js实现一个省市区三级联动选择框代码分享
Mar 06 Javascript
浅谈js的ajax的异步和同步请求的问题
Oct 07 Javascript
在js中实现邮箱格式的验证方法(推荐)
Oct 24 Javascript
JavaScript正则获取地址栏中参数的方法
Mar 02 Javascript
vue移动端路由切换实例分析
May 14 Javascript
详解在Angular4中使用ng2-baidu-map的方法
Jun 19 Javascript
vue中使用百度脑图kityminder-core二次开发的实现
Sep 26 Javascript
JS实现放烟花效果
Mar 10 Javascript
vue样式穿透 ::v-deep的具体使用
Jun 04 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连接及读取和写入mysql数据库的常用代码
2014/08/11 PHP
分享一个Laravel好用的Cache宏
2015/03/02 PHP
PHP比较运算符的详细介绍
2015/09/29 PHP
PHP去掉json字符串中的反斜杠\及去掉双引号前的反斜杠
2015/09/30 PHP
详解提高使用Java反射的效率方法
2019/04/29 PHP
Thinkphp 在api开发中异常返回依然是html的解决方式
2019/10/16 PHP
Gambit vs ForZe BO3 第二场 2.13
2021/03/10 DOTA
JS创建优美的页面滑动块效果 - Glider.js
2007/09/27 Javascript
JS 对象介绍
2010/01/20 Javascript
jQuery实现表单input中提示文字value随鼠标焦点移进移出而显示或隐藏的代码
2010/03/21 Javascript
Javascript执行效率全面总结
2013/11/04 Javascript
Javascript的闭包详解
2014/12/26 Javascript
JavaScript学习笔记之JS对象
2015/01/22 Javascript
jquery实现触发时更新下拉列表内容的方法
2015/12/02 Javascript
微信小程序-消息提示框实例
2016/11/24 Javascript
原生js仿淘宝网商品放大镜效果
2017/02/28 Javascript
ES6模块化的import和export用法方法总结
2017/08/08 Javascript
微信小程序中实现手指缩放图片的示例代码
2018/03/13 Javascript
Flutter 超实用简单菜单弹出框 PopupMenuButton功能
2019/08/06 Javascript
JS中的算法与数据结构之集合(Set)实例详解
2019/08/20 Javascript
vue之组件内监控$store中定义变量的变化详解
2019/11/08 Javascript
JavaScript多种滤镜算法实现代码实例
2019/12/10 Javascript
实现一个Vue自定义指令懒加载的方法示例
2020/06/04 Javascript
八大排序算法的Python实现
2021/01/28 Python
PyTorch学习笔记之回归实战
2018/05/28 Python
centos 安装Python3 及对应的pip教程详解
2019/06/28 Python
python多线程高级锁condition简单用法示例
2019/11/07 Python
详解从Django Allauth中进行登录改造小结
2019/12/18 Python
python opencv实现信用卡的数字识别
2020/01/12 Python
英国网上香水店:Fragrance Direct
2016/07/20 全球购物
2014年中班元旦活动方案
2014/02/14 职场文书
2014年世界艾滋病日演讲稿
2014/11/28 职场文书
小学少先队辅导员述职报告
2015/01/10 职场文书
Vue3 Composition API的使用简介
2021/03/29 Vue.js
mybatis调用sqlserver存储过程返回结果集的方法
2021/05/08 SQL Server