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