You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript网页上传图片后获取宽高返回0/undefined的解决方案问询

问题根因

你设置图片src属性后立刻读取尺寸,此时浏览器还未完成图片资源的加载解析,对应的宽高属性还没有被赋值,因此会返回0或者undefined。

正确实现方法

只需要在图片的load事件触发后再读取尺寸即可,load事件代表图片资源已经完全加载完成,此时可以拿到正确的数值。
你可以直接修改原有loadFile函数,修改后的完整代码如下:

<p><input type="file"  accept="image/*" name="image" id="file"  onchange="loadFile(event)" style="display: none;"></p>
<p><label for="file" style="cursor: pointer;">Upload Image</label></p>
<p><img id="output"/></p>

<script>
var loadFile = function(event) {
    const outputImg = document.getElementById('output');
    // 先绑定加载完成回调,再设置src,避免缓存场景下事件提前触发
    outputImg.onload = function() {
        // 获取图片原始分辨率,不受页面样式影响
        console.log('图片原始宽度:', this.naturalWidth);
        console.log('图片原始高度:', this.naturalHeight);
        // 如果需要获取图片在页面上实际渲染的尺寸,使用以下属性
        console.log('图片渲染宽度:', this.clientWidth);
        console.log('图片渲染高度:', this.clientHeight);
    };
    outputImg.src = URL.createObjectURL(event.target.files[0]);
};
</script>
属性说明
  • naturalWidth/naturalHeight:返回图片本身的真实分辨率,和页面展示样式、缩放无关,绝大多数场景下用这两个属性即可
  • clientWidth/clientHeight:返回图片在当前页面中实际渲染出来的尺寸,会受CSS设置、父容器大小、页面缩放的影响

如果你不需要在页面上展示图片就想提前获取尺寸,也可以单独创建临时Image对象加载资源:

var loadFile = function(event) {
    const tempImg = new Image();
    tempImg.onload = function() {
        console.log('原始宽度:', this.naturalWidth, '原始高度:', this.naturalHeight);
        // 拿到尺寸后再给页面展示的img赋值,按需使用
        document.getElementById('output').src = this.src;
    };
    tempImg.src = URL.createObjectURL(event.target.files[0]);
};

内容的提问来源于stack exchange,提问作者nostradam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 09:24:05