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 字符串处理函数使用小结
Dec 02 Javascript
js 可拖动列表实现代码
Dec 13 Javascript
JQuery中$.each 和$(selector).each()的区别详解
Mar 13 Javascript
javascript实现的猜数小游戏完整实例代码
May 10 Javascript
BootStrap 轮播插件(carousel)支持左右手势滑动的方法(三种)
Jul 07 Javascript
jQuery实现表格与ckeckbox的全选与单选功能
Nov 24 Javascript
js使用Replace结合正则替换重复出现的字符串功能示例
Dec 27 Javascript
Angular开发者指南之入门介绍
Mar 05 Javascript
微信小程序 wx.request方法的异步封装实例详解
May 18 Javascript
详解vue-router数据加载与缓存使用总结
Oct 29 Javascript
layer 关闭指定弹出层的例子
Sep 25 Javascript
Vue实现省市区三级联动
Dec 27 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
8个必备的PHP功能实例代码
2013/10/27 PHP
ThinkPHP中使用Ueditor富文本编辑器
2015/09/02 PHP
thinkphp分页集成实例
2017/07/24 PHP
Laravel的Auth验证Token验证使用自定义Redis的例子
2019/09/30 PHP
tp5.1 框架join方法用法实例分析
2020/05/26 PHP
jQuery学习笔记 操作jQuery对象 CSS处理
2012/09/19 Javascript
JavaScript中“基本类型”之争小结
2013/01/03 Javascript
jquery struts 验证唯一标识(公用方法)
2013/03/27 Javascript
JS简单测试循环运行时间的方法
2016/09/04 Javascript
使用DeviceOne实现微信小程序功能
2016/12/29 Javascript
javaScript嗅探执行神器-sniffer.js
2017/02/14 Javascript
关于Sequelize连接查询时inlude中model和association的区别详解
2017/02/27 Javascript
jQuery插件HighCharts实现气泡图效果示例【附demo源码】
2017/03/13 Javascript
Javascript循环删除数组中元素的几种方法示例
2017/05/18 Javascript
vue2.0在没有dev-server.js下的本地数据配置方法
2018/02/23 Javascript
Node.js操作系统OS模块用法分析
2019/01/04 Javascript
Element Steps步骤条的使用方法
2020/07/26 Javascript
Vue检测屏幕变化来改变不同的charts样式实例
2020/10/26 Javascript
[02:12]Dota 2 推出全新英雄—— 电炎绝手
2019/08/23 DOTA
Python使用设计模式中的责任链模式与迭代器模式的示例
2016/03/02 Python
用Python将动态GIF图片倒放播放的方法
2016/11/02 Python
解决pycharm 误删掉项目文件的处理方法
2018/10/22 Python
PYQT5实现控制台显示功能的方法
2019/06/25 Python
基于Python检测动态物体颜色过程解析
2019/12/04 Python
Django自定义全局403、404、500错误页面的示例代码
2020/03/08 Python
pycharm解决关闭flask后依旧可以访问服务的问题
2020/04/03 Python
日本航空官方网站:JAL
2019/06/19 全球购物
巴西24小时在线药房:Drogasil
2020/06/20 全球购物
高三语文教学反思
2014/01/15 职场文书
施工安全责任书
2014/04/14 职场文书
花坛标语大全
2014/06/30 职场文书
营销总监岗位职责
2014/09/16 职场文书
材料采购员岗位职责
2015/04/03 职场文书
晚会开场白和结束语
2015/05/29 职场文书
学雷锋广播稿大全
2015/08/19 职场文书
2019个人工作总结
2019/06/21 职场文书