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技术技巧大全(五)
Jan 22 Javascript
用javascript添加控件自定义属性解析
Nov 25 Javascript
javascript eval(func())使用示例
Dec 05 Javascript
利用JS判断用户是否上网(连接网络)
Dec 23 Javascript
为jQuery添加Webkit的触摸的方法分享
Feb 02 Javascript
Bootstrap导航条的使用和理解3
Dec 14 Javascript
ES6新数据结构Set与WeakSet用法分析
Mar 31 Javascript
微信小程序 自定义消息提示框
Aug 06 Javascript
vue 中动态绑定class 和 style的方法代码详解
Jun 01 Javascript
Angular ui-roter 和AngularJS 通过 ocLazyLoad 实现动态(懒)加载模块和依赖
Nov 25 Javascript
微信小程序实现的绘制table表格功能示例
Apr 26 Javascript
js 数组当前行添加数据方法详解
Jul 28 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程序实现支持页面后退的两种方法
2008/06/30 PHP
教你如何解密 “ PHP 神盾解密工具 ”
2014/06/20 PHP
PHP使用适合阅读的格式显示文件大小的方法
2015/03/05 PHP
Yii视图CGridView实现操作按钮定义地址示例
2016/07/14 PHP
Using the TextRange Object
2006/10/14 Javascript
javascript函数中的arguments参数
2010/08/01 Javascript
document.getElementById的简写方式(获取id对象的简略写法)
2010/09/10 Javascript
jquery里的each使用方法详解
2010/12/22 Javascript
mailto的使用技巧分享
2012/12/21 Javascript
基于jquery实现在线选座订座之影院篇
2015/08/24 Javascript
Javascript页面跳转常见实现方式汇总
2015/11/28 Javascript
初识NodeJS服务端开发入门(Express+MySQL)
2017/04/07 NodeJs
jQuery中将json数据显示到页面表格的方法
2018/05/27 jQuery
关于在vue 中使用百度ueEditor编辑器的方法实例代码
2018/09/14 Javascript
Three.JS实现三维场景
2018/12/30 Javascript
原生js实现照片墙效果
2020/10/13 Javascript
Vue 集成 PDF.js 实现 PDF 预览和添加水印的步骤
2021/01/22 Vue.js
[07:09]2014DOTA2国际邀请赛-Newbee再次发威成功晋级决赛
2014/07/19 DOTA
python3使用tkinter实现ui界面简单实例
2014/01/10 Python
python实现绘制树枝简单示例
2014/07/24 Python
python解决Fedora解压zip时中文乱码的方法
2016/09/18 Python
Python3 关于pycharm自动导入包快捷设置的方法
2019/01/16 Python
python广度优先搜索得到两点间最短路径
2019/01/17 Python
python logging模块的使用详解
2020/10/23 Python
最新Python idle下载、安装与使用教程图文详解
2020/11/28 Python
北美三大旅游网站之一:Travelocity
2017/08/12 全球购物
Hotels.com日本:国外和海外住宿,酒店预订
2019/12/13 全球购物
美国专业消费电子及摄影器材网站:B&H Photo Video
2019/12/18 全球购物
北京鼎普科技股份有限公司软件测试面试题
2012/04/07 面试题
优秀员工个人的自我评价
2013/11/29 职场文书
建筑班组长岗位职责
2014/01/02 职场文书
超越自我演讲稿
2014/05/21 职场文书
广告学专业求职信
2014/06/19 职场文书
2015年教师节贺卡寄语
2015/03/24 职场文书
员工手册编写范本
2015/05/14 职场文书
HttpClient实现文件上传功能
2022/08/14 Java/Android