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 相关文章推荐
javascript动画之圆形运动,环绕鼠标运动作小球
Jul 20 Javascript
textarea中的手动换行处理的jquery代码
Feb 26 Javascript
PHP+mysql+Highcharts生成饼状图
May 04 Javascript
jquery实现触发时更新下拉列表内容的方法
Dec 02 Javascript
js判断输入字符串是否为空、空格、null的方法总结
Jun 14 Javascript
怎样判断jQuery当前元素是隐藏还是显示
Nov 23 Javascript
详解jQuery中关于Ajax的几个常用的函数
Jul 17 jQuery
js es6系列教程 - 新的类语法实战选项卡(详解)
Sep 02 Javascript
jquery动态添加带有样式的HTML标签元素方法
Feb 24 jQuery
vue2 中二级路由高亮问题及配置方法
Jun 10 Javascript
vue router总结 $router和$route及router与 router与route区别
Jul 05 Javascript
vuex入门最详细整理
Mar 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
php生成SessionID和图片校验码的思路和实现代码
2009/03/10 PHP
php解析xml提示Invalid byte 1 of 1-byte UTF-8 sequence错误的处理方法
2013/11/14 PHP
php array_values 返回数组的值实例详解
2016/11/17 PHP
php设计模式之职责链模式实例分析【星际争霸游戏案例】
2020/03/27 PHP
jQuery getJSON 处理json数据的代码
2010/07/26 Javascript
actionscript与javascript的区别
2011/05/25 Javascript
jquery实现多级下拉菜单的实例代码
2013/10/02 Javascript
用js代码改变单选框选中状态的简单实例
2013/12/18 Javascript
jQuery中andSelf()方法用法实例
2015/01/08 Javascript
jQuery实现带滚动线条导航效果的方法
2015/01/30 Javascript
vuejs动态组件给子组件传递数据的方法详解
2016/09/09 Javascript
用node和express连接mysql实现登录注册的实现代码
2017/07/05 Javascript
vue父子组件的嵌套的示例代码
2017/09/08 Javascript
详解小程序不同页面之间通讯的解决方案
2018/11/23 Javascript
浅谈redux, koa, express 中间件实现对比解析
2019/05/23 Javascript
Vue formData实现图片上传
2019/08/20 Javascript
NodeJS开发人员常见五个错误理解
2020/10/14 NodeJs
微信小程序中target和currentTarget的区别小结
2020/11/06 Javascript
JavaScript使用setTimeout实现倒计时效果
2021/02/19 Javascript
Python的内存泄漏及gc模块的使用分析
2014/07/16 Python
在Django的模型中执行原始SQL查询的方法
2015/07/21 Python
人机交互程序 python实现人机对话
2017/11/14 Python
分数霸榜! python助你微信跳一跳拿高分
2018/01/08 Python
tensorflow建立一个简单的神经网络的方法
2018/02/10 Python
python实现梯度下降算法
2020/03/24 Python
python获取微信企业号打卡数据并生成windows计划任务
2019/04/30 Python
使用html2canvas实现将html内容写入到canvas中生成图片
2020/01/03 HTML / CSS
英国版MAC彩妆品牌:Illamasqua
2018/04/18 全球购物
夜大毕业自我鉴定
2013/10/11 职场文书
外语系毕业生自荐信范文
2013/12/16 职场文书
总经理任命书范本
2014/06/05 职场文书
食堂厨师岗位职责
2014/08/25 职场文书
现役军人家属慰问信
2015/03/24 职场文书
因公司原因离职的辞职信范文
2015/05/12 职场文书
投资申请报告
2015/05/19 职场文书
解决mysql问题:由于找不到MSVCR120.dll,无法继续执行代码
2021/06/26 MySQL