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圆角插件
Oct 26 Javascript
快速解决jquery之get缓存问题的最简单方法介绍
Dec 19 Javascript
js获得页面的高度和宽度的方法
Feb 23 Javascript
js获取窗口相对于屏幕左边和上边的位置坐标
May 15 Javascript
Node.js实现批量去除BOM文件头
Dec 20 Javascript
jQuery插件bgStretcher.js实现全屏背景特效
Jun 05 Javascript
Bootstrap字体图标无法正常显示的解决方法
Oct 08 Javascript
如何选择jQuery版本 1.x? 2.x? 3.x?
Apr 01 jQuery
详解如何使用Node.js编写命令工具——以vue-cli为例
Jun 29 Javascript
茶余饭后聊聊Vue3.0响应式数据那些事儿
Oct 30 Javascript
Vue 嵌套路由使用总结(推荐)
Jan 13 Javascript
Vue管理系统前端之组件拆分封装详解
Aug 23 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
回答PHPCHINA上的几个问题:URL映射
2007/02/14 PHP
coreseek 搜索英文的问题详解
2013/06/08 PHP
php使用for语句输出三角形的方法
2015/06/09 PHP
jQuery 瀑布流 浮动布局(一)(延迟AJAX加载图片)
2012/05/23 Javascript
JavaScript var声明变量背后的原理示例解析
2013/10/12 Javascript
js 删除数组的几种方法小结
2014/02/21 Javascript
JavaScript实现MIPS乘法模拟的方法
2015/04/17 Javascript
详解js中构造流程图的核心技术JsPlumb(2)
2015/12/08 Javascript
jquery实现定时自动轮播特效
2015/12/10 Javascript
JavaScript实现身份证验证代码
2016/02/17 Javascript
JavaScript中利用jQuery绑定事件的几种方式小结
2016/03/06 Javascript
Javascript之Date对象详解
2016/06/07 Javascript
javascript正则表达式模糊匹配IP地址功能示例
2017/01/06 Javascript
jQuery实现扑克正反面翻牌效果
2017/03/10 Javascript
微信小程序 数据绑定及运算的简单实例
2017/09/20 Javascript
template.js前端模板引擎使用详解
2017/10/10 Javascript
不使用 JS 匿名函数理由
2017/11/17 Javascript
浅谈angular4实际项目搭建总结
2017/12/01 Javascript
vue使用技巧及vue项目中遇到的问题
2018/06/04 Javascript
jquery实现的简单轮播图功能【适合新手】
2018/08/17 jQuery
vue使用Proxy实现双向绑定的方法示例
2019/03/20 Javascript
微信小程序时间戳转日期的详解
2019/04/30 Javascript
vue 实现微信浮标效果
2019/09/01 Javascript
js 解析 JSON 数据简单示例
2020/04/21 Javascript
vant组件中 dialog的确认按钮的回调事件操作
2020/11/04 Javascript
[38:23]2014 DOTA2国际邀请赛中国区预选赛 5 23 CIS VS LGD第一场
2014/05/24 DOTA
Python通过两个dataframe用for循环求笛卡尔积
2020/04/29 Python
python 通过文件夹导入包的操作
2020/06/01 Python
最新版 Windows10上安装Python 3.8.5的步骤详解
2020/11/28 Python
Opencv 图片的OCR识别的实战示例
2021/03/02 Python
美国高端医师级美容产品电商:BeautifiedYou.com
2017/04/17 全球购物
日本食品网上商店:JaponShop.com
2017/11/28 全球购物
处级干部反四风个人对照检查材料思想汇报
2014/09/27 职场文书
初中班主任教育随笔
2015/08/15 职场文书
2016年中秋节慰问信
2015/12/01 职场文书
《有余数的除法》教学反思
2016/02/22 职场文书