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高级程序设计 XML、Ajax 学习笔记
Sep 10 Javascript
JS 两日期相减,获得天数的小例子(兼容IE,FF)
Jul 01 Javascript
js使浏览器窗口最大化实现代码(适用于IE)
Aug 07 Javascript
js中Math之random,round,ceil,floor的用法总结
Dec 26 Javascript
jquery easyui 对于开始时间小于结束时间的判断示例
Mar 22 Javascript
从零学习node.js之利用express搭建简易论坛(七)
Feb 25 Javascript
jquery实现表单获取短信验证码代码
Mar 13 Javascript
javaScript动态添加Li元素的实例
Feb 24 Javascript
axios实现文件上传并获取进度
Mar 25 Javascript
jQuery 图片查看器插件 Viewer.js用法简单示例
Apr 04 jQuery
Threejs实现滴滴官网首页地球动画功能
Jul 13 Javascript
梳理一下vue中的生命周期
Dec 30 Vue.js
使用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
javascript编程起步(第五课)
2007/01/10 Javascript
OfflineSave离线保存代码再次发布使用说明
2007/05/23 Javascript
javascript对数组的常用操作代码 数组方法总汇
2011/01/27 Javascript
javascript ajax 仿百度分页函数
2013/10/29 Javascript
ExtJS中设置下拉列表框不可编辑的方法
2014/05/07 Javascript
js实现鼠标点击文本框自动选中内容的方法
2015/08/20 Javascript
JavaScript DOM 学习总结(五)
2015/11/24 Javascript
JS获取鼠标坐标并且根据鼠标位置不同弹出不同内容
2017/06/12 Javascript
vue中如何实现变量和字符串拼接
2017/06/19 Javascript
解决Extjs下拉框不显示的问题
2017/06/21 Javascript
原生js实现移动端触摸轮播的示例代码
2017/12/22 Javascript
JS中常用的消息框总结
2018/02/24 Javascript
快速解决vue动态绑定多个class的官方实例语法无效的问题
2018/09/05 Javascript
浅谈在不使用ssr的情况下解决Vue单页面SEO问题(2)
2018/11/08 Javascript
谈谈React中的Render Props模式
2018/12/06 Javascript
详解Jest结合Vue-test-utils使用的初步实践
2019/06/27 Javascript
vuejs+element UI table表格中实现禁用部分复选框的方法
2019/09/20 Javascript
Vue3 源码导读(推荐)
2019/10/14 Javascript
Vue组件模板的几种书写形式(3种)
2020/02/19 Javascript
ES5新增数组的实现方法
2020/05/12 Javascript
python多线程编程中的join函数使用心得
2014/09/02 Python
Python中itertools模块用法详解
2014/09/25 Python
python中实现精确的浮点数运算详解
2017/11/02 Python
详解Python中的动态属性和特性
2018/04/07 Python
Python操作列表常用方法实例小结【创建、遍历、统计、切片等】
2019/10/25 Python
python datetime处理时间小结
2020/04/16 Python
Python环境配置实现pip加速过程解析
2020/11/27 Python
八年级生物教学反思
2014/01/22 职场文书
小学毕业演讲稿
2014/04/25 职场文书
公司副总经理任命书
2014/06/05 职场文书
幼儿园六一亲子活动方案
2014/08/26 职场文书
硕士论文致谢范文
2015/05/14 职场文书
校园之声广播稿
2015/08/18 职场文书
话题作文之生命的旋律
2019/12/17 职场文书
python tkinter Entry控件的焦点移动操作
2021/05/22 Python
mysql脏页是什么
2021/07/26 MySQL