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 相关文章推荐
通过Jscript中@cc_on 语句识别IE浏览器及版本的代码
May 07 Javascript
另一个javascript小测验(代码集合)
Jul 27 Javascript
用JQUERY增删元素的代码
Feb 14 Javascript
jquery星级插件、支持页面中多次使用
Mar 25 Javascript
使用jQuery.wechat构建微信WEB应用
Oct 09 Javascript
JQuery通过AJAX从后台获取信息显示在表格上并支持行选中
Sep 15 Javascript
AngularJS手动表单验证
Feb 01 Javascript
js动态添加的DIV中的onclick事件简单实例
Jul 25 Javascript
jQuery使用$获取对象后检查该对象是否存在的实现方法
Sep 04 Javascript
js,jq,css多方面实现简易下拉菜单功能
May 13 Javascript
jQuery实现基本动画效果的方法详解
Sep 06 jQuery
浅谈JavaScript中this的指向更改
Jul 28 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获取从百度、谷歌等搜索引擎进入网站关键词的方法
2015/07/08 PHP
详解PHP字符串替换str_replace()函数四种用法
2017/10/13 PHP
基于jquery的给文章加入关键字链接
2010/10/26 Javascript
jquery结合CSS使用validate实现漂亮的验证
2015/01/29 Javascript
javascript实现删除前弹出确认框
2015/06/04 Javascript
nodejs爬虫抓取数据之编码问题
2015/07/03 NodeJs
谈一谈javascript闭包
2016/01/28 Javascript
JS简单实现String转Date的方法
2016/03/02 Javascript
Bootstrap每天必学之模态框(Modal)插件
2016/04/26 Javascript
BootStrap的JS插件之轮播效果案例详解
2016/05/16 Javascript
JS操作JSON方法总结(推荐)
2016/06/14 Javascript
解析JavaScript模仿块级作用域
2016/12/29 Javascript
jQuery插件FusionCharts绘制的2D条状图效果【附demo源码】
2017/05/13 jQuery
Node.js 利用cheerio制作简单的网页爬虫示例
2018/03/01 Javascript
vue axios请求超时的正确处理方法
2018/04/02 Javascript
Angularjs中date过滤器失效的问题及解决方法
2018/07/06 Javascript
jQuery实现网页拼图游戏
2020/04/22 jQuery
小程序实现搜索框
2020/06/19 Javascript
Nest.js散列与加密实例详解
2021/02/24 Javascript
[01:06:18]DOTA2-DPC中国联赛 正赛 Phoenix vs Dynasty BO3 第二场 1月26日
2021/03/11 DOTA
深入Python解释器理解Python中的字节码
2015/04/01 Python
python中管道用法入门实例
2015/06/04 Python
Python脚本实现虾米网签到功能
2016/04/12 Python
Python MD5加密实例详解
2017/08/02 Python
Python3安装Pillow与PIL的方法
2019/04/03 Python
浅谈python新式类和旧式类区别
2019/04/26 Python
python装饰器的特性原理详解
2019/12/25 Python
Python读取配置文件(config.ini)以及写入配置文件
2020/04/08 Python
Python2手动安装更新pip过程实例解析
2020/07/16 Python
英国第二大营养品供应商:Vitabiotics
2016/10/01 全球购物
介绍一下Linux中的链接
2016/06/05 面试题
销售会计工作职责
2013/12/02 职场文书
函授大学生自我鉴定
2014/02/05 职场文书
端午节活动策划方案
2014/03/09 职场文书
安全生产承诺书
2014/03/26 职场文书
2014年小学教学工作总结
2014/11/13 职场文书