uni-app nvue <image> 加载网络 webp格式图片失败

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

uni-app nvue <image> 加载网络 webp格式图片失败

产品分类

  • uniapp/App

PC开发环境操作系统

  • Mac

PC开发环境操作系统版本号

  • Retina, 13-inch, 2020

手机系统

  • Android

手机系统版本号

  • Android 14

手机厂商

  • OPPO

手机机型

  • oppo

页面类型

  • nvue

vue版本

  • vue3

打包方式

  • 离线

项目创建方式

  • CLI

CLI版本号

  • 3

示例代码

<image :src="https://osscdnpic.bestxinrui.com/avatar_frame/jude.webp" ></image>

操作步骤

<image :src="https://osscdnpic.bestxinrui.com/avatar_frame/jude.webp" ></image>

预期结果

  • 能够正常显示

实际结果

  • 触发了@error 没有错误信息 detail为{}
  • uni.getImageInfo(OBJECT) 可以获取到图片信息

bug描述

  • nvue <image> 加载网络 webp格式图片失败

9 回复

把src前面的:去掉


这里原来引用响应对象,直接放地址去掉:是一样的 这里书写有误

我拿你的代码都试过了,去掉:就行

看附件图片

是nvue页面吗 我这边是nvue页面里不行 vue页面是可以的 且nvue 页面.jpg 或png的是可以的

vue3 的cli项目 自定义基座

我自定义的组件 在nvue页面 webp加载失败 放到vue页页就可以正常显示

解决了 官方也不给说明一下 最终原因 Android下需要依赖web的动画库 implementation ‘com.facebook.fresco:animated-webp:2.5.0’

在uni-app中使用nvue页面加载网络webp格式图片失败的问题,可能是由于nvue的原生渲染引擎对webp格式的支持不完全或者存在某些限制。为了解决这个问题,我们可以尝试以下几种方法,这里主要通过代码示例来展示如何处理这种情况。

方法一:使用canvas转换格式

一种可能的解决方案是在nvue中使用canvas将webp格式的图片转换为支持的格式(如png或jpeg),然后再进行显示。下面是一个简单的示例:

<template>
  <div>
    <canvas canvas-id="myCanvas" style="width: 300px; height: 300px;"></canvas>
    <image :src="convertedImageSrc" style="width: 300px; height: 300px;"></image>
  </div>
</template>

<script>
export default {
  data() {
    return {
      convertedImageSrc: ''
    };
  },
  mounted() {
    const webpImageUrl = 'https://example.com/image.webp';
    this.convertWebPToPNG(webpImageUrl);
  },
  methods: {
    convertWebPToPNG(url) {
      const ctx = uni.createCanvasContext('myCanvas');
      uni.getImageInfo({
        src: url,
        success: (res) => {
          ctx.drawImage(res.path, 0, 0, 300, 300);
          ctx.draw(false, () => {
            uni.canvasToTempFilePath({
              canvasId: 'myCanvas',
              success: (result) => {
                this.convertedImageSrc = result.tempFilePath;
              },
              fail: (err) => {
                console.error('Canvas to temp file path failed:', err);
              }
            });
          });
        },
        fail: (err) => {
          console.error('Get image info failed:', err);
        }
      });
    }
  }
};
</script>

方法二:服务端转换

如果客户端转换不可行或性能不佳,可以考虑在服务端将webp图片转换为其他格式,然后提供转换后的图片URL给客户端。这需要后端支持,具体实现取决于后端技术栈。

方法三:降级处理

如果以上方法都不可行,可以考虑降级处理,即当用户尝试加载webp图片时,显示一个占位图或提示用户图片无法加载。这可以通过简单的条件渲染实现。

<template>
  <image :src="imageSrc" @error="onError" style="width: 300px; height: 300px;"></image>
</template>

<script>
export default {
  data() {
    return {
      imageSrc: 'https://example.com/image.webp'
    };
  },
  methods: {
    onError() {
      this.imageSrc = 'https://example.com/placeholder.png'; // 占位图URL
    }
  }
};
</script>

以上方法提供了在nvue中处理webp图片加载失败的几种思路,具体实现可能需要根据实际情况进行调整。

回到顶部