update:英文版代码备份
This commit is contained in:
+27
-26
@@ -1,3 +1,4 @@
|
||||
import { t as translate } from "@/locales";
|
||||
import { formatTimestamp } from "@/util";
|
||||
|
||||
const loadImage = (src) =>
|
||||
@@ -277,7 +278,7 @@ export const generateShareImage = async (canvasId, data) => {
|
||||
|
||||
renderText(ctx, data.user.name, 18, "#000", 84, 36);
|
||||
renderText(ctx, data.recordDate, 9, "#fff", 348, 23, "center", 39);
|
||||
renderText(ctx, "今日打卡", 14, "#fff", 336, 38, "center", 39);
|
||||
renderText(ctx, translate('today_s_check_in'), 9, "#fff", 336, 38, "center", 39);
|
||||
|
||||
// 文本标签
|
||||
let cursorX = 84;
|
||||
@@ -295,7 +296,7 @@ export const generateShareImage = async (canvasId, data) => {
|
||||
);
|
||||
cursorX = drawTextBoxesLine(
|
||||
ctx,
|
||||
String(pointBook.distance) + " 米",
|
||||
String(pointBook.distance) + translate('m'),
|
||||
cursorX + 6,
|
||||
58,
|
||||
9,
|
||||
@@ -318,9 +319,9 @@ export const generateShareImage = async (canvasId, data) => {
|
||||
2
|
||||
);
|
||||
|
||||
renderText(ctx, "落点稳定性", 13, "#999", 25, 110);
|
||||
renderText(ctx, "黄心率", 13, "#999", 145, 110);
|
||||
renderText(ctx, "10环数", 13, "#999", 262, 110);
|
||||
renderText(ctx, translate('shot_grouping'), 13, "#999", 25, 110);
|
||||
renderText(ctx, translate('gold_hit_rate'), 13, "#999", 145, 110);
|
||||
renderText(ctx, translate('10s'), 13, "#999", 262, 110);
|
||||
|
||||
renderText(
|
||||
ctx,
|
||||
@@ -340,8 +341,8 @@ export const generateShareImage = async (canvasId, data) => {
|
||||
);
|
||||
renderText(ctx, arrowData.tenRings, 15, "#000", 262, 133);
|
||||
|
||||
renderText(ctx, "平均环数", 13, "#999", 25, 175);
|
||||
renderText(ctx, "总环数", 13, "#999", 145, 175);
|
||||
renderText(ctx, translate('average_score'), 13, "#999", 25, 175);
|
||||
renderText(ctx, translate('total_score'), 13, "#999", 145, 175);
|
||||
renderText(
|
||||
ctx,
|
||||
Number(arrowData.averageRing.toFixed(2)),
|
||||
@@ -361,7 +362,7 @@ export const generateShareImage = async (canvasId, data) => {
|
||||
|
||||
if (hasPoint) {
|
||||
drawRoundedRect(ctx, 20, 230, 5, 15, 5, "#FED847");
|
||||
renderText(ctx, "落点分布", 13, "#999", 32, 242);
|
||||
renderText(ctx, translate('shot_distribution'), 13, "#999", 32, 242);
|
||||
|
||||
const bowSrc = await loadImage(pointBook.bowtargetType.iconPng);
|
||||
const bowImg = await loadCanvasImage(canvas, bowSrc);
|
||||
@@ -421,7 +422,7 @@ export const generateShareImage = async (canvasId, data) => {
|
||||
);
|
||||
});
|
||||
|
||||
renderText(ctx, "环值", 9, "#999", 15, ringBarHeight - 1);
|
||||
renderText(ctx, translate('score'), 9, "#999", 15, ringBarHeight - 1);
|
||||
ringNames.forEach((ring, index) => {
|
||||
renderText(
|
||||
ctx,
|
||||
@@ -441,16 +442,16 @@ export const generateShareImage = async (canvasId, data) => {
|
||||
const qrcodeImg = await loadCanvasImage(canvas, qrcodeSrc);
|
||||
ctx.drawImage(qrcodeImg, 40, hasPoint ? 715 : 358, 68, 68);
|
||||
|
||||
renderText(ctx, "射灵星球", 18, "#333", 120, hasPoint ? 734 : 380);
|
||||
renderText(ctx, translate('sheling_planet'), 18, "#333", 120, hasPoint ? 734 : 380);
|
||||
renderText(
|
||||
ctx,
|
||||
"高效记录每一箭,快来一起打卡吧!",
|
||||
translate('track_every_arrow_join_us'),
|
||||
13,
|
||||
"#999",
|
||||
120,
|
||||
hasPoint ? 756 : 402
|
||||
);
|
||||
renderText(ctx, "扫码打卡", 13, "#FFA118", 142, hasPoint ? 777 : 422);
|
||||
renderText(ctx, translate('scan_to_check_in'), 13, "#FFA118", 142, hasPoint ? 777 : 422);
|
||||
const pointImg = await loadCanvasImage(canvas, "https://static.shelingxingqiu.com/shootmini/static/point.png");
|
||||
ctx.drawImage(pointImg, 120, hasPoint ? 765 : 410, 18, 14);
|
||||
// 2D 即时绘制,无需 ctx.draw()
|
||||
@@ -539,10 +540,10 @@ export const sharePointData = async (canvasId, data) => {
|
||||
const bubble2Img = await loadCanvasImage(canvas, bubble2Src);
|
||||
const bubble3Img = await loadCanvasImage(canvas, bubble3Src);
|
||||
ctx.drawImage(bubble1Img, 10, 88, 143, 87);
|
||||
renderText(ctx, "本周箭数", 14, "#FDA103", 84, 116, "center");
|
||||
renderText(ctx, translate('arrows_this_week'), 14, "#FDA103", 84, 116, "center");
|
||||
renderText(ctx, data.weekArrow, 36, "#FA2A2A", 84, 152, "center");
|
||||
ctx.drawImage(bubble2Img, 65, 220, 143, 87);
|
||||
renderText(ctx, "本周消耗", 14, "#FDA103", 139, 248, "center");
|
||||
renderText(ctx, translate('calories_this_week'), 14, "#FDA103", 139, 248, "center");
|
||||
renderText(
|
||||
ctx,
|
||||
Math.round(data.weekArrow * 1.6),
|
||||
@@ -553,7 +554,7 @@ export const sharePointData = async (canvasId, data) => {
|
||||
"center"
|
||||
);
|
||||
ctx.drawImage(bubble3Img, 255, 52, 114, 92);
|
||||
renderText(ctx, "我的名次", 14, "#FDA103", 312, 80, "center");
|
||||
renderText(ctx, translate('my_rank'), 14, "#FDA103", 312, 80, "center");
|
||||
renderText(ctx, data.rank, 36, "#FA2A2A", 312, 116, "center");
|
||||
|
||||
const qrcodeSrc = await loadImage(
|
||||
@@ -562,8 +563,8 @@ export const sharePointData = async (canvasId, data) => {
|
||||
const qrcodeImg = await loadCanvasImage(canvas, qrcodeSrc);
|
||||
ctx.drawImage(qrcodeImg, 40, 383, 68, 68);
|
||||
|
||||
renderText(ctx, "射灵星球", 18, "#333", 120, 412);
|
||||
renderText(ctx, "高效记录每一箭,快来一起打卡吧!", 13, "#999", 120, 435);
|
||||
renderText(ctx, translate('sheling_planet'), 18, "#333", 120, 412);
|
||||
renderText(ctx, translate('track_every_arrow_join_us'), 13, "#999", 120, 435);
|
||||
// 2D 即时绘制,无需 ctx.draw()
|
||||
} catch (e) {
|
||||
console.error("generateShareImage 绘制失败:", e);
|
||||
@@ -758,9 +759,9 @@ export async function sharePractiseData(canvasId, type, user, data) {
|
||||
renderText(ctx, user.nickName, 13, "#fff", 58, 34);
|
||||
renderRankTitle(ctx, user.lvlName);
|
||||
|
||||
let subTitle = "正式开启弓箭手之路";
|
||||
let subTitle = translate('your_archery_journey_starts_here');
|
||||
if (type > 1) {
|
||||
subTitle = `今日弓箭练习打卡 ${formatTimestamp(data.startTime)}`;
|
||||
subTitle = translate('archery_check_in_value', { p0: formatTimestamp(data.startTime) });
|
||||
}
|
||||
|
||||
ctx.drawImage(titleImg, (width - 160) / 2, 160, 160, 40);
|
||||
@@ -768,10 +769,10 @@ export async function sharePractiseData(canvasId, type, user, data) {
|
||||
ctx.font = "18px sans-serif";
|
||||
renderText(ctx, subTitle, 18, "#fff", width / 2, 224, "center");
|
||||
|
||||
renderText(ctx, "共", 14, "#fff", 122, 300);
|
||||
renderText(ctx, translate('total'), 14, "#fff", 102, 300);
|
||||
const totalRing = data.details.reduce((last, next) => last + next.ring, 0);
|
||||
renderText(ctx, totalRing, 14, "#fed847", 148, 300, "center");
|
||||
renderText(ctx, "环", 14, "#fff", 161, 300);
|
||||
renderText(ctx, translate('pts'), 14, "#fff", 161, 300);
|
||||
|
||||
renderLine(ctx, 77);
|
||||
renderLine(ctx, 185);
|
||||
@@ -779,10 +780,10 @@ export async function sharePractiseData(canvasId, type, user, data) {
|
||||
renderScores(ctx, data.details, scoreBgImg);
|
||||
|
||||
ctx.drawImage(qrCodeImg, width * 0.06, height * 0.87, 52, 52);
|
||||
renderText(ctx, "射灵平台", 12, "#fff", width * 0.26, height * 0.9);
|
||||
renderText(ctx, translate('sheling'), 12, "#fff", width * 0.26, height * 0.9);
|
||||
renderText(
|
||||
ctx,
|
||||
"快加入我们一起玩吧~",
|
||||
translate('join_us_and_play'),
|
||||
9,
|
||||
"rgba(255, 255, 255, 0.5)",
|
||||
width * 0.26,
|
||||
@@ -790,7 +791,7 @@ export async function sharePractiseData(canvasId, type, user, data) {
|
||||
);
|
||||
renderText(
|
||||
ctx,
|
||||
"后羿就是这样练成的",
|
||||
translate('practice_makes_a_great_archer'),
|
||||
9,
|
||||
"rgba(255, 255, 255, 0.5)",
|
||||
width * 0.26,
|
||||
@@ -902,7 +903,7 @@ export const generateShareCard = (canvasId, date, actual, total) => {
|
||||
const totalWidth = ctx.measureText(`${t || ""}`).width || 0;
|
||||
renderText(
|
||||
ctx,
|
||||
"环",
|
||||
translate('pts'),
|
||||
20,
|
||||
"#FFFFFF",
|
||||
centerX + totalWidth + 5,
|
||||
@@ -994,7 +995,7 @@ export const generateShareCard = (canvasId, date, actual, total) => {
|
||||
const totalWidth = ctx.measureText(`${t || ""}`).width || 0;
|
||||
renderText(
|
||||
ctx,
|
||||
"环",
|
||||
translate('pts'),
|
||||
20,
|
||||
"#FFFFFF",
|
||||
centerX + totalWidth + 5,
|
||||
|
||||
Reference in New Issue
Block a user