抠出透明背景
内置工具没有一个叫"透明"的开关——因为 gpt-image-2 根本不支持 background=transparent。这一章教你绕过这堵墙:先在纯色幕布前生成主体,再用 remove_chroma_key.py 把幕布抠掉,得到带 alpha 通道、四角干净的 PNG。整套流程默认全在内置模式里完成,不动一行密钥。
"透明背景"是自媒体物料里最常见的硬需求:贴纸、Logo、商品小图、可叠加的角色立绘,都要一张能落在任意底色上的 PNG。但内置工具里找不到一个"透明"按钮——这不是疏漏,而是底层模型的限制。本章给你一条不依赖 API Key 的稳定路线:色度键合成(chroma key)。
为什么内置没有"真透明开关"
内置 image_gen 背后的模型是 gpt-image-2,而它不支持 background=transparent 这个参数。真正的"原生透明"——让模型直接吐出带 alpha 通道的图——只有 CLI 回退里的 gpt-image-1.5 能做,而那需要 OPENAI_API_KEY、需要联网、需要花钱。
所以面对绝大多数透明需求,正确的默认动作不是切 CLI,而是换个思路:既然模型不能直接画透明,那就让它在一块"完全平整的纯色幕布"上画主体,事后我们自己把这块幕布抠掉。这正是影视绿幕(chroma key)的逻辑——拍的时候站在绿布前,后期把绿色替换成透明。
简单透明 = 内置生成 + 本地色度键移除,全程无需 Key。只有当本地移除校验失败、或主体本身复杂到色度键搞不定(头发、毛羽、玻璃、烟雾、半透明、柔和阴影……)时,才先征求同意再升级到 gpt-image-1.5 的真透明。顺序不能反。
默认流程:色度键四步走
把上图拆成可照做的四步。整条流程的"主战场"始终是内置工具,唯一动到命令行的地方是第四步那一行本地脚本——它只是图像后处理,不调用任何远程 API。
在纯色幕布上生成主体
用内置 image_gen,提示词里明确要求"完全平整的纯色色度键背景"。这一步决定抠图成败——幕布越干净,后面越省事。
选对 key 色
默认 #00ff00(纯绿)。但若主体本身偏绿,改用 #ff00ff(品红);若主体偏蓝,避开 #0000ff。原则:key 色绝不能和主体撞色,否则主体会被一起抠掉。
把源图拷进工作区或 tmp
内置默认存到 $CODEX_HOME/generated_images/…。先 move/copy 到工作区或 tmp/imagegen/,再对它跑脚本——别在默认目录里直接操作。
跑 remove_chroma_key.py 并校验
脚本输出带 alpha 的 final.png。逐项校验四角透明、无 key 色残边,必要时加 flag 微调(见 第五节)。
普通主体 → #00ff00(绿,默认)。绿色 / 含绿主体 → #ff00ff(品红)。蓝色主体 → 任选绿或品红,但避免 #0000ff。挑色的唯一标准是"和主体最不像的那个"。
写好色度键提示词
抠图脚本再聪明,也救不回一块带阴影、带渐变、有反光的幕布。质量在提示词阶段就锁定了。技能给了五个要点,缺一不可:
- 幕布纯且平——纯 #00ff00、完全平整,专为抠图准备。
- 背景单一均匀——无阴影、无渐变、无纹理、无反射、无地面、无光照变化。
- 主体与背景彻底分离——边缘清晰,四周留足内边距(padding),别贴边。
- 主体内不出现 key 色——主体身上不要有任何 #00ff00 的区域。
- 干净到底——无投影、无接触阴影、无反射、无水印、无文字(除非明确要求)。
#00ff00 整体替换为 #ff00ff,并相应把"主体内不得出现 #00ff00"改成"不得出现 #ff00ff"。其余措辞不变。运行抠图脚本
幕布图拷进工作区后,对它跑技能自带的本地后处理脚本。它纯靠 pillow 做图像运算,不联网、不要 Key,但需要先 uv pip install pillow。下面这条命令带齐了推荐 flag:
--auto-key border 从图像四边自动判定 key 色,省得你手填 HEX;--soft-matte 生成柔和的边缘过渡而非硬切;--transparent-threshold 12 与 --opaque-threshold 220 划定"完全透明"与"完全不透明"的两道门槛;--despill 去掉主体边缘被幕布染上的那圈绿边(溢色)。这套参数是适配绝大多数情形的稳妥起点。
校验清单与边缘微调
脚本跑完别急着交付。逐条过一遍校验清单——任何一条不达标,都意味着要么重生成、要么调 flag 重抠:
- 输出 PNG 确实带 alpha 通道(不是把绿色刷成白色而已)。
- 四角完全透明,没有残留的幕布色块。
- 主体覆盖比例合理,没被误抠掉一部分。
- 主体边缘没有 key 色描边(绿边 / 品红边)。
若发现问题,一次只调一个参数再复检,别一把堆上去。下表列出最常见的边缘瑕疵与对应解法:
| 症状 | 追加 flag | 作用 |
|---|---|---|
| 主体边缘有一圈细细的 key 色残留 | --edge-contract 1 | 把 alpha 边界向内收缩 1 像素,吃掉那圈细边。 |
| 边缘呈锯齿 / 阶梯状,且主体不反光 | --edge-feather 0.25 | 给边缘加一点羽化,让阶梯过渡变柔。 |
| 边缘有整圈溢色(绿 / 品红染边) | --despill | 已在基础命令里;这是去溢色的主力 flag。 |
--edge-feather 只在"边缘阶梯化 且 主体不反光"时才加。主体若本就有反光 / 高光,羽化会让边界发糊;这种情况应优先考虑重生成或升级真透明,而不是硬羽化。何时升级到真·原生透明
色度键能干净利落地处理"边缘明确、不透明、不反光"的主体——图标、贴纸、扁平插画、实心商品。但有一类主体它天生啃不动:
色度键够用
实心边缘、不透明、无柔影的主体:扁平图标、Logo、贴纸、纯色商品、卡通角色立绘。这些留在内置 + 本地抠图即可,又快又省。
需要真透明
头发 / 毛发 / 羽毛、烟雾、玻璃、液体、半透明、反光材质、写实柔和阴影、写实落地接触面,或主体颜色与所有可用 key 色都冲突——这些是色度键的死角。
遇到复杂主体、或本地抠图校验反复失败时,绝不要擅自切到 CLI 的 gpt-image-1.5 真透明——那是一次需要 Key、联网、花钱的模型升级。正确动作是先停下来问用户:解释清楚 gpt-image-2 不支持 background=transparent、真透明需 gpt-image-1.5 且需 OPENAI_API_KEY,得到明确同意后,再走 CLI 回退。
一旦用户拍板要真透明,CLI 路径的关键形态是:用 scripts/image_gen.py 的 generate 子命令、指定 gpt-image-1.5 模型,并带上 --background transparent 与 --output-format png。它会让模型直接输出带 alpha 的 PNG,跳过整套色度键流程。但记住:这是最后一个抽屉,不是默认动作。
始终向用户汇报三件事:最终保存路径(落地进工作区,别只留在 $CODEX_HOME)、最终用的提示词、以及用了哪种模式(内置 + 色度键,还是 CLI 真透明)。不覆盖已有资产,需要新版就另存 box-icon-v2.png。
内置工具没有透明开关,因为 gpt-image-2 不支持 background=transparent。默认走色度键四步:在纯色幕布(key 色默认 #00ff00 / 绿色主体用 #ff00ff / 蓝色主体避开 #0000ff)前生成 → 拷进工作区或 tmp/imagegen → 跑 remove_chroma_key.py --auto-key border --soft-matte --despill → 校验四角透明、无残边。细边加 --edge-contract 1,阶梯且不反光才加 --edge-feather 0.25。只有头发 / 玻璃 / 烟雾 / 反光等复杂主体才需真透明——那要先问,再用 CLI 的 gpt-image-1.5 配 --background transparent(需 Key)。收尾务必汇报路径、提示词与所用模式。