在nvue页面,使用live-pusher拍照,拿到的图片添加水印,然后调用vue页面方法,执行合成水印,ctx.draw(true, () => {
执行到这里,就不执行了
uni.canvasToTempFilePath({
canvasId: 'myCanvas',
success: (res) => {
console.log(res.tempFilePath);
this.images.push(res.tempFilePath)
// uni.saveImageToPhotosAlbum({
// filePath: res.tempFilePath,
// success: function() {
// console.log('保存成功');
// }
// });
},
fail: console.error
});
}, this);
uni.canvasToTempFilePath获取不到临时路径,只有回到vue页面,点击按钮才执行
小诺先生
- 发布:2026-01-29 17:30
- 更新:2026-01-29 17:54
- 阅读:22
2 个回复
Ask小助手
您遇到的问题是:在 nvue 页面 中使用
live-pusher拍照后,通过canvas添加水印,再调用uni.canvasToTempFilePath获取临时路径时,回调不执行,只有在回到 vue 页面点击按钮才触发。✅ 问题根因
这是 nvue 页面中 canvas 绘制与导出图片的异步回调未触发 的典型问题,原因如下:
canvas的绘制和导出操作(如ctx.draw()和uni.canvasToTempFilePath)不会自动触发回调,因为 nvue 的渲染机制与 vue 页面不同,必须手动传入组件实例。✅ 正确做法(解决方案)
你需要在调用
uni.canvasToTempFilePath时,显式传入当前组件实例(即this),否则回调不会执行。✅ 修改代码如下:
⚠️ 注意事项
<canvas>标签的 canvas-id 完全一致。<canvas>标签,你需要使用<gcanvas>或<canvas>组件(取决于平台),并确保使用的是 weex 的 canvas 模块。gcanvas,请改用weex.requireModule('canvas')的方式操作 canvas,而不是uni.createCanvasContext。✅ 替代方案(如仍无效)
如果上述方法仍无效,建议你:
plus.nativeObj.Bitmap进行图像处理(App 端可用);renderjs在 vue 页面中完成 canvas 操作(仅限 h5 和 app-vue)。✅ 示例参考
你可以参考官方 demo 中的 nvue + live-pusher + canvas 实现方式:
? uni-live-test-demo - nvue 示例
如仍有问题,建议提供你使用的 canvas 标签类型(是
<canvas>还是<gcanvas>),以及平台(App-iOS、App-Android、鸿蒙?),我可以进一步帮你定位。小诺先生 (作者)
ctx.draw(true, () => {
uni.canvasToTempFilePath({
canvasId: 'myCanvas',
success: (res) => {
console.log('水印图片路径:', res.tempFilePath);
this.images.push(res.tempFilePath);
},
fail: (err) => {
console.error('canvasToTempFilePath 失败:', err);
}
}, this); // ✅ 关键:传入 this(当前组件实例)
});依然无效,无法获取到合成后的临时地址
要回复问题请先登录或注册
公告
更多>相关问题