fix(fonts): FONT_NAME_MAP改为Noto Sans SC适配容器实际字体 #1514

Merged
xiaoxia merged 1 commits from fix/font-name-map-noto-sans-sc into develop 2026-08-27 00:35:49 +08:00
Owner

问题

容器内 NotoSansCJK-*.ttc 已被移除,仅剩 NotoSansSC-VF.ttf(注册名 Noto Sans SC)。

fc-match "Noto Sans CJK SC" 返回 DejaVu Sans(西方字体),导致中文渲染异常。

修复

packages/domain/ass_subtitle_builder.py

FONT_NAME_MAP 中所有 Noto Sans CJK SC 改为 Noto Sans SC

  • 思源黑体 / 苹方 / PingFang / 微软雅黑 / 华康俪金黑 → Noto Sans SC
  • 思源宋体 / 楷体 保持 Noto Serif CJK SC(容器内该字体仍存在)

packages/shared/title_overlay.py

_FONT_CANDIDATES 首位插入:

/usr/share/fonts/opentype/noto/NotoSansSC-VF.ttf

确保 Pillow 叠加封面标题时优先使用新字体文件。

测试

同步更新 4 个测试文件中的字体名断言(178 tests passed)。

验证

  • fc-match "Noto Sans SC"NotoSansSC-VF.ttf
  • fc-match "Noto Serif CJK SC"NotoSerifCJK-Regular.ttc
  • 178 个相关单测全通过
  • black/isort/ruff 本地通过
## 问题 容器内 `NotoSansCJK-*.ttc` 已被移除,仅剩 `NotoSansSC-VF.ttf`(注册名 `Noto Sans SC`)。 `fc-match "Noto Sans CJK SC"` 返回 **DejaVu Sans**(西方字体),导致中文渲染异常。 ## 修复 ### packages/domain/ass_subtitle_builder.py `FONT_NAME_MAP` 中所有 `Noto Sans CJK SC` 改为 `Noto Sans SC`: - 思源黑体 / 苹方 / PingFang / 微软雅黑 / 华康俪金黑 → `Noto Sans SC` - 思源宋体 / 楷体 保持 `Noto Serif CJK SC`(容器内该字体仍存在) ### packages/shared/title_overlay.py `_FONT_CANDIDATES` 首位插入: ``` /usr/share/fonts/opentype/noto/NotoSansSC-VF.ttf ``` 确保 Pillow 叠加封面标题时优先使用新字体文件。 ### 测试 同步更新 4 个测试文件中的字体名断言(178 tests passed)。 ## 验证 - `fc-match "Noto Sans SC"` → `NotoSansSC-VF.ttf` ✅ - `fc-match "Noto Serif CJK SC"` → `NotoSerifCJK-Regular.ttc` ✅ - 178 个相关单测全通过 - black/isort/ruff 本地通过
xiaoxia added 1 commit 2026-08-27 00:19:05 +08:00
fix(fonts): FONT_NAME_MAP改为Noto Sans SC适配容器实际字体
CI/CD Pipeline / Build Staging API Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Web Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Has been skipped
CI/CD Pipeline / Staging API Integration Tests (pull_request) Has been skipped
CI/CD Pipeline / Staging E2E Tests (pull_request) Has been skipped
CI/CD Pipeline / ACR Image Cleanup (pull_request) Has been skipped
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 2m41s
CI/CD Pipeline / Frontend Lint (pull_request) Has been skipped
CI/CD Pipeline / Frontend Unit Tests (pull_request) Has been skipped
CI/CD Pipeline / PR Build Web Image (pull_request) Has been skipped
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 3m53s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 4m16s
CI/CD Pipeline / PR Build Worker Image (pull_request) Successful in 1m39s
CI/CD Pipeline / Validate - Type Check (mypy) (pull_request) Successful in 4m49s
AI Code Review / AI Code Review (pull_request) Successful in 4m58s
CI/CD Pipeline / Validate - Migration (alembic) (pull_request) Successful in 5m14s
CI/CD Pipeline / PR Build API Image (pull_request) Successful in 2m33s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 6m25s
CI/CD Pipeline / Validate - Code Quality (pull_request) Successful in 10m40s
CI/CD Pipeline / Unit Tests (pull_request) Successful in 13m7s
CI/CD Pipeline / Build Production Web Image (pull_request) Has been skipped
CI/CD Pipeline / Build Production API Image (pull_request) Has been skipped
CI/CD Pipeline / Build Production Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Deploy Production (pull_request) Has been skipped
CI/CD Pipeline / Canary Release to Production (pull_request) Has been skipped
CI/CD Pipeline / Production Browser E2E (pull_request) Has been skipped
CI/CD Pipeline / Integration Tests (pull_request) Successful in 5m21s
CI/CD Pipeline / CI Gate (pull_request) Successful in 29s
Preview Cleanup / Cleanup Preview Environment (pull_request) Successful in 3m53s
ACR Cleanup / ACR Image Cleanup (pull_request_target) Successful in 5m11s
f700e38876
容器内 NotoSansCJK ttc 已被移除,仅剩 NotoSansSC-VF.ttf,
注册名为 'Noto Sans SC'。fc-match 'Noto Sans CJK SC' 会回退到
DejaVu Sans 导致中文渲染异常。

- ass_subtitle_builder: 思源黑体/苹方/PingFang/微软雅黑/华康俪金黑
  全部映射为 'Noto Sans SC'
- title_overlay: _FONT_CANDIDATES 优先查找 NotoSansSC-VF.ttf
- 同步更新相关单测断言

🚀 预览环境已部署

项目 详情
PR号 #1514
预览链接 https://pr-1514.preview.xiaoxiajianji.com
API环境 staging

💡 预览环境使用 staging API 数据,请勿在预览环境中操作重要数据。

🔄 每次提交新代码后预览环境会自动更新。

🗑️ PR 关闭或合并后,预览环境会自动清理。

🚀 **预览环境已部署** | 项目 | 详情 | |------|------| | PR号 | #1514 | | 预览链接 | [https://pr-1514.preview.xiaoxiajianji.com](https://pr-1514.preview.xiaoxiajianji.com) | | API环境 | staging | > 💡 预览环境使用 staging API 数据,请勿在预览环境中操作重要数据。 > > 🔄 每次提交新代码后预览环境会自动更新。 > > 🗑️ PR 关闭或合并后,预览环境会自动清理。
Collaborator

代码审查结果 - PR #1514

⚠️ 问题(1个需要修改)

  1. packages/domain/ass_subtitle_builder.py 第29-35行 & packages/shared/title_overlay.py 第18行:字体名称映射与字体文件回退逻辑不一致,存在渲染失败风险。
    • 问题描述ass_subtitle_builder.py 将字体映射统一改为 Noto Sans SC,但在 title_overlay.py 的字体查找列表中,NotoSansSC-VF.ttf 之后仍然保留了 NotoSansCJK... (TTC) 文件作为回退。如果部署环境中缺少 NotoSansSC-VF.ttftitle_overlay.py 会回退使用 TTC 文件(通常注册名为 Noto Sans CJK SC),而 ass_subtitle_builder.py 生成的 ASS 代码中强制指定了 Noto Sans SC。由于 TTC 文件通常不注册为 Noto Sans SC,这将导致字幕渲染时找不到字体,出现乱码或回退到默认字体,而图片覆盖可能正常显示,造成表现不一致。
    • 修改建议:请确保目标环境必定安装 NotoSansSC-VF.ttf;如果需要兼容旧环境或仅安装了 CJK TTC 包的情况,应将 FONT_NAME_MAP 中的值改回 Noto Sans CJK SC,或者在 title_overlay.py 中移除 CJK TTC 的回退路径以保持逻辑一致。

💡 建议(0个可选)


格式检查通过 | 逻辑审查需修改 | 性能良好


🤖 由 AI 代码审查机器人自动生成 | 2026-08-26 16:24:02 | 模型:

## 代码审查结果 - PR #1514 ### ⚠️ 问题(1个需要修改) 1. **packages/domain/ass_subtitle_builder.py 第29-35行 & packages/shared/title_overlay.py 第18行**:字体名称映射与字体文件回退逻辑不一致,存在渲染失败风险。 - **问题描述**:`ass_subtitle_builder.py` 将字体映射统一改为 `Noto Sans SC`,但在 `title_overlay.py` 的字体查找列表中,`NotoSansSC-VF.ttf` 之后仍然保留了 `NotoSansCJK...` (TTC) 文件作为回退。如果部署环境中缺少 `NotoSansSC-VF.ttf`,`title_overlay.py` 会回退使用 TTC 文件(通常注册名为 `Noto Sans CJK SC`),而 `ass_subtitle_builder.py` 生成的 ASS 代码中强制指定了 `Noto Sans SC`。由于 TTC 文件通常不注册为 `Noto Sans SC`,这将导致字幕渲染时找不到字体,出现乱码或回退到默认字体,而图片覆盖可能正常显示,造成表现不一致。 - **修改建议**:请确保目标环境必定安装 `NotoSansSC-VF.ttf`;如果需要兼容旧环境或仅安装了 CJK TTC 包的情况,应将 `FONT_NAME_MAP` 中的值改回 `Noto Sans CJK SC`,或者在 `title_overlay.py` 中移除 CJK TTC 的回退路径以保持逻辑一致。 ### 💡 建议(0个可选) --- ✅ 格式检查通过 | ❌ 逻辑审查需修改 | ✅ 性能良好 --- <sub>🤖 由 AI 代码审查机器人自动生成 | 2026-08-26 16:24:02 | 模型: </sub> <!-- AI_CODE_REVIEW_AUTO_COMMENT -->
xiaoxia merged commit d4c8064cdc into develop 2026-08-27 00:35:49 +08:00

🗑️ 预览环境已清理

PR #1514 已关闭或合并,对应的预览环境已被清理。

如有需要,可以重新打开 PR 来重新生成预览环境。

🗑️ **预览环境已清理** PR #1514 已关闭或合并,对应的预览环境已被清理。 > 如有需要,可以重新打开 PR 来重新生成预览环境。
Sign in to join this conversation.