fix(share): 字体缺失不再永久失败;二维码按模块整数倍绘制

测试环境部署后分享卡整站 500「字体文件未配置或无法加载」。根因不是代码
回退,而是字体从来就不在仓库里:static/fonts/ 既没有入库(git 历史为空),
也没有 embed,凡是按仓库新建的环境都缺这个文件,只有手工补过字体的老环境
才正常。

- getFont 不再用 sync.Once 永久缓存失败:补上字体文件即生效,无需重启;
  失败时错误信息带上「已尝试的路径」,排障不用再猜是配置还是文件
- 候选路径:font_path → static/fonts/*.{otf,ttf,ttc} → 常见系统 CJK 字体,
  换过字体文件名也能用
- app.sample.ini 注明字体必须自备、缺失的后果

顺带做 P1 的第一项:generateQR 改为按模块整数倍出图(41 模块 @165px →
每模块 4px、符号 164px 居中)。原先是 256px 生成后最近邻缩到 165px,
每模块 4.02px,模块宽窄相差 1px,小尺寸二次压缩后更容易扫不动。
内嵌头像改为按目标尺寸等比(size*48/256)+ 2px 白边,静默区不受影响。

守门测试新增两条:TestGenerateQRIsModuleAligned(扫描线游程必须是模块
宽度的整数倍,变异成等比缩放后立刻 FAIL)、TestGenerateQRWithLogo
(中心是头像、四角静默区纯白)。
This commit is contained in:
tamakyi
2026-10-22 22:33:22 +08:00
parent 80e042d154
commit d51629ef2f
4 changed files with 150 additions and 32 deletions
+3 -1
View File
@@ -20,7 +20,9 @@ aliyun_access_key = ""
aliyun_access_key_secret = ""
; 默认分享图背景图链接(1280x720)
share_background = "https://your-default-background.jpg"
; 中文字体文件路径(相对项目根目录)
; 分享卡绘图用的中文字体(相对项目根目录)。字体文件不在仓库里,必须自备一份,
; 否则分享卡接口会返回 500「字体文件未配置或无法加载」。可用 Noto Sans SC / 思源黑体,
; 支持 .otf/.ttf/.ttc;放好后无需重启生效。
font_path = "static/fonts/NotoSansSC-Regular.otf"
[security]