金句海报生成器(红引号 + 相框书法)
输入一句金句 → 自动出海报。产出可直接发朋友圈 / 视频号的 750x1334 竖版海报。
环境要求
- macOS(红引号款使用系统自带 Songti 字体)
- Python 3 + Pillow + numpy(
pip install pillow numpy) - 书法字体已内嵌(
scripts/font_data.py,江城斜宋体子集 base64,覆盖 GB2312 常用字,免费可商用;发布平台不允许携带 .ttf,首次运行自动解码落地到assets/fonts/)
模板路由(定稿规则)
| 场景 | 行为 |
|---|---|
| ≤20 字 | 逗号款 + 相框款各出一张,让用户选 |
| >20 字 | 只出逗号款(红引号竖版,10~40 字都支持) |
| 用户点名「逗号 / 相框」 | 只出点名的那个 |
两款模板
1. 逗号款(红引号竖版,render_poster.py,750x1334)
- 白底 + 红直角边框;上引号(原版粗块逗号造型,从模板抠图)贴齐左边框线内侧、中心在画面 1/4 高度;无下引号
- 文字块垂直居中于 1/4~3/4 高度区间,水平居中,行宽 ≤540
- 字号分档:≤10字→2行100px;11-20字→3行72px;21-30字→4行60px;>30字→5行48px(超宽自动微缩,最多缩30%)
- 断行:按核心字数(去标点)均衡分配,词组不拆散
- 标点规矩:中间行行尾不带标点,只有最后一行保留原文标点(如?!)
2. 相框书法版(render_frame.py,750x1334)
- 底图:米白纯色背景 + 木相框(
frame_bg_clean.png) - 竖排书法字(江城斜宋体),从左往右读;暖褐墨色 (75,57,42) 与木框协调;无印章
- 文字与相框四周保持「一个字」的边距
- ≤4 字单列超大;5-8 字左列前 2 字超大 + 右列其余中字;>8 字多列(每列 ≤8 字),按标点词组智能分列、词组不拆散
运行方式
# 逗号款(红引号)
python3 ~/.workbuddy/skills/pyq-poster/scripts/render_poster.py \
--text "如果你是对的,为什么赚钱的那个人不是你?!" \
--output ~/Downloads/海报.png
# 相框款(书法)
python3 ~/.workbuddy/skills/pyq-poster/scripts/render_frame.py \
--text "每天帮助一个人" --output ~/Downloads/海报.png
--scale:字号倍数(如--scale 1.5);超行宽自动缩到放得下--output:输出路径;逗号款默认~/Downloads/朋友圈海报_<文案>.png,相框款默认~/Downloads/金句海报_相框_<文案>.png- 脚本会打印实际用的模板 / 行列数 / 字号,供核对
标准流程
- 收文案:拿到用户的一句话。只给主题没给文案时,先按用户风格拟一句并确认。
- 出图:按路由规则执行——≤20 字两款都出(一次展示两张让用户挑),>20 字只出逗号款。
- 微调:要更大的字加
--scale;换文案重出;点名模板按点名的来。
规则与红线
- 不改动模板图片与版式参数(文字中心 / 行宽 / 字号 / 颜色均已按原版逆向校准)
- 不要用其他图片处理工具重做现有版式;要新风格就新增模板
- 引号、书名号等装饰符号不建议保留在文案里(海报只留汉字和必要标点更干净)
- 相框款标点自动去除;逗号款中间行去行尾标点、末行保留原文标点
出图前自检(QA)
- 输出文件存在且 >50KB
- 日志字号与档位期望一致(逗号款按分档,相框款按列数自适应)
- 逗号款:中间行无行尾标点、末行保留原文标点
- 相框款:文字不出开槽区、四周留一个字边距
文件结构
pyq-poster/
├── SKILL.md # 本文件
├── templates/
│ ├── clean_quote.png # 红引号干净模板(逗号款引号来源 + 取色)
│ └── frame_bg_clean.png # 相框去背景底图(相框款)
├── scripts/
│ ├── render_poster.py # 逗号款(红引号竖版)
│ ├── render_frame.py # 相框书法版
│ └── font_data.py # 内嵌书法字体(base64,首次运行解码到 assets/fonts/)
└── examples/ # 两款成片示例