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 相关文章推荐
非常有用的40款jQuery 插件推荐(系列二)
Dec 25 Javascript
Javascript之this关键字深入解析
Nov 12 Javascript
javascript修改图片src的方法
Jan 27 Javascript
Bootstrap组件系列之福利篇几款好用的组件(推荐二)
Jul 12 Javascript
JS批量替换内容中关键词为超链接
Feb 20 Javascript
深究AngularJS中$sce的使用
Jun 12 Javascript
简单的网页广告特效实例
Aug 19 Javascript
vue源码学习之Object.defineProperty对象属性监听
May 30 Javascript
Vue 组件参数校验与非props特性的方法
Feb 12 Javascript
使用 Jest 和 Supertest 进行接口端点测试实例详解
Apr 25 Javascript
深入解析微信小程序开发中遇到的几个小问题
Jul 11 Javascript
WebStorm中如何将自己的代码上传到github示例详解
Oct 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文件上传小程序 适合初学者学习!
2019/05/23 PHP
用javascript实现给图片加链接
2007/08/15 Javascript
javascript实现的DES加密示例
2013/10/30 Javascript
解决JS中乘法的浮点错误的方法
2014/01/03 Javascript
JS判断移动端访问设备并加载对应CSS样式
2014/06/13 Javascript
JavaScript获得表单target属性的方法
2015/04/02 Javascript
JavaScript 七大技巧(二)
2015/12/13 Javascript
Node.js项目中调用JavaScript的EJS模板库的方法
2016/03/11 Javascript
jQuery操作动态生成的内容的方法
2016/05/28 Javascript
分享jQuery封装好的一些常用操作
2016/07/28 Javascript
常用原生js自定义函数总结
2016/11/20 Javascript
创建一般js对象的几种方式
2017/01/19 Javascript
JS开发中基本数据类型具体有哪几种
2017/10/19 Javascript
BootStrap TreeView使用实例详解
2017/11/01 Javascript
vue中手机号,邮箱正则验证以及60s发送验证码的实例
2018/03/16 Javascript
vue 组件简介
2020/07/31 Javascript
JavaScript实现简单日历效果
2020/09/11 Javascript
[59:44]2018DOTA2亚洲邀请赛 3.31 小组赛 B组 paiN vs iG
2018/03/31 DOTA
[01:36]极致酷炫!TI9典藏宝瓶+撼地者至宝展示
2019/06/11 DOTA
python新手经常遇到的17个错误分析
2014/07/30 Python
python使用pycharm环境调用opencv库
2018/02/11 Python
python logging重复记录日志问题的解决方法
2018/07/12 Python
selenium获取当前页面的url、源码、title的方法
2019/06/12 Python
基于h5py的使用及数据封装代码
2019/12/26 Python
在python tkinter界面中添加按钮的实例
2020/03/04 Python
基于PyQT实现区分左键双击和单击
2020/05/19 Python
python 浮点数四舍五入需要注意的地方
2020/08/18 Python
CSS3 background-image颜色渐变的实现代码
2018/09/13 HTML / CSS
英国家居用品和家居装饰品购物网站:Cox & Cox
2019/08/25 全球购物
请用Python写一个获取用户输入数字,并根据数字大小输出不同信息的脚本
2014/05/20 面试题
车间班组长的职责
2013/12/13 职场文书
生物学学生自我评价
2014/01/17 职场文书
2014年帮扶工作总结
2014/11/26 职场文书
2016计算机专业毕业生自荐信
2016/01/28 职场文书
聊聊golang中多个defer的执行顺序
2021/05/08 Golang
Mysql关于数据库是否应该使用外键约束详解说明
2021/10/24 MySQL