方法论与洞察

代码排版小红书封面 · 工作流与复盘

首次记录:2026-06-17 来源:「牧云人」独立作品封面制作(一张 MJ 雾山牧羊原图 → 小红书封面 + 无字壁纸 + 发布文案) 状态:流程已跑通,跨”单张原图 → 排版封面”场景通用 配套代码:make_cover / make_clean(镜像于 06_代码/46_牧云人封面/


一句话

Pillow 代码排版做封面,比丢进设计软件更适合”批量、可复现、参数化微调”的封面生产——但前提是先解决三个隐形卡点:找回原图、保住高光、去掉水印。


卡点 1:粘贴进对话的图,不在磁盘上

用户把图直接粘贴到对话里时,它不会落成一个可访问的文件。实测排查路径:

结论:别在 temp 里捞。可靠做法是去用户指定的真实目录(这次是 Downloads)做视觉检索——

# 对目录里最近 N 张图拼一张 6×4 缩略接触表, 一眼定位
files = sorted(imgs, key=os.path.getmtime, reverse=True)[:24]
sheet = Image.new('RGB', (6*200, 4*200), (30,30,30))
for i,p in enumerate(files):
    t = Image.open(p).convert('RGB'); t.thumbnail((192,174))
    sheet.paste(t, ((i%6)*200+4, (i//6)*200+4))
    draw.text(..., str(i)+':'+os.path.basename(p)[:22])  # 标号+文件名

靠文件名猜会漏(MJ 文件名是 a_tiny_lost_cloud_resting_on_a_grassy_hills_…,跟”牧羊/老人”对不上),接触表一眼就锁定。这是本次最省时间的一招。


卡点 2:暗角要保高光,不能全图压暗

封面文字压在画面上要保证可读,但全图盖一层暗色 scrim 会把云朵/主体高光一起压灰,破坏氛围。

做法:以”文字所在的角”为中心的椭圆衰减暗角,只压那个角,云朵(画面中心)和人物(右侧)原样保留。

# 左上角椭圆暗角: alpha = clip(1 - ((x-cx)/rx)^2 - ((y-cy)/ry)^2, 0,1)^1.6 * amax
yy, xx = np.mgrid[0:h, 0:w]
d = ((xx-cx)/rx)**2 + ((yy-cy)/ry)**2
a = np.clip(1-d, 0, 1)**1.6 * amax        # 指数 1.6 让边缘更柔

颜色用深蓝灰 (18,26,36) 而非纯黑,跟雾蓝调一致,不发脏。


卡点 3:边缘水印——裁切 > 克隆

原图右下角有作者水印「Z」。处理水印的两条路:

方案适用代价
inpaint / clone 涂抹水印压在主体上、不能裁易留痕,参数难调
百分比裁切水印在画面边缘(底部中心/角落)几乎零成本,可参数化

水印在底部边缘 ~96% 高度,TRIM_BOTTOM = 0.06 先裁底再 cover-fit 到 3:4,水印连同冗余前景一起消失,主体不受影响。封面版和无字壁纸版共用同一个裁切参数,保证两张图主体一致。


完整排版流程(Pillow)

原图
 └─ 裁底去水印 (TRIM_BOTTOM)
     └─ 2× supersample 画布 (抗锯齿: 全程 2 倍尺寸, 最后 LANCZOS 缩回)
         └─ cover-fit 等比裁 3:4 (max scale + 居中裁)
             └─ 椭圆暗角 (只压文字角)
                 └─ 竖排中文排版
                 │    ├─ 主标题 牧云人  → 宋体 simsun (编辑感、清晰)
                 │    └─ 副标落款       → 楷体 simkai (柔、诗意) · 错落下沉
                 └─ 文字柔和投影 (由文字层 alpha 派生 → 染深色 → 高斯模糊 → 垫底)
                     └─ 缩回 1080×1440 导出

要点:


归档纪律(这次的运营教训)


如何使用

封标要随主题切设计语言(2026-06-23 即兴抽卡 07/08 补充)

同一抽卡合集里,主题跳出古风时,别套用统一模板(宋体竖排+楷体+暖金那套是”古风专用”,套到时尚/暗黑题材会立刻失味)。做法:保留 cover-fit / 柔投影 / 2x 超采样 脚手架不变,只换文本层的设计,并先上网查该题材的成功封标范式:

落坑提醒:

关联文档

类型/协作工具链