feat: ntrp逻辑变更 & 替换海报二维码

This commit is contained in:
2025-10-06 14:52:31 +08:00
parent f2e9d20094
commit 05b941613c
11 changed files with 430 additions and 207 deletions

View File

@@ -1,7 +1,7 @@
import Taro from "@tarojs/taro";
const qrCodeUrl =
"https://bimwe.oss-cn-shanghai.aliyuncs.com/front/ball/images/5e013195-fc79-4082-bf06-9aa79aea65ae.png";
// const qrCodeUrl =
// "https://bimwe.oss-cn-shanghai.aliyuncs.com/front/ball/images/5e013195-fc79-4082-bf06-9aa79aea65ae.png";
const ringUrl =
"https://bimwe.oss-cn-shanghai.aliyuncs.com/front/ball/images/b635164f-ecec-434a-a00b-69614a918f2f.png";
@@ -17,6 +17,58 @@ const mapIcon =
const logoText =
"https://bimwe.oss-cn-shanghai.aliyuncs.com/front/ball/images/9d8cbc9d-9601-4e2d-ab23-76420a4537d6.png";
/** 将 base64 图片转换为临时文件路径 */
// export function base64ToTempFilePath(base64Data: string): Promise<string> {
// return new Promise((resolve, reject) => {
// const fsm = Taro.getFileSystemManager();
// // 生成唯一文件名
// const filePath = `${Taro.env.USER_DATA_PATH}/temp_qrcode_${Date.now()}.png`;
// // 去掉 data:image/png;base64, 前缀(如果有)
// const base64 = base64Data.replace(/^data:image\/\w+;base64,/, '');
// fsm.writeFile({
// filePath,
// data: base64,
// encoding: 'base64',
// success: () => fsm.access({
// path: filePath,
// success: () => resolve(filePath),
// fail: (e) => reject(e),
// }),
// fail: reject,
// });
// });
// }
export function base64ToTempFilePath(base64Data: string): Promise<string> {
return new Promise((resolve, reject) => {
const fsm = Taro.getFileSystemManager();
const filePath = `${Taro.env.USER_DATA_PATH}/temp_qrcode_${Date.now()}.png`;
// 去掉 data:image/png;base64, 前缀(如果有)
const base64 = base64Data.replace(/^data:image\/\w+;base64,/, '');
// 将base64转换成ArrayBuffer
const arrayBuffer = Taro.base64ToArrayBuffer(base64);
fsm.writeFile({
filePath,
data: arrayBuffer,
encoding: 'binary', // 这里使用'binary'
success: () => {
fsm.access({
path: filePath,
success: () => resolve(filePath),
fail: (e) => reject(e),
});
},
fail: reject,
});
});
}
/** 获取图片宽高 */
function getImageWh(src: string): Promise<{ width: number; height: number }> {
return new Promise((resolve) => {
@@ -173,7 +225,7 @@ function drawTextWrap(
/** 核心纯函数:生成海报图片 */
export async function generatePosterImage(data: any): Promise<string> {
console.log("start !!!!");
const dpr = Taro.getSystemInfoSync().pixelRatio;
const dpr = Taro.getWindowInfo().pixelRatio;
const width = 600;
const height = 1000;
@@ -292,7 +344,7 @@ export async function generatePosterImage(data: any): Promise<string> {
400 / (logoWh.width / logoWh.height)
);
const qrImg = await loadImage(canvas, qrCodeUrl);
const qrImg = await loadImage(canvas, data.qrCodeUrl);
ctx.drawImage(qrImg, width - 12 - 150, top - 50, 160, 160);
left = 16;