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中判断Object、Array、Function等引用类型对象是否相等
Aug 29 Javascript
JQuery异步加载PartialView的方法
Jun 07 Javascript
vue的props实现子组件随父组件一起变化
Oct 27 Javascript
Bootstrap缩略图与警告框学习使用
Feb 08 Javascript
详解如何使用babel进行es6文件的编译
May 29 Javascript
mpvue 如何使用腾讯视频插件的方法
Jul 16 Javascript
iview tabs 顶部导航栏和模块切换栏的示例代码
Mar 04 Javascript
使用vue完成微信公众号网页小记(推荐)
Apr 28 Javascript
jQuery实现可编辑的表格
Dec 11 jQuery
JS数组属性去重并校验重复数据
Jan 10 Javascript
nestjs返回给前端数据格式的封装实现
Feb 22 Javascript
js实现弹框效果
Mar 24 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写入WRITE编码为UTF8的文件的实现代码
2008/07/07 PHP
php求一个网段开始与结束IP地址的方法
2015/07/09 PHP
如何在PHP中使用数组
2020/06/09 PHP
javascript图片相似度算法实现 js实现直方图和向量算法
2014/01/14 Javascript
用unescape反编码得出汉字示例
2014/04/24 Javascript
JavaScript学习笔记之Cookie对象
2015/01/22 Javascript
javascript模拟命名空间
2015/04/17 Javascript
javascript实现校验文件上传控件实例
2015/04/20 Javascript
基于javascript实现彩票随机数生成(简单版)
2020/04/17 Javascript
BootStrap初学者对弹出框和进度条的使用感觉
2016/06/27 Javascript
微信小程序注册60s倒计时功能 使用JS实现注册60s倒计时功能
2017/08/16 Javascript
详解JavaScript中的六种错误类型
2017/09/21 Javascript
JavaScript 中定义函数用 var foo = function () {} 和 function foo()区别介绍
2018/03/01 Javascript
vue 简单自动补全的输入框的示例
2018/03/12 Javascript
vue路由守卫及路由守卫无限循环问题详析
2019/09/05 Javascript
Vue父组件向子组件传值以及data和props的区别详解
2020/03/02 Javascript
基于vue+echarts 数据可视化大屏展示的方法示例
2020/03/09 Javascript
[06:33]3.19 DOTA2发布会 海涛、冷冷、2009见证希望
2014/03/21 DOTA
[01:27]DOTA2电竞之夜 今夜共饮庆功酒
2014/08/02 DOTA
[00:37]DOTA2上海特级锦标赛 Secert 战队宣传片
2016/03/03 DOTA
python subprocess 杀掉全部派生的子进程方法
2017/01/16 Python
使用python获取csv文本的某行或某列数据的实例
2018/04/03 Python
Python通过调用mysql存储过程实现更新数据功能示例
2018/04/03 Python
Python之文字转图片方法
2018/05/10 Python
python 实现语音聊天机器人的示例代码
2018/12/02 Python
Python实现操纵控制windows注册表的方法分析
2019/05/24 Python
Python-copy()与deepcopy()区别详解
2019/07/12 Python
使用python-pptx包批量修改ppt格式的实现
2020/02/14 Python
Python中sys模块功能与用法实例详解
2020/02/26 Python
Sunglasses Shop英国:欧洲领先的太阳镜在线供应商之一
2018/09/19 全球购物
Capitol Lighting的1800lighting.com:住宅和商业照明
2019/04/10 全球购物
Python里面如何实现tuple和list的转换
2012/06/13 面试题
乡下人家教学反思
2014/02/01 职场文书
孩子教育的心得体会
2014/09/01 职场文书
2014年政协委员工作总结
2014/12/01 职场文书
用python删除文件夹中的重复图片(图片去重)
2021/05/12 Python