JavaScript获取图片原始尺寸的方法与兼容性处理

作者:木棉

时间:2026-10-28

浏览:91

本文介绍如何在JavaScript中获取图片的原始尺寸。通过对比直接读取width属性与使用new Image()对象赋值src的方法,指出后者可绕过CSS或HTML属性限制。同时介绍HTML5提供的naturalWidth和naturalHeight属性,并给出针对IE6-8等旧浏览器的异步回调兼容方案。

文章目录

JavaScript获取图片原始尺寸的方法与兼容性处理

在网页开发中,若需获取页面中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像素,但HTML中设置了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属性。由于此时需要等待图片完全加载后才能获取宽高,因此该过程是异步的。可以通过传入回调函数来处理结果,在回调中将原始宽高作为参数传入。

实用工具推荐

电子包浆

绿化、压缩、噪点和虚拟水印,自由调节做旧程度。

使用 ›
图片压缩

选择画质和输出格式,预览压缩前后的大小。

使用 ›
相关文章