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 相关文章推荐
使用JQUERY进行后台页面布局控制DIV实现左右式
Jan 07 Javascript
文本框倒叙输入让输入框的焦点始终在最开始的位置
Sep 01 Javascript
jquery实现相册一下滑动两次的方法
Feb 09 Javascript
js实现一个链接打开两个链接地址的方法
May 12 Javascript
jquery利用拖拽方式在图片上添加热链接
Nov 24 Javascript
Position属性之relative用法
Dec 14 Javascript
Angular 中 select指令用法详解
Sep 29 Javascript
JavaScript登录验证码的实现
Oct 27 Javascript
Angular.js中处理页面闪烁的方法详解
Mar 09 Javascript
利用原生js实现html5小游戏之打砖块(附源码)
Jan 03 Javascript
js将URL网址转为16进制加密与解密函数
Mar 04 Javascript
通过实例解析javascript Date对象属性及方法
Nov 04 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
WHOIS类的修改版
2006/10/09 PHP
phpmyadmin中配置文件现在需要绝密的短语密码的解决方法
2007/02/11 PHP
某大型网络公司应聘时的笔试题目附答案
2008/03/27 PHP
PHP 生成的XML以FLASH获取为乱码终极解决
2009/08/07 PHP
PHP PDO函数库详解
2010/04/27 PHP
php在项目中寻找代码的坏味道(综艺命名)
2012/07/19 PHP
php中inlcude()性能对比详解
2012/09/16 PHP
解析php中如何直接执行SHELL
2013/06/28 PHP
php递归方法实现无限分类实例代码
2014/02/28 PHP
分享PHP计算两个日期相差天数的代码
2015/12/23 PHP
实例讲解php数据访问
2016/05/09 PHP
PHP串行化与反串行化实例分析
2016/12/27 PHP
Javascript 更新 JavaScript 数组的 uniq 方法
2008/01/23 Javascript
js 操作符实例代码
2009/10/24 Javascript
在js中实现邮箱格式的验证方法(推荐)
2016/10/24 Javascript
js 输入框 正则表达式(菜鸟必看教程)
2017/02/19 Javascript
express框架实现基于Websocket建立的简易聊天室
2017/08/10 Javascript
nodejs基于mssql模块连接sqlserver数据库的简单封装操作示例
2018/01/05 NodeJs
浅析vue.js数组的变异方法
2018/06/30 Javascript
JavaScript实现的鼠标跟随特效示例【2则实例】
2018/12/22 Javascript
vue中使用element组件时事件想要传递其他参数的问题
2019/09/18 Javascript
nodejs中使用archive压缩文件的实现代码
2019/11/26 NodeJs
Vue列表如何实现滚动到指定位置样式改变效果
2020/05/09 Javascript
jquery更改元素属性attr()方法操作示例
2020/05/22 jQuery
Vue-cli assets SubDirectory及PublicPath区别详解
2020/08/18 Javascript
Python 稀疏矩阵-sparse 存储和转换
2017/05/27 Python
Python随机数函数代码实例解析
2020/02/09 Python
如何提高python 中for循环的效率
2020/04/15 Python
中国一家综合的外贸B2C电子商务网站:DealeXtreme(DX)
2020/03/10 全球购物
会议活动邀请函
2014/01/27 职场文书
党员批评与自我批评
2014/02/12 职场文书
优秀应届毕业生推荐信
2014/02/18 职场文书
文明和谐家庭事迹材料
2014/05/18 职场文书
村党支部书记承诺书
2014/05/29 职场文书
2014年图书馆工作总结
2014/11/25 职场文书
2017年寒假少先队活动总结
2016/04/06 职场文书