uni.getimageinfo 是唯一能可靠获取图片原始宽高的 api,必须传合法可读路径(本地临时路径、包内路径或 https 地址),不支持 base64、data url 或相对路径;h5 需 cors 支持;@load 返回的是渲染尺寸而非原始分辨率。

uni.getImageInfo 是唯一能可靠获取图片原始宽高的 API,其他方式(比如 image 组件绑定 @load 或查 DOM 尺寸)拿到的都是渲染后尺寸,不是原始分辨率。
uni.getImageInfo 必须传 src 且需合法可读路径
-
src必须是本地临时路径(如tempFilePath)、本地包内路径(/static/xxx.jpg)、或 HTTPS 网络地址 - 不支持 base64 字符串、data URL、相对路径(如
../assets/xxx.png)——会直接报错fail err: invalid url - H5 平台下,网络图必须支持 CORS,否则返回
fail network error - App 和小程序平台对本地路径更宽松,但 H5 对路径协议和域名限制严格
示例:
uni.getImageInfo({
src: '/static/logo.png', // ✅ 合法
// src: 'data:image/png;base64,...' // ❌ 不支持
// src: '../assets/logo.png' // ❌ 路径解析失败
success: (res) => {
console.log(res.width, res.height); // 原始像素宽高
},
fail: (err) => {
console.error(err.errMsg); // 比如 'fail invalid url'
}
});
图片还没加载完成时调用 uni.getImageInfo 会失败
- 即使
src是静态资源,也要确保文件已存在且可访问 - 在
onLoad或onReady钩子中调用通常安全;但若src来自异步接口(如上传后返回的tempFilePath),务必等数据就绪再查 - 不要用
setTimeout猜时机,应依赖业务逻辑触发点(例如用户选择图片后立刻调用)
常见错误现象:
- 控制台输出
fail file not found→ 路径不存在或拼写错误 - 返回
width/height为 0 → 文件为空、损坏,或跨域拦截(H5)
image 组件的 @load 只返回渲染尺寸,不是原始尺寸
-
@load回调里的event.detail.width和event.detail.height是该元素在页面上实际渲染出的 CSS 尺寸(受mode、父容器、缩放影响) - 例如一张 2000×1500 的图,在
mode="aspectFit"下撑满 375px 宽的屏幕,@load返回的可能是375和281,而非2000和1500 - 如果你误用这个值做压缩或裁剪计算,结果会严重失真
所以:
- 需原始分辨率 → 用
uni.getImageInfo - 只关心显示区域大小 → 可用
uni.createSelectorQuery查boundingClientRect
原始宽高不是“查一次就永远有效”的值。如果图片内容可能被服务端动态替换(比如 CDN 缓存未更新、同一 URL 对应不同尺寸版本),uni.getImageInfo 每次都会重新读取文件头,返回真实当前尺寸——这点比缓存 DOM 查询更可信,但也意味着不能省略调用。











