分享ntpr跟随文字宽度

This commit is contained in:
李瑞
2025-12-06 16:34:19 +08:00
parent 786caa19c4
commit 8457fdffe2

View File

@@ -248,7 +248,7 @@ const drawSVGPathToCanvas = (ctx: any) => {
ctx.save(); ctx.save();
// 移动到指定位置并缩放 // 移动到指定位置并缩放
ctx.translate(scale * 210 * dpr, scale * 90 * dpr); ctx.translate(scale * 200 * dpr, scale * 90 * dpr);
const scaleValue = 0.8 const scaleValue = 0.8
ctx.scale(scaleValue, scaleValue); ctx.scale(scaleValue, scaleValue);
@@ -543,7 +543,7 @@ const drawShareCard = async (ctx: any, data: ShareCardData, offscreen: any): Pro
drawBoldText(ctx, '邀你加入', inviteX, inviteY, inviteFontSize, '#000000', "Noto Sans SC") drawBoldText(ctx, '邀你加入', inviteX, inviteY, inviteFontSize, '#000000', "Noto Sans SC")
// 绘制"球局"特殊样式 // 绘制"球局"特殊样式
const qiuJuX = inviteX + ctx.measureText('邀你加入').width + 5 * dpr const qiuJuX = inviteX + ctx.measureText('邀你加入').width + 4 * dpr
const qiuJuFontSize = scale * 44 * dpr const qiuJuFontSize = scale * 44 * dpr
drawBoldText(ctx, '球局', qiuJuX, inviteY, qiuJuFontSize, '#48D800', '"Noto Sans SC"') drawBoldText(ctx, '球局', qiuJuX, inviteY, qiuJuFontSize, '#48D800', '"Noto Sans SC"')
@@ -602,20 +602,29 @@ const drawShareCard = async (ctx: any, data: ShareCardData, offscreen: any): Pro
// 绘制"单打"标签 // 绘制"单打"标签
const danDaX = scale * 100 const danDaX = scale * 100
const danDaY = scale * 196 const danDaY = scale * 196
const danDaWidth = scale * 76 * dpr
const danDaHeight = scale * 40 * dpr const danDaHeight = scale * 40 * dpr
const danDaRadius = scale * 20 * dpr const danDaRadius = scale * 20 * dpr
const danDaFontSize = scale * 22 * dpr const danDaFontSize = scale * 22 * dpr
// 根据内容动态计算标签宽度(左右内边距)
const danDaPaddingX = scale * 16 * dpr
ctx.setFontSize(danDaFontSize)
const danDaTextWidth = ctx.measureText(data.gameType).width
const danDaWidth = danDaTextWidth + danDaPaddingX * 2
drawLabel(ctx, danDaX, danDaY, danDaWidth, danDaHeight, danDaRadius, data.gameType, danDaFontSize) drawLabel(ctx, danDaX, danDaY, danDaWidth, danDaHeight, danDaRadius, data.gameType, danDaFontSize)
// 绘制技能等级标签 // 绘制技能等级标签(基于“单打”标签实际宽度后移)
const skillX = scale * 190 const labelGap = scale * 16 // 两个标签之间的间距(不乘 dpr保持视觉间距
const skillX = danDaX + danDaWidth + labelGap
const skillY = scale * 196 const skillY = scale * 196
const skillWidth = scale * 180 * dpr
const skillHeight = scale * 40 * dpr const skillHeight = scale * 40 * dpr
const skillRadius = scale * 20 * dpr const skillRadius = scale * 20 * dpr
const skillFontSize = scale * 22 * dpr const skillFontSize = scale * 22 * dpr
// 根据内容动态计算技能标签宽度
const skillPaddingX = scale * 20 * dpr
ctx.setFontSize(skillFontSize)
const skillTextWidth = ctx.measureText(data.skillLevel).width
const skillWidth = skillTextWidth + skillPaddingX * 2
drawLabel(ctx, skillX, skillY, skillWidth, skillHeight, skillRadius, data.skillLevel, skillFontSize) drawLabel(ctx, skillX, skillY, skillWidth, skillHeight, skillRadius, data.skillLevel, skillFontSize)