方法论与洞察

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

首次记录: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 超采样 脚手架不变,只换文本层的设计,并先上网查该题材的成功封标范式:

落坑提醒:

深色背景的文字辨识度:柔投影会失效,改”柔光晕”(2026-06-25 噤声封面补充)

前文「文字柔和投影」是深字 + 同色偏移阴影——在亮背景上很好用。但封面文字压在深色/杂乱背景(如人物深发、暗调汉服)上时,柔投影直接失效:深影压深背景,对比还是不够,字糊成一团。先试”把字色加得更深”也救不回来——深字压深背景,加深没有意义

解法:深墨 + 逐字柔光晕(halo)。不是在字下方偏移投影,而是给字铺一圈全向的浅色光晕把它从背景里”托”起来:

def _put(canvas, xy, text, font, fill, halo):   # canvas 为 RGBA
    layer = Image.new("RGBA", canvas.size, (0,0,0,0))
    ImageDraw.Draw(layer).text(xy, text, font=font, fill=fill+(255,))
    a = layer.split()[3]
    hc, hr, ha = halo                            # (光晕色, 模糊半径, 不透明度0-255)
    glow = Image.new("RGBA", canvas.size, hc+(0,))
    glow.putalpha(a.filter(ImageFilter.GaussianBlur(hr)).point(lambda v:int(v*ha/255)))
    canvas.alpha_composite(glow)                 # 先铺光晕
    canvas.alpha_composite(layer)                # 再压实字

判据(一句话记法)

光晕半径别太大(会糊成一团雾),刚好够勾一圈边即可;它和柔投影是互补不是替代。

一张英雄图 → 多比例封面:按画幅分治(2026-06-25 噤声封面补充)

同一张原图要出 3-4 / 16-9 / 4-3 三比例时,别用同一种裁法硬套——按画幅取向分两套:

配套衍生招:采样复刻既有品牌。续做/改某系列封面时,先把旧封面裁出文字区 getpixel 取字色、比对字体、量版式坐标再复刻——比目测对齐快且准(字体尤其容易认错宋体分支)。

配套代码:{AIGC工作站}/aigc-creative-archive/48_即兴抽卡.../05_噤声_水墨红梅汉服/封面/封面生成器_底图05_01.py(满版 + 模糊填充两套 + _put 光晕)。复盘见 2026-06-25_噤声封面重制_文字辨识度与一图多比例复盘

关联文档

类型/协作工具链