uni-app image组件不支持手机相册WEBP格式图片显示,JPG格式图片则显示正常

发布于 1周前 作者 zlyuanteng 来自 Uni-App

uni-app image组件不支持手机相册WEBP格式图片显示,JPG格式图片则显示正常

示例代码:

<image :src="url" @error="handleImageError" />  
<script>  
export default {  
  data() {  
    return {  
      url: 'file:///storage/emulated/0/Pictures/news_article/faa0e8adf07fa8b7492ca83f4a8aed09.webp'  
    }  
  }  
}  
</script>

操作步骤:

<image :src="url" @error="handleImageError" />  
<script>  
export default {  
  data() {  
    return {  
      url: 'file:///storage/emulated/0/Pictures/news_article/faa0e8adf07fa8b7492ca83f4a8aed09.webp'  
    }  
  }  
}  
</script>

预期结果:

能够正常显示手机相册WEBP格式图片

实际结果:

不显示显示手机相册WEBP格式图片。

最终测试确认:使用标准基座能正常显示手机相册中WEBP格式的图片,如果用自定义基座则不会显示手机相册中的WEBP格式图片。

image返回的错误信息如下:

{  
    "type": "error",  
    "timeStamp": 1710227288112,  
    "target": {  
        "id": "",  
        "dataset": {},  
        "offsetLeft": 0,  
        "offsetTop": 0  
    },  
    "currentTarget": {  
        "id": "",  
        "dataset": {},  
        "offsetLeft": 0,  
        "offsetTop": 0  
    },  
    "detail": {},  
    "stopPropagation": "function() { [native code] }"  
}

但是使用uni.previewImage则能正常预览该WEBP格式图片(file:///storage/emulated/0/Pictures/news_article/faa0e8adf07fa8b7492ca83f4a8aed09.webp)

bug描述:

使用image组件调用手机相册webp格式的图片不显示,jpg格式的则正常显示。

最终测试确认:使用标准基座能正常显示手机相册中WEBP格式的图片,如果用自定义基座则不会显示手机相册中的WEBP格式图片。不知道是什么原因,希望官方能帮助解答


24 回复

刚试了下,在项目static目录下没发现问题 <template>
<view>
<image src="../../static/logo.webp"></image>

</view>  
</template> <script> let that;
export default {  
    data() {  
        return {  

        };  
    },  
    onLoad() {  

    },  
    methods: {}  
}  
</script> <style lang="less"> </style>


static目录没问题,但是当读取手机相册里的WEBP则不显示,JPG则正常。

我这也是可以的


你的hbuilderx版本号是多少?是不是nvue开发?

我的就不不显示WEBP格式图片,JPG的显示

“size”: 129274,

“type”: “image”,

“url”: “file:///storage/emulated/0/Android/data/cn.ivup.yunshangshu/apps/UNIB2F336A/doc/uniapp_temp/compressed/1710228929082_Screenshot_20240308_201158_com.huawei.camera.jpg”,

“thumb”: “file:///storage/emulated/0/Android/data/cn.ivup.yunshangshu/apps/UNIB2F336A/doc/uniapp_temp/compressed/1710228929082_Screenshot_20240308_201158_com.huawei.camera.jpg”

“size”: 162252,

“type”: “image”,

“url”: “file:///storage/emulated/0/Pictures/news_article/faa0e8adf07fa8b7492ca83f4a8aed09.webp”,

“thumb”: “file:///storage/emulated/0/Pictures/news_article/faa0e8adf07fa8b7492ca83f4a8aed09.webp”

回复 i***@ivup.cn: hbx 3.99 ,nvue和vue都试过了,vue2,跟你都是一样的,,新创建的项目测试的

回复 套马杆的套子: 那么我也新创建一个项目测试看一下

回复 套马杆的套子: 太诡异了,同样的代码复制到新建测试项目正常。

回复 套马杆的套子: 最终测试确认:使用标准基座能正常显示手机相册中WEBP格式的图片,如果用自定义基座则不会显示手机相册中的WEBP格式图片。不知道是什么原因,希望官方能帮助解答

uni-app 中使用 <image> 组件时,确实存在某些情况下无法正常显示手机相册中的 WEBP 格式图片,而 JPG 格式图片可以正常显示的问题。这通常是由于以下原因导致的:

1. 平台兼容性问题

WEBP 是一种较新的图片格式,虽然在现代浏览器和大多数移动设备上得到了广泛支持,但在某些平台或环境中可能存在兼容性问题。uni-app<image> 组件底层依赖于不同平台的渲染引擎,如果平台的渲染引擎不支持 WEBP,则会导致图片无法正常显示。

解决方法:

  • WEBP 格式的图片转换为 JPGPNG 格式,确保在所有平台上都能正常显示。
  • 使用第三方工具或库在应用中动态将 WEBP 转换为其他格式。

2. <image> 组件的限制

uni-app<image> 组件在不同平台上的实现可能有所不同。例如,在小程序或某些 H5 环境中,可能对图片格式的支持有限。

解决方法:

  • 在使用 <image> 组件时,尽量使用常见的图片格式(如 JPGPNG),以确保兼容性。
  • 如果需要支持 WEBP,可以尝试使用 web-view 组件或其他第三方图片加载库(如 uViewlazy-load)来加载图片。

3. 服务器或本地路径问题

如果 WEBP 图片是从服务器加载的,可能需要检查服务器的 MIME 类型配置是否正确。如果 WEBP 图片是本地文件,可能需要检查文件路径是否正确。

解决方法:

  • 确保服务器正确配置了 WEBPMIME 类型(image/webp)。
  • 如果是本地文件,确保文件路径正确,并且文件没有被损坏。

4. 动态加载和转换

如果必须使用 WEBP 格式,可以在应用中动态检测图片格式,并在不支持 WEBP 的情况下将其转换为其他格式。

解决方法:

  • 使用 uni.getImageInfo API 获取图片信息,判断是否为 WEBP 格式,然后根据需要进行转换。
  • 使用第三方库(如 canvas)将 WEBP 图片转换为 JPGPNG 格式。

示例代码

以下是一个简单的示例,展示如何使用 uni.getImageInfo 检测图片格式并进行处理:

uni.chooseImage({
  success: (res) => {
    const tempFilePaths = res.tempFilePaths;
    uni.getImageInfo({
      src: tempFilePaths[0],
      success: (imageInfo) => {
        if (imageInfo.type === 'webp') {
          // 如果是 WEBP 格式,转换为 JPG
          this.convertToJPG(tempFilePaths[0]);
        } else {
          // 直接显示图片
          this.imageSrc = tempFilePaths[0];
        }
      }
    });
  }
});

methods: {
  convertToJPG(filePath) {
    // 使用 canvas 或其他工具将 WEBP 转换为 JPG
    // 这里只是一个示例,实际实现可能需要使用第三方库
    const canvas = document.createElement('canvas');
    const ctx = canvas.getContext('2d');
    const img = new Image();
    img.src = filePath;
    img.onload = () => {
      canvas.width = img.width;
      canvas.height = img.height;
      ctx.drawImage(img, 0, 0);
      const jpgUrl = canvas.toDataURL('image/jpeg', 1.0);
      this.imageSrc = jpgUrl;
    };
  }
}
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!