半调拼贴海报 Prompt 生成器(路线版)
把任意一张参考图变成一段可直接投喂绘图模型的中文 prompt,并默认生成对应的海报图。
风格内核:单色半调网点 + 丝网印刷 + 杂志拼贴。 分两条路线:高对比 → 锋利(90 年代杂志拼贴)/低对比 → 柔和(ins 文艺莫兰迪)。
触发场景
- "帮我做一张半调海报 / 网点海报 / 波普海报 / 杂志拼贴海报"
- "丝网印刷风 / 网版印刷 / halftone / pop art / zine / scrapbook collage / 孔版印刷人物海报"
- 用户发来照片 + "以这张为参考" / "重新生成" / "也做成这种效果"
默认交付物
- 一段分析摘要 + 结构化中文 prompt(严格按第三步的格式,不增删字段);
- 一张生成的海报图;
- 可选:一行配色配方(主色 / 强调色 hex)。
保存到 ~/Desktop/Claude skills/halftone-pop/(不存在则创建;无写权限时仅在对话中输出)。
仅当用户明确说"只要 prompt"或环境无绘图能力时,才停在 prompt-only。
第一步:分析原图
依次做五件事:
【吸色】主色 —— 原图最深、面积最大的颜色(半调主体用),中文描述 + 近似色名 + hex。
【选强调色】2-3 个 —— 原图里最活泼、跳脱的颜色(装饰 / 方框 / 标题用),中文色名。 宁少勿多。
【读内容】主体类型 —— 人像 / 产品 / 团体照 / 抽象图形 / 风景…
【判断对比度】高还是低 —— 必须程序量化,不要凭感觉:
指标 高对比 低对比 灰度标准差 std > 55 < 45 P95 − P5 动态范围 > 150 < 120 暗部(<60)占比 高 低 亮部(>200)占比 高 低 满足 2 条以上即定性:高对比 → 路线 A 锋利;否则 路线 B 柔和。
【读风格】拼贴元素 —— 原图有没有方框特写、大标题、小标签、胶片小图、涂鸦、条码…
取色 / 对比度脚本
python scripts/extract_colors.py "图片路径" # 主色、暗部主色、有彩度暗色、点缀色(含 hex 与占比)
对比度可用几行 OpenCV 自算:gray.std()、np.percentile(gray,[5,95])、(g<60).mean()、(g>200).mean()。
边界情况
- 原图无彩色(纯黑白 / 单色照):饱和度均值≈0,没有"活泼强调色"可提取。
不要硬编荧光色,也不要说无法完成 —— 明确说明,然后按路线派生低饱和强调色:
- 路线 A:1-2 个跳脱但压得住的颜色(砖红、钴蓝、芥黄…),占 5-10%;
- 路线 B:2-3 个邻近莫兰迪色,占 15-20%。
- 原图没有拼贴元素:拼贴是本风格的固有语汇,可新写大标题 / 小标签, 内容必须与主体相关(团体名、日期、期号、GUEST STAR…),总量克制。
第二步:按路线生成 Prompt
路线 A:高对比 → 锋利风格
适用:对比度高、色彩浓烈、人像/团体照偏硬照感。
- 半调主色:高对比黑白(或原图主色),明暗差距拉满——暗部纯、亮部白。
- 网点:锐利清晰,边缘无毛刺,有力量感。
- 强调色:1-2 个跳脱色,占画面 5%-10%,只用在标题 / 方框 / 极小点缀。
- 装饰极简:方框强调 + 大标题 + 小标签,不加花花草草。
- 气质:锋利、杂志感、90 年代拼贴风。
路线 B:低对比 → 柔和风格
适用:灰调柔和、莫兰迪感、相近色搭配、偏文艺/治愈。
- 半调主色:低饱和莫兰迪色调,明暗过渡柔和。
- 网点:细腻均匀,柔和过渡。
- 强调色:2-3 个邻近色,占画面 15%-20%,可多些装饰。
- 装饰:方框 + 大标题 + 小标签 + 少量装饰元素(花/星星/圆点),不超过 5 个。
- 气质:温柔、文艺、ins 风、治愈系。
两条路线共同规则
- 配色遵循 60-30-10 法则。
- 装饰元素从原图识别出的元素里选,不凭空加。
- 细实线方框圈出局部特写,1-3 个,紧贴局部边缘,利落干脆。
- 大标题:粗体大写英文,放左上角或右上角,占画面宽度约三分之一。
- 小标签:放右下角,小号字体,不抢主体。
- 留白充足,不塞满。
- 背景三选一:A 纯白 / B 浅灰渐变(上深下浅)/ C 淡色半调渐变。
- 网点 45 度斜角排列,有老式胶印颗粒感。
第三步:输出格式
┌─ 提取结果 ──────────────
│ 主色:{颜色}
│ 强调色:{颜色1}、{颜色2}、{颜色3}
│ 主体类型:{类型}
│ 对比度判断:{高对比 → 锋利路线 / 低对比 → 柔和路线}
│ 拼贴元素:{方框/大标题/小标签/胶片小图 等}
└──────────────────────────
完整 Prompt:
{主体描述},{景别/角度},半调拼贴海报风格。
半调网点效果,单色丝网印刷风格。整张画面用{主色}的均匀圆形网点呈现主体,{路线A:明暗对比强烈,暗部纯黑亮部纯白,边缘锐利无毛刺 / 路线B:明暗过渡柔和,细腻均匀,有灰调层次}。网点为45度斜角排列,{路线A:有老式胶印的锋利颗粒质感 / 路线B:有细腻柔和的印刷颗粒感}。
{配色描述:}
路线A:仅使用从原图提取的{强调色1}、{强调色2}作为强调色,占画面约5%至10%,仅出现在标题、方框和极小面积点缀上,其余全部为{主色}。
路线B:使用从原图提取的{强调色1}、{强调色2}、{强调色3}作为点缀色,占画面约15%至20%,分布在装饰元素上。所有颜色为低饱和莫兰迪色调,柔和统一。
画面左上角放置粗体大写英文标题,内容为{与主体相关的英文短语},字体为{粗衬线/粗黑体},颜色为{强调色},占画面宽度约三分之一。
用{强调色}细实线方框圈出1至3处局部特写(如眼睛、手部、产品细节),方框紧贴局部边缘,利落干脆。
画面右下角放置小标签文字,内容为{日期/编号/小字说明},小号字体,不抢主体。
{背景,三选一:}
A. 纯白背景,干净利落
B. 浅灰渐变背景,从上到下由深到浅过渡,有空间感
C. 淡色半调渐变背景,柔和过渡,不抢主体
{路线专属补充:}
路线A:周围可散布极小面积的{强调色}小星星/小方块点缀,稀疏分布,不超过5个。
路线B:周围可散布少量装饰元素(从原图识别出的类型选2至3种),大小错落,分布稀疏透气。
四周保留充足留白,画面平衡不呆板。{画幅比例}。
{路线A:锋利半调印刷感,90年代杂志拼贴风格,高对比,高分辨率,网点清晰锐利 / 路线B:柔和半调印刷感,ins文艺风格,低饱和莫兰迪,高分辨率,适合印刷输出}。
字段填写规则:
{景别/角度}:团体照写"一字排开的全身群像,正面平视";单人写"半身胸像,正面微侧,平视角度"。{画幅比例}:默认沿用原图比例(横图3:2 横版,竖图3:4 竖版)。- 大标题内容取与主体相关的英文短语(团体名 / 歌名 / 期号名);中文标题会破坏印刷感。
- 小标签写日期 / 编号 / 期号一类短字,如
2026.03.26、NO.11、GUEST STAR。
⚠️ 小标签放右下角 = 平台水印区。出图后清完水印要原样重绘标签,不要让它跟着水印一起消失(见下节)。
去除平台水印(出图后处理)
绘图服务会在成品右下角盖上「AI生成 WORKBUDDY」水印。若需要干净版:
python scripts/remove_watermark.py "<成品图路径>" # 通用:同列上方错位取补丁
若水印压在自有小标签(编号/日期)上,用带重绘的版本:
python scripts/remove_watermark_relabel.py "<输入图>" "<输出图>" \
--text "NO.11 / 2026 03.26"
它会:连通域定位标签 → 覆盖水印区 → 用同款字体原样重绘标签。
水印跨「明暗交界」(一侧黑一侧浅底)时,上面两种整块替换都会毁掉一侧,改用分区重建:
python scripts/remove_watermark_zones.py "<输入图>" "<输出图>" \
--zone 872,1014,1448,1536 --text "2026 / NO.03" --label-box 835,980,1470,1491
分区规则:局部均值(blur 31)低于阈值判为暗区 → 用该区中值色 + 轻噪声重建
(纯黑衣物等无细节区,视觉无损);亮区若水印仍可见 → 做白色叠加的物理反演。
硬规则(都是踩过坑的)
- 不要用云端 erase / 智能擦除类工具 —— 实测会把标题或主体一起抹掉。
- 纹理补丁优先取「同一 y 行、左侧紧邻」的区域:半调网点的点径随纵向渐变变化, 取上方区域会让补丁网点尺度不同,留下明显方块边界(横向则尺度天然一致)。
- 判断"源区是否干净"不能按单像素灰度(网点本身就是深色像素), 要先大尺度模糊(21×21)再看有没有成片暗块。
- 坐标必须程序检测,凭放大截图目测会偏。定位标签用连通域面积过滤(面积 ≥25)排除网点噪点; 水印是白色半透明,压在深色区时不能用"深色像素"阈值。
- ROI 必须外扩到图像右边界与下边界,否则尾部字母残留。
- 竖版 (1024×1536) 水印 bbox ≈ x 900–1015、y 1472–1526; 横版 (1536×1024) bbox ≈ x 1385–1520、y 940–1010。
- 重绘标签的字号:先按目标墨迹高度定号,再把字形水平缩放到目标宽度 (原字体通常比 Arial Bold 窄),并以 ~0.96 不透明度 + ±4 高斯噪声混入,保留印刷颗粒感。
- 水印若与原图自带徽标 / Logo 叠在一起,两者都属于第三方标识,可一并清除。
- 判明暗分区不能用 erode/dilate:网点区里
erode会取到网点暗点、dilate会取到网点白缝, 两种都会判错。用cv2.blur(gray, (31,31))的局部均值 + 连通域过滤 + 向内收缩 13px (收缩是为了避开黑白交界的混合带,否则交界处会留下一条暗带)。 - 白色水印是物理叠加:
obs = (1-a)·orig + a·255。测出a后可逐像素反演orig = (obs - 255a)/(1-a),能完整还原纹理(比 inpaint/补丁更准)。a用「笔画内中值 vs 其外环中值」直接估计,实测暗区 ≈0.72、浅底 ≈0.40。 - 掩膜别把自家标签一起圈进去:自有彩色标签用饱和度排除(
S > 55)。 - inpaint(TELEA)在大面积掩膜上会失败(从同样被污染的邻居插值 → 填出亮块), 只适合细笔画;面积大就走分区重建。
质量校验(出图后自检)
- 是否只有主色一种网点表现主体?有无多色网点 / 荧光色?
- 网点是否 45 度斜角、圆润均匀?路线 A 是否锐利无毛刺、明暗是否拉满?
- 配色是否 60-30-10?路线 A 强调色是否在 5-10%、只出现在标题/方框/极小点缀?
- 方框是否 1-3 个、细实线、紧贴局部?大标题是否在左上/右上、约占 1/3 宽? 小标签是否在右下且不抢主体?
- 装饰是否全部来自原图元素库?路线 A 装饰是否极简?
- 主体是否可辨认?留白是否充足、有没有塞满?
任一项不达标,调整 prompt 重生成一次;仍不达标则说明偏差,不假装达标。
输出格式
**提取结果**
- 主色:{颜色}
- 强调色:{颜色1}、{颜色2}、{颜色3}
- 主体类型:{类型}
- 对比度判断:{…}(附 std / 动态范围数值)
- 拼贴元素:{方框 / 大标题 / 小标签 / 胶片小图}
**完整 Prompt**
```text
[按第三步结构产出的完整 prompt]
```
**生成图**

**本次配色**
- 主色: {hex} 强调色: {hex × 2-3}
- 画幅: {ratio}
触发示例
- "用 halftone-pop 把这张照片做成半调拼贴海报。"
- "以这张为参考,重新生成一张。"
- "这张图是高对比还是低对比?给我对应的 prompt。"