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 相关文章推荐
js事件冒泡实例分享(已测试)
Apr 23 Javascript
javascript内置对象操作详解
Feb 04 Javascript
js中字符串编码函数escape()、encodeURI()、encodeURIComponent()区别详解
Apr 01 Javascript
深入浅析JavaScript函数前面的加号和叹号
Jul 09 Javascript
AngularJS入门教程之更多模板详解
Aug 19 Javascript
js实现点击图片自动提交action的简单方法
Oct 16 Javascript
javascript工厂模式和构造函数模式创建对象方法解析
Dec 30 Javascript
JS及JQuery对Html内容编码,Html转义
Feb 17 Javascript
关于vue中的ajax请求和axios包问题
Apr 19 Javascript
antd组件Upload实现自己上传的实现示例
Dec 18 Javascript
Vue监听滚动实现锚点定位(双向)示例
Nov 13 Javascript
微信小程序 接入腾讯地图的两种写法
Jan 12 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读写音频文件信息的详解(支持WMA和MP3)
2013/05/10 PHP
phpize的深入理解
2013/06/03 PHP
thinkphp备份数据库的方法分享
2015/01/04 PHP
php实现短信发送代码
2015/07/05 PHP
PHP简单装饰器模式实现与用法示例
2017/06/22 PHP
Laravel中前端js上传图片到七牛云的示例代码
2017/09/04 PHP
用JavaScript获取DOM元素位置和尺寸大小的方法
2013/04/12 Javascript
ExtJS DOM元素操作经验分享
2013/08/28 Javascript
返回页面顶部top按钮通过锚点实现(自写)
2013/08/30 Javascript
js动态设置div的值下例子
2013/10/29 Javascript
jquery.post用法关于type设置问题补充
2014/01/03 Javascript
使用Node.js实现一个简单的FastCGI服务器实例
2014/06/09 Javascript
滚动条响应鼠标滑轮事件实现上下滚动的js代码
2014/06/30 Javascript
js选择并转移导航菜单示例代码
2014/08/19 Javascript
JQuery设置时间段下拉选择实例
2014/12/30 Javascript
jQuery的animate函数实现图文切换动画效果
2015/05/03 Javascript
javascript实现数组内值索引随机化及创建随机数组的方法
2015/08/10 Javascript
jQuery实现区域打印功能代码详解
2016/06/17 Javascript
Bootstrap缩略图与警告框学习使用
2017/02/08 Javascript
使用vue.js实现checkbox的全选和多个的删除功能
2017/02/17 Javascript
JavaScript操作文件_动力节点Java学院整理
2017/06/30 Javascript
layui-tree实现Ajax异步请求后动态添加节点的方法
2019/09/23 Javascript
《javascript设计模式》学习笔记七:Javascript面向对象程序设计组合模式详解
2020/04/08 Javascript
python 从远程服务器下载日志文件的程序
2013/02/10 Python
python使用PyQt5的简单方法
2019/02/27 Python
Python3 实现文件批量重命名示例代码
2019/06/03 Python
python命令行参数用法实例分析
2019/06/25 Python
Django 响应数据response的返回源码详解
2019/08/06 Python
对python while循环和双重循环的实例详解
2019/08/23 Python
流行文化收藏品:Sideshow(DC漫画,星球大战,漫威)
2019/03/17 全球购物
运动会入场词200字
2014/02/15 职场文书
租房协议书范本
2014/04/09 职场文书
2015年度培训工作总结范文
2015/04/02 职场文书
电影小兵张嘎观后感
2015/06/03 职场文书
html5调用摄像头实例代码
2021/06/28 HTML / CSS
Python如何利用pandas读取csv数据并绘图
2022/07/07 Python