uni-app canvasToTempFilePath:fail fail canvas is empty

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

uni-app canvasToTempFilePath:fail fail canvas is empty

uni.canvasToTempFilePath({
canvasId: “canvas”,
success: (res) => {
console.log(‘canvas转成图片成功:’, res);
},
fail: (err) => {
console.log(‘canvas转成图片失败:’, err)
}
}, this)

↓↓↓ 各位大佬点点赞

1 回复

在处理 uni-app 中的 canvasToTempFilePath 方法失败并报错 “fail canvas is empty” 时,通常意味着你尝试从一个空的或者未正确绘制的 canvas 上获取图片。这个问题可能由多种原因引起,例如 canvas 绘制未完成就调用了 canvasToTempFilePath,或者 canvas 的尺寸设置不当导致内容未能在画布上正确显示。

以下是一个简单的代码示例,展示如何正确使用 uni-app 中的 canvas 并确保在绘制完成后调用 canvasToTempFilePath

<template>
  <view>
    <canvas canvas-id="myCanvas" style="width: 300px; height: 300px;"></canvas>
    <button @click="drawAndExport">Draw and Export</button>
    <image v-if="tempFilePath" :src="tempFilePath" style="width: 300px; height: 300px;"></image>
  </view>
</template>

<script>
export default {
  data() {
    return {
      tempFilePath: ''
    };
  },
  methods: {
    drawAndExport() {
      const ctx = uni.createCanvasContext('myCanvas');
      
      // 绘制内容到 canvas
      ctx.setFillStyle('red');
      ctx.fillRect(10, 10, 280, 280);
      
      // 绘制完成后调用 draw 方法
      ctx.draw(false, () => {
        // 确保绘制完成后再调用 canvasToTempFilePath
        uni.canvasToTempFilePath({
          canvasId: 'myCanvas',
          success: (res) => {
            this.tempFilePath = res.tempFilePath;
            console.log('Image saved to:', this.tempFilePath);
          },
          fail: (err) => {
            console.error('Failed to export canvas:', err);
          }
        });
      });
    }
  }
};
</script>

<style>
/* 添加一些基本的样式 */
</style>

在这个例子中,我们创建了一个 canvas 元素,并设置了一个按钮来触发绘制和导出操作。drawAndExport 方法中,我们首先使用 uni.createCanvasContext 获取 canvas 的绘图上下文,然后绘制一个红色的矩形。重要的是,我们在 ctx.draw 的回调函数中调用 uni.canvasToTempFilePath,确保所有的绘制操作都已完成。

注意,ctx.draw 的第一个参数是 reserve,设置为 false 表示不保留之前的绘制内容。如果你的应用逻辑需要在多次绘制之间保留内容,应将其设置为 true

确保 canvas 尺寸和内容匹配,避免内容因为尺寸问题而“看不见”,从而导致 “canvas is empty” 的错误。此外,检查是否有其他异步操作可能影响绘制流程,确保在正确的时机调用 canvasToTempFilePath

回到顶部