JavaScript获取图片的原始尺寸以宽度为例


Posted in Javascript onMay 04, 2014

页面里的img元素,想要获取它的原始尺寸,以宽度为例可能首先想到的就是width,如下

<img src="http://img11.360buyimg.com/da/g14/M07/01/0E/rBEhVlNhh8wIAAAAAADmFBLo1twAAM26gOmCgYAAOYs716.jpg"> 
<script> 
var img = document.getElementsByTagName('img')[0] 
var width = getWH(img, 'width') // 690 
</script>

这里使用的getWH方法是之前文章里提到的。这时候获取的宽度和图片的原始尺寸是一样的。

如果给img加上了width属性,这种方式就不行了,比如图片实际宽度是690,设置了width为400,这时按上面的方式获取则返回400

<img width="400" src="http://img11.360buyimg.com/da/g14/M07/01/0E/rBEhVlNhh8wIAAAAAADmFBLo1twAAM26gOmCgYAAOYs716.jpg"> 
<script> 
var img = document.getElementsByTagName('img')[0] 
var width = getWH(img, 'width') // 400 
</script>

很明显,400不是图片的原始宽度。

有一种方式可以获取到,直接创建一个新img对象,然后把旧img的src赋值给新的,这时候获取新img的宽度即可

<img width="400" src="http://img11.360buyimg.com/da/g14/M07/01/0E/rBEhVlNhh8wIAAAAAADmFBLo1twAAM26gOmCgYAAOYs716.jpg"> 
<script> 
function getNaturalWidth(img) { 
var image = new Image() 
image.src = img.src 
var naturalWidth = image.width 
return naturalWidth 
} 
var img = document.getElementsByTagName('img')[0] 
getNaturalWidth(img) // 690 
</script>

需要注意的是,这里新创建的image是不需要添加的DOM文档里的。

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

function getImgNaturalDimensions(img, callback) { 
var nWidth, nHeight 
if (img.naturalWidth) { // 现代浏览器 
nWidth = img.naturalWidth 
nHeight = img.naturalHeight 
} else { // IE6/7/8 
var imgae = new Image() 
image.src = img.src 
image.onload = function() { 
callback(image.width, image.height) 
} 
} 
return [nWidth, nHeight] 
}

注意IE6/7/8的处理,创建了一个新的img,仅设置其src,这时需要让图片完全载入后才可以获取其宽高。因此这里是异步的,可以传一个回调,回调里把原始的宽高作为参数传入。
Javascript 相关文章推荐
禁止F5等快捷键的JS代码
Mar 06 Javascript
js字符编码函数区别分析
Jun 05 Javascript
dess中一个简单的多路委托的实现
Jul 20 Javascript
Android中资源文件(非代码部分)的使用概览
Dec 18 Javascript
javascript解决innerText浏览器兼容问题思路代码
May 17 Javascript
Angular 根据 service 的状态更新 directive
Apr 03 Javascript
jQuery Ajax传值到Servlet出现乱码问题的解决方法
Oct 09 Javascript
JavaScript适配器模式详解
Oct 19 Javascript
JS简单获取并修改input文本框内容的方法示例
Apr 08 Javascript
webstorm中配置Eslint的两种方式及差异比较详解
Oct 19 Javascript
基于vue 实现表单中password输入的显示与隐藏功能
Jul 19 Javascript
详解Typescript里的This的使用方法
Jan 08 Javascript
使用JavaScript判断图片是否加载完成的三种实现方式
May 04 #Javascript
使用JavaScript获取电池状态的方法
May 03 #Javascript
JavaScript打印网页指定区域的例子
May 03 #Javascript
js检测输入内容全为空格的方法
May 03 #Javascript
JS兼容浏览器的导出Excel(CSV)文件的方法
May 03 #Javascript
离开当前页面前使用js判断条件提示是否要离开页面
May 02 #Javascript
js日期联动示例
May 02 #Javascript
You might like
PHP stream_context_create()作用和用法分析
2011/03/29 PHP
浅析php插件 Simple HTML DOM 用DOM方式处理HTML
2013/07/01 PHP
PHP获取不了React Native Fecth参数的解决办法
2016/08/26 PHP
10个基于浏览器的JavaScript调试工具分享
2013/02/07 Javascript
如何学习Javascript入门指导
2013/11/01 Javascript
利用JavaScript检测CPU使用率自己写的
2014/03/22 Javascript
推荐8款jQuery轻量级树形Tree插件
2014/11/12 Javascript
JavaScript通过setTimeout实时显示当前时间的方法
2015/04/16 Javascript
使用JavaScript的AngularJS库编写hello world的方法
2015/06/23 Javascript
在Html中使用Requirejs进行模块化开发实例详解
2016/04/15 Javascript
jQuery实现订单提交页发送短信功能前端处理方法
2016/07/04 Javascript
jQuery Validate表单验证插件的基本使用方法及功能拓展
2017/01/04 Javascript
vue scroller返回页面记住滚动位置的实例代码
2018/01/29 Javascript
详解基于Vue cli生成的Vue项目的webpack4升级
2018/06/19 Javascript
vue实现点击当前标签高亮效果【推荐】
2018/06/22 Javascript
vue.js的双向数据绑定Object.defineProperty方法的神奇之处
2019/01/18 Javascript
swiper Scrollbar滚动条组件详解
2019/09/08 Javascript
微信小程序实现蒙版弹出窗功能
2019/09/17 Javascript
python类继承与子类实例初始化用法分析
2015/04/17 Python
python开发之tkinter实现图形随鼠标移动的方法
2015/11/11 Python
Python解析树及树的遍历
2016/02/03 Python
python web框架学习笔记
2016/05/03 Python
PYTHON 中使用 GLOBAL引发的一系列问题
2016/10/12 Python
独特的python循环语句
2016/11/20 Python
利用Pandas和Numpy按时间戳将数据以Groupby方式分组
2019/07/22 Python
Python任务调度利器之APScheduler详解
2020/04/02 Python
美国珠宝店:Helzberg Diamonds
2018/10/24 全球购物
俄罗斯在线大型超市:ТутПросто
2021/01/08 全球购物
同步和异步有何异同,在什么情况下分别使用他们?
2012/12/28 面试题
关于建议书的格式范文
2014/05/20 职场文书
ktv周年庆活动方案
2014/08/18 职场文书
2015年师德师风自我评价范文
2015/03/05 职场文书
机关干部纪律作风整顿心得体会
2016/01/23 职场文书
管理者们如何制定2019年的工作计划?
2019/07/01 职场文书
Mysql实现简易版搜索引擎的示例代码
2021/08/30 MySQL
十大动画制作软件,Adobe产品上榜两款,第一是行业标准软件
2022/03/18 杂记