uni-app uni.getImageInfo 同一张图片不同系统返回值不一样

uni-app uni.getImageInfo 同一张图片不同系统返回值不一样

测试过的手机:

  • 苹果11
  • 华为nova9
  • 小米14pro

示例代码:

安卓:

[
null,
{
"path": "file:///storage/emulated/0/Android/data/com.kandong/apps/UNIC426FD5/doc/uniapp_temp_1713428802382/download/1713428803086",
"width": 1620,
"height": 1080,
"orientation": "left",
"type": "jpeg",
"errMsg": "getImageInfo:ok"
}
]

苹果:

[
null,
{
"height": 1620,
"orientation": "left",
"path": "file:///var/mobile/Containers/Data/Application/CC2604BE-6E48-4528-9CA2-901E80DE3909/Documents/Pandora/apps/D0E581695A697971510A5877A12BC801/doc/uniapp_temp_1713429027288/download/6D2766BE329103BF7BDE6786EB756FD5.png",
"type": "jpeg",
"width": 1080,
"errMsg": "getImageInfo:ok"
}
]

操作步骤:

  • 正常操作

预期结果:

  • 返回相同结果

实际结果:

  • 不相同

bug描述:

使用uni.getImageInfo获取图片信息,安卓手机和苹果手机返回的结果不一致,安卓得到的width和height是相反的。

图片地址:

信息类别 描述
产品分类 uniapp/App
PC开发环境操作系统 Windows
PC开发环境操作系统版本号 11
HBuilderX类型 正式
HBuilderX版本号 3.99
手机系统 全部
手机厂商 华为
页面类型 vue
vue版本 vue2
打包方式 云端
项目创建方式 HBuilderX

更多关于uni-app uni.getImageInfo 同一张图片不同系统返回值不一样的实战教程也可以访问 https://www.itying.com/category-93-b0.html

15 回复

你的图片在安卓和苹果中图库中存储的方向一致不?是都是竖向的?还是都是横向的?还是一个竖向的一个横向的?

更多关于uni-app uni.getImageInfo 同一张图片不同系统返回值不一样的实战教程也可以访问 https://www.itying.com/category-93-b0.html


都是一致的竖向

回复 传播星球: 华为手机?

是所有安卓手机都这样,还是某个品牌的这样?

回复 锦鲤丶接单丶: 只测试了华为和小米,安卓手机这张图片应该都是不对的。苹果手机得到的结果是对的

最近提的问题官方都不看嘛?一个反馈都没有

@DCloud_App_Array 负责人是你,你的结论呢?

你根据不同型号的手机单独处理一下呗,我们之前也遇到过,都是单独处理的

这咋处理阿,所有图片都这样

回复 传播星球: 手动旋转一下

在 uni-app 中使用 uni.getImageInfo 获取图片信息时,可能会遇到不同系统(如 iOS 和 Android)返回的值不一致的情况。这通常是由于不同平台的底层实现和图片处理机制不同所导致的。

以下是一些可能导致返回值不一致的原因及解决方法:


1. 图片路径格式不同

  • 问题:iOS 和 Android 对图片路径的处理方式不同,可能导致 uni.getImageInfo 获取到的 path 字段不一致。
  • 解决方法
    • 确保图片路径是跨平台兼容的,比如使用相对路径或网络路径。
    • 如果是本地图片,建议将图片放在 static 目录下,并在代码中引用时使用绝对路径。

2. 图片尺寸单位不同

  • 问题:iOS 和 Android 对图片尺寸(widthheight)的处理可能不同,尤其是在涉及设备像素比(pixelRatio)时。
  • 解决方法
    • 如果需要精确的图片尺寸,可以手动计算设备像素比并调整结果。
    • 使用 uni.getSystemInfoSync() 获取设备的 pixelRatio,然后根据比例调整图片尺寸。

3. 图片格式支持不同

  • 问题:不同平台支持的图片格式可能不同,比如某些格式在 iOS 上支持,但在 Android 上不支持。
  • 解决方法
    • 尽量使用跨平台支持的图片格式(如 PNG、JPG)。
    • 如果必须使用特定格式,可以在代码中判断平台并做兼容处理。

4. 缓存机制不同

  • 问题:iOS 和 Android 的图片缓存机制不同,可能导致 uni.getImageInfo 获取到的信息不一致。
  • 解决方法
    • 确保每次调用 uni.getImageInfo 时,图片是最新的。
    • 如果是网络图片,可以在 URL 中添加时间戳或随机参数,避免缓存影响。

5. API 实现差异

  • 问题uni.getImageInfo 在不同平台的底层实现可能不同,导致返回值不一致。
  • 解决方法
    • 在代码中判断当前平台(使用 uni.getSystemInfoSync().platform),然后针对不同平台做兼容处理。
    • 如果问题严重影响功能,可以尝试使用其他图片处理库或原生插件。

示例代码

以下是一个兼容不同平台的示例代码:

uni.getImageInfo({
  src: 'https://example.com/image.png',
  success: (res) => {
    const platform = uni.getSystemInfoSync().platform;
    let width = res.width;
    let height = res.height;

    // 如果是 Android,可能需要根据设备像素比调整尺寸
    if (platform === 'android') {
      const pixelRatio = uni.getSystemInfoSync().pixelRatio;
      width = width / pixelRatio;
      height = height / pixelRatio;
    }

    console.log('图片信息:', { width, height, path: res.path });
  },
  fail: (err) => {
    console.error('获取图片信息失败:', err);
  }
});
回到顶部