fix: image

This commit is contained in:
zzc
2026-02-08 11:33:33 +08:00
parent 02c3fe1b12
commit ade79f62f9

View File

@@ -1122,17 +1122,19 @@ const saveByCanvas = async (save = true) => {
const ctx = canvas.getContext("2d"); const ctx = canvas.getContext("2d");
// 初始化画布尺寸 // 初始化画布尺寸
const dpr = uni.getSystemInfoSync().pixelRatio; const dpr = uni.getSystemInfoSync().pixelRatio || 2;
// 保持 540x960 的逻辑尺寸,为了清晰度可以考虑 * dpr // 为了高清画质,将物理像素设置为逻辑像素的 dpr
// 但为了保持和原来一致的输出尺寸,这里先固定物理尺寸 const baseW = 540;
// 如果要高清,可以 set width = 540 * dpr然后 scale(dpr, dpr) const baseH = 960;
// 这里为了简单兼容原逻辑,我们让物理尺寸等于逻辑尺寸 canvas.width = baseW * dpr;
canvas.width = 540; canvas.height = baseH * dpr;
canvas.height = 960;
// 画布尺寸rpx 转 px // 缩放上下文,使得后续绘制指令依然可以使用逻辑坐标 (baseW, baseH)
const W = 540; ctx.scale(dpr, dpr);
const H = 960;
// 画布尺寸(逻辑像素)
const W = baseW;
const H = baseH;
// 辅助函数:加载图片为 Image 对象 // 辅助函数:加载图片为 Image 对象
const loadCanvasImage = (url) => { const loadCanvasImage = (url) => {
@@ -1145,7 +1147,7 @@ const saveByCanvas = async (save = true) => {
}; };
// 辅助函数rpx 转 px (基于预览容器宽度 506rpx 对应 Canvas 540px) // 辅助函数rpx 转 px (基于预览容器宽度 506rpx 对应 Canvas 540px)
const r2p = (rpx) => (rpx * 540) / 506; const r2p = (rpx) => (rpx * baseW) / 506;
try { try {
// 1⃣ 画背景 // 1⃣ 画背景
@@ -1213,10 +1215,12 @@ const saveByCanvas = async (save = true) => {
// 6⃣ 输出 // 6⃣ 输出
uni.canvasToTempFilePath({ uni.canvasToTempFilePath({
canvas: canvas, // Canvas 2D 必须传 canvas 实例 canvas: canvas, // Canvas 2D 必须传 canvas 实例
width: W, width: canvas.width,
height: H, height: canvas.height,
destWidth: W, destWidth: canvas.width,
destHeight: H, destHeight: canvas.height,
fileType: "png", // 使用 PNG 避免 JPG 压缩损耗
quality: 1.0, // 最高质量
success: (res) => { success: (res) => {
if (save) saveImage(res.tempFilePath); if (save) saveImage(res.tempFilePath);
resolve(res.tempFilePath); resolve(res.tempFilePath);