chore: 分享卡排查记录;.gitignore 忽略 .workbuddy/local

This commit is contained in:
tamakyi
2026-10-22 21:42:56 +08:00
parent 0054e508b7
commit 80e042d154
2 changed files with 34 additions and 0 deletions
+30
View File
@@ -353,3 +353,33 @@
- 水印在右下角("AI生成 WORKBUDDY"),统一裁掉底部 10%,切口平直,正好可以贴页面下沿。
- 提示词关键:no outlines / no gradients、眼睛写死 `solid black vertically elongated rounded rectangles`
(否则出白眼球+高光+睫毛)、无嘴要重复强调。3/4 侧脸那版还是画出了嘴唇,弃用。
## 分享卡「二维码下链接不对齐 + 长链接乱掉」(已定位,待批准落地)
- 根因在 `route/question/share.go` 的**字宽估算**:`charPixelWidth` 把 `unicode.Punct/Symbol`
一律按 1.0em 计,而 URL 里的 `: / . _ -` 在 Noto Sans SC 里只有 0.25~0.35em。
- 实测(NotoSansSC + 本机原型 `dev/tmpcard`):`https://box.shiroko.one/_/tamakyi` 15px 真实
227.9px、估算 352.5px(+55%);卡片可用宽仅 225px → 触发缩字号到 **9.57px**,实际只画 145px 宽,
且起点按估算算 → 整段左偏 **40px**。dev 域名 7.24px / 偏 39px;长域名 5.26px / 偏 34px。
- 纯中文不受影响(CJK 就是 1em,偏差 0);底部水印 `Powered by 狼的提问箱` 偏 9.8px。
- 正确测法:`Font.HMetric(scale).AdvanceWidth` + `Font.Kern` 累加,scale=size*64(DPI 72)。
实测与 `freetype.Context.DrawString` 返回笔位完全一致(227.88 vs 227.88)—— 以后居中文字都用它,
别再靠字符宽度系数猜。
- 只修测量还不够:等比缩字号没有下限也没有断行/省略兜底,长链接必然掉到 5px 以下。
- 另记:QR 用 `qr.Image(256)` 再 NearestNeighbor 到 165,41 模块 → 每模块 4.02px,模块宽窄不一;
`qr.Image(-k)` 按模块整数倍直接出图更锐(41*4=164)。
- 交付:`outputs/sharecard-link-compare-2026-10-22.png`(现状/修复后对照)。
**已落地(用户选方案 A:单行优先,放不下才拆 host/path)**
- `measureTextWidth` 改为 `HMetric.AdvanceWidth + Kern` 累加,字体不可用时才回退估算;
所有 `drawTextCentered` 自动吃到修正(链接、水印、提示语)。
- 新增 `displayURL`(去 `https://`)/ `layoutLink`(单行 15→13 → host+path 两行 13→11 →
host 中间省略 @11)/ `ellipsizeMiddle`;`LinkMaxWidth = QRCardW-40 = 230`。
- 卡片内容高度改为按行数算,两行时 startY 自动下移(281 ≤ 315,顶距 17)。
- 守门测试 `route/question/share_layout_test.go`:测量=笔位(0.01px 级)、限宽、
居中(按着墨边界 ±3px)、`TEST_PREVIEW=1` 出图。**变异验证过**:把 measure 换回估算,
三条用例全 FAIL(偏移 39/59px,且文字真的溢出卡片 615 < 660)。
- 删掉了临时原型 `dev/tmpcard`(结论已进测试与 outputs 图)。
- P1 未做(二维码模块整数倍、间距 4px 栅格、水印相对左侧内容区居中)—— 等用户看完效果再定。