diff --git a/pages/make/index.vue b/pages/make/index.vue index 71466f7..706b23e 100644 --- a/pages/make/index.vue +++ b/pages/make/index.vue @@ -1180,6 +1180,12 @@ const saveByCanvas = async (save = true) => { canvas.width = baseW * dpr; canvas.height = baseH * dpr; + // ⚠️ 关键修复:重置变换矩阵,防止多次调用导致 scale 累积 + // 支付宝小程序在设置 width/height 后可能未完全重置 Context 状态 + ctx.setTransform(1, 0, 0, 1, 0, 0); + // 清空画布(使用物理像素尺寸) + ctx.clearRect(0, 0, canvas.width, canvas.height); + // 缩放上下文,使得后续绘制指令依然可以使用逻辑坐标 (baseW, baseH) ctx.scale(dpr, dpr); @@ -1201,6 +1207,11 @@ const saveByCanvas = async (save = true) => { const r2p = (rpx) => (rpx * baseW) / 506; try { + // #ifdef MP-ALIPAY + // 支付宝环境:显式等待 Canvas 节点就绪,避免过早绘制 + await new Promise((resolve) => setTimeout(resolve, 300)); + // #endif + // 1️⃣ 画背景 // ⭐ 先加载背景图 const [bgImg, avatarImg, titleImg] = await Promise.all([ @@ -1266,6 +1277,11 @@ const saveByCanvas = async (save = true) => { }); // 6️⃣ 输出 + // #ifdef MP-ALIPAY + // 支付宝环境:等待绘制指令执行完毕,确保渲染完成 + await new Promise((resolve) => setTimeout(resolve, 300)); + // #endif + uni.canvasToTempFilePath({ canvas: canvas, // Canvas 2D 必须传 canvas 实例 width: canvas.width, diff --git a/pages/mine/mine.vue b/pages/mine/mine.vue index 807b0d5..db42fa2 100644 --- a/pages/mine/mine.vue +++ b/pages/mine/mine.vue @@ -159,7 +159,7 @@ const userInfo = computed(() => ({ const isLoggedIn = computed(() => !!userStore.userInfo.nickName); -const isIos = computed(() => uni.getSystemInfoSync().osName === "ios"); +const isIos = false; onMounted(() => { const sysInfo = uni.getSystemInfoSync();