fix: image
This commit is contained in:
@@ -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);
|
||||||
|
|||||||
Reference in New Issue
Block a user