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 相关文章推荐
javascript中callee与caller的用法和应用场景
Dec 08 Javascript
来自国外的30个基于jquery的Web下拉菜单
Jun 22 Javascript
javascript中对Attr(dom中属性)的操作示例讲解
Dec 02 Javascript
浅谈js中的三种继承方式及其优缺点
Aug 10 Javascript
javascript滚轮控制模拟滚动条
Oct 19 Javascript
AngularJS深入探讨scope,继承结构,事件系统和生命周期
Nov 02 Javascript
原生JS实现层叠轮播图
May 17 Javascript
AngularJS 控制器 controller的详解
Oct 17 Javascript
webpack4之SplitChunksPlugin使用指南
Jun 12 Javascript
vscode中vue-cli项目es-lint的配置方法
Jul 30 Javascript
Vue插值、表达式、分隔符、指令知识小结
Oct 12 Javascript
vue3为什么要用proxy替代defineProperty
Oct 19 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实现验证码校验功能
2017/11/16 PHP
jquery 可拖拽的窗体控件实现代码
2010/03/21 Javascript
Javascript面象对象成员、共享成员变量实验
2010/11/19 Javascript
在JavaScript中实现类的方式探讨
2013/08/28 Javascript
JAVASCRIPT模式窗口中下载文件无法接收iframe的流
2013/10/11 Javascript
js控制分页打印、打印分页示例
2014/02/08 Javascript
JS使用ajax方法获取指定url的head信息中指定字段值的方法
2015/03/24 Javascript
JS获取网页图片name属性的方法
2015/04/01 Javascript
基于javascript实现图片预加载
2016/01/05 Javascript
详解JS中Array对象扩展与String对象扩展
2016/01/07 Javascript
使用jQuery.Qrcode插件在客户端动态生成二维码并添加自定义Logo
2016/09/01 Javascript
微信JS-SDK选取手机照片上传功能
2017/04/21 Javascript
30分钟快速入门掌握ES6/ES2015的核心内容(下)
2018/04/18 Javascript
webpack4.x开发环境配置详解
2018/08/04 Javascript
Vue Cli3 创建项目的方法步骤
2018/10/15 Javascript
clipboard在vue中的使用的方法示例
2018/10/19 Javascript
如何使用less实现随机下雪动画详解
2019/01/02 Javascript
vue使用el-upload上传文件及Feign服务间传递文件的方法
2019/03/15 Javascript
jQuery 筛选器简单操作示例
2019/10/02 jQuery
深入理解 ES6中的 Reflect用法
2020/07/18 Javascript
React冒泡和阻止冒泡的应用详解
2020/08/18 Javascript
vue实现移动端H5数字键盘组件使用详解
2020/08/25 Javascript
详解Howler.js Web音频播放终极解决方案
2020/08/23 Javascript
vue element-ui中table合计指定列求和实例
2020/11/02 Javascript
python 采集中文乱码问题的完美解决方法
2016/09/27 Python
Python之日期与时间处理模块(date和datetime)
2017/02/16 Python
PyQt5每天必学之进度条效果
2018/04/19 Python
对python字典元素的添加与修改方法详解
2018/07/06 Python
Python QQBot库的QQ聊天机器人
2019/06/19 Python
python如何将图片转换素描画
2020/09/08 Python
在HTML5 Canvas中放入图片和保存为图片的方法
2014/05/03 HTML / CSS
Ray-Ban雷朋西班牙官网:全球领先的太阳眼镜品牌
2018/11/28 全球购物
服装设计专业求职信
2014/06/16 职场文书
教师一帮一活动总结
2014/07/08 职场文书
代理人委托书
2014/08/01 职场文书
学校捐书倡议书
2015/04/27 职场文书