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 将disabled的元素置为enabled的三种方法
Jul 25 Javascript
JS比较两个时间大小的简单示例代码
Dec 20 Javascript
js实现格式化金额,字符,时间的方法
Feb 26 Javascript
Bootstrap开发实战之响应式轮播图
Jun 02 Javascript
jQuery图片左右滚动代码 有左右按钮实例
Jun 20 Javascript
BootStrap 可编辑表Table格
Nov 24 Javascript
浅谈Node.js:Buffer模块
Dec 05 Javascript
重新理解JavaScript的六种继承方式
Mar 24 Javascript
解决mpvue + vuex 开发微信小程序vuex辅助函数mapState、mapGetters不可用问题
Aug 03 Javascript
js中的数组对象排序分析
Dec 11 Javascript
详解key在Vue列表渲染时究竟起到了什么作用
Apr 20 Javascript
layui layer select 选择被遮挡的解决方法
Sep 21 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安全技术之 实现php基本安全
2010/09/04 PHP
php 目录遍历、删除 函数的使用介绍
2013/04/28 PHP
PHP生成自定义长度随机字符串的函数分享
2014/05/04 PHP
php实现的九九乘法口诀表简洁版
2014/07/28 PHP
PHP连接access数据库
2015/03/27 PHP
有趣的javascript数组定义方法
2010/09/10 Javascript
js判断输入是否为数字的具体实例
2013/08/03 Javascript
jQuery实现DIV层淡入淡出拖动特效的方法
2015/02/13 Javascript
jQuery中 delegate使用的问题
2015/07/03 Javascript
JS实现仿雅虎首页快捷登录入口及导航模块效果
2015/09/19 Javascript
跟我学习javascript的执行上下文
2015/11/18 Javascript
Ionic快速安装教程
2016/06/03 Javascript
jquery 点击元素后,滚动条滚动至该元素位置的方法
2016/08/05 Javascript
详解js树形控件—zTree使用总结
2016/12/28 Javascript
JS设置时间无效问题的解决办法
2017/02/18 Javascript
vue实现裁切图片同时实现放大、缩小、旋转功能
2018/03/02 Javascript
JS实现马赛克图片效果完整示例
2019/04/13 Javascript
jQuery实现轮播图效果
2019/11/26 jQuery
[02:16]深扒TI7聊天轮盘语音出处2
2017/05/11 DOTA
分享一下Python 开发者节省时间的10个方法
2015/10/02 Python
python中numpy包使用教程之数组和相关操作详解
2017/07/30 Python
python自定义函数实现最大值的输出方法
2019/07/09 Python
Django 批量插入数据的实现方法
2020/01/12 Python
Python 统计位数为偶数的数字代码详解
2020/03/15 Python
python 实现仿微信聊天时间格式化显示的代码
2020/04/17 Python
python中if及if-else如何使用
2020/06/02 Python
阿迪达斯英国官方网站:adidas英国
2019/08/13 全球购物
公司同意接收函
2014/01/13 职场文书
汉语言文学职业规划
2014/02/14 职场文书
五一口号
2014/06/19 职场文书
物流专业求职信
2014/06/30 职场文书
2014教师年度工作总结
2014/11/10 职场文书
集团财务总监岗位职责
2015/04/03 职场文书
python爬虫之利用selenium模块自动登录CSDN
2021/04/22 Python
解决pycharm下载库时出现Failed to install package的问题
2021/09/04 Python
Java tomcat手动配置servlet详解
2021/11/27 Java/Android