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 实现的页面滚动时浮动窗口控件
Jul 10 Javascript
判断复选框是否被选中的两种方法
Jun 04 Javascript
显示今天的日期js代码(阳历和农历)
Sep 30 Javascript
使用ajax+jqtransform实现动态加载select
Dec 01 Javascript
js实现文字在按钮上滚动的方法
Aug 20 Javascript
jQuery实现点击按钮弹出可关闭层的浮动层插件
Sep 19 Javascript
JavaScript动态插入CSS的方法
Dec 10 Javascript
使用D3.js制作图表详解
Aug 13 Javascript
用Axios Element实现全局的请求loading的方法
Mar 15 Javascript
jQuery基于Ajax实现读取XML数据功能示例
May 31 jQuery
koa-router源码学习小结
Sep 07 Javascript
了解在JavaScript中将值转换为字符串的5种方法
Jun 06 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 判断访客是否为搜索引擎蜘蛛的函数代码
2011/07/29 PHP
PHP 函数call_user_func和call_user_func_array用法详解
2014/03/02 PHP
Yii中的relations数据关联查询及统计功能用法详解
2016/07/14 PHP
详谈php静态方法及普通方法的区别
2016/10/04 PHP
php批量修改表结构实例
2017/05/24 PHP
PHP封装curl的调用接口及常用函数详解
2018/05/31 PHP
php实现在线考试系统【附源码】
2018/09/18 PHP
JS创建优美的页面滑动块效果 - Glider.js
2007/09/27 Javascript
基于jquery实现的可以编辑选择的下拉框的代码
2010/11/19 Javascript
JS案例分享之金额小写转大写
2014/05/15 Javascript
jQuery插件boxScroll实现图片轮播特效
2015/07/14 Javascript
javascript中substring()、substr()、slice()的区别
2015/08/30 Javascript
js 转json格式的字符串为对象或数组(前后台)的方法
2016/11/02 Javascript
Javascript 一些需要注意的细节(必看篇)
2017/07/08 Javascript
Nodejs中crypto模块的安全知识讲解
2018/01/03 NodeJs
基于mpvue小程序使用echarts画折线图的方法示例
2019/04/24 Javascript
js中位数不足自动补位扩展padLeft、padRight实现代码
2020/04/06 Javascript
easy_install python包安装管理工具介绍
2013/02/10 Python
Python深入学习之特殊方法与多范式
2014/08/31 Python
python判断windows系统是32位还是64位的方法
2015/05/11 Python
CentOS 6.5下安装Python 3.5.2(与Python2并存)
2017/06/05 Python
Python实现PS图像调整之对比度调整功能示例
2018/01/26 Python
使用sklearn进行对数据标准化、归一化以及将数据还原的方法
2018/07/11 Python
Python实现计算文件MD5和SHA1的方法示例
2019/06/11 Python
Python学习笔记之函数的参数和返回值的使用
2019/11/20 Python
python科学计算之narray对象用法
2019/11/25 Python
Python变量作用域LEGB用法解析
2020/02/04 Python
python logging.basicConfig不生效的原因及解决
2020/02/20 Python
python 多线程中join()的作用
2020/10/29 Python
html5各种页面切换效果和模态对话框用法总结
2014/12/15 HTML / CSS
基于Html5 canvas实现裁剪图片和马赛克功能及又拍云上传图片 功能
2019/07/09 HTML / CSS
学生发电厂实习自我鉴定
2013/09/22 职场文书
《卖木雕的少年》教学反思
2014/04/11 职场文书
飞屋环游记观后感
2015/06/08 职场文书
浅谈Redis 中的过期删除策略和内存淘汰机制
2022/04/03 Redis
python游戏开发之pygame实现接球小游戏
2022/04/22 Python