uni-app nvue <image> 加载网络 webp格式图片失败
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格式图片失败
把src前面的:去掉
这里原来引用响应对象,直接放地址去掉:是一样的 这里书写有误
我拿你的代码都试过了,去掉:就行
是nvue页面吗 我这边是nvue页面里不行 vue页面是可以的 且nvue 页面.jpg 或png的是可以的
我自定义的组件 在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图片加载失败的几种思路,具体实现可能需要根据实际情况进行调整。