MJ 出图 · 绕开抠图陷阱
首次记录:2026-05-12 来源:B 站直播弹幕插件 LiveLink 应用图标制作过程(5 版迭代) 状态:规律已确立,跨”MJ → 图标 / logo”场景都适用
现象
用 MJ 出”白底 + 主体 + 投影”的图标设计原图后,算法抠图永远剔不干净阴影。
具体表现(本项目实测 4 版算法尝试):
| 版本 | 算法 | 结果 |
|---|---|---|
| v1 | floodfill 抠白底 + soft alpha 渐变 | 主体偏左上 + 底部投影占 30% 画面 |
| v2 | dist > 25 二值化 + 高斯模糊 | 主体内部浅色高光被误删,边缘颗粒化 |
| v3 | ”硬核 mask” 膨胀(dist > 50 → MaxFilter 21) | 立方体顶部高光接近背景色被切掉,破损 |
| v4 | 找硬核重心 + squircle mask 切 | 主体在 mask 内但 mask 比立方体本身大,保留了立方体周围的淡光环 |
最终方案:重跑 MJ 用深色背景 → 整图直接当 ICO,不抠图。问题在源头消失。
根因
MJ 在出”glassmorphism / 玻璃 / 半透明”主体时,会按物理光学渲染:
- 主体顶部高光 —— 玻璃球的反射高光颜色接近背景白色(物理正确)
- 主体底部投影 —— 物体投在地面的光晕(产品摄影风格的默认行为)
这两件事让”基于颜色阈值”的抠图算法必然失败:
- 顶部高光 dist 接近 0(接近背景色)→ 阈值法把它当作背景剔除 → 主体顶部被切
- 底部投影 dist 中等(30-60)→ 阈值法很难精确切分”主体边缘渐变” vs “投影柔光”
- 即使用 floodfill + morphology + connected components 组合,只要主体高光和投影都跟主体连成一片,算法分不开
加 prompt 约束(--no shadow, drop shadow, reflection, halo, glow)能减轻投影,但不能消除主体内发光——这是物理玻璃的固有视觉。
绕开方案:深背景整图 ICO
不要试图剔除背景,让背景本身成为 ICO 的一部分。
MJ prompt 改造
加:
floating in deep dark space backgroundvery dark navy blue almost black voidsubtle radial glow around the subject blending into darknessNO ground NO floor NO shadow NO surface NO reflection
处理流程
- MJ 出 1024×1024 深背景图
- 中心裁剪到正方形(如果原图非 1:1)
- 不抠图——整图直接作为 ICO 的多分辨率源
- 缩放到 256/128/64/48/32/24/16
- PIL 合 ICO
icon_1024 = src.crop_to_square().resize((1024, 1024), Image.LANCZOS)
sizes = [256, 128, 64, 48, 32, 24, 16]
versions = [icon_1024.resize((s, s), Image.LANCZOS) for s in sizes]
versions[0].save("icon.ico", format="ICO", sizes=[(s,s) for s in sizes])
这个方案的副作用
✅ 好处
- 算法层零工作量 —— 不抠图、不找 bbox、不算 squircle mask
- 小尺寸下识别度更高 —— 深背景让主体边缘对比强烈
- 跨主题适配 OK —— Windows 浅色任务栏 / 深色任务栏 / Win11 蓝紫壁纸下都好看(实测)
- 跟暗调审美贴合 —— 跳蛛先生的 GAZE 系列那种调性也接得住
⚠️ 限制
- 不适合需要”主体浮在桌面”的产品图 —— 那种就还是要透明 PNG
- 图标在浅色背景上变成”深色卡片” —— 这是 iOS 应用图标的标准外观,多数情况不算瑕疵;但少数 UI 设计场景下会觉得不够”漂浮”
- 主体本身有内发光时还是无法去除 —— 这是物理玻璃的固有视觉,深背景反而让内发光更显眼
决策树
要做 logo / icon?
├── 透明背景必需吗?
│ ├── 是(要浮在用户自定义背景上) → 走透明 PNG → MJ prompt 强制 NO shadow + 算法抠图
│ │ └── 这条路风险高,可能反复迭代算法
│ └── 否(icon 本身可以带背景) → 走深背景整图 ICO
│ └── 这条路一次成型,无算法环节
└── 形态是"玻璃 / 半透明 / 渐变"吗?
├── 是 → 强烈推荐深背景方案
└── 否(实色 / 扁平 / 矢量风) → 透明背景方案可行
经验:玻璃风格 logo 默认走深背景,不要再花时间研究”怎么剔干净”。
关联现象
类似的”绕开陷阱”心法:
- 不要尝试改 MJ 的输入 —— 接受它擅长什么、不擅长什么
- 后期处理 ≠ 万能 —— 算法处理 MJ 出图有边界,超出边界就重出图
- prompt 约束 + 视觉调整 > 算法 + 输出后处理 —— 源头改更便宜
类比《代码生成 vs GPT Image 2 工具选择假说》——选对工具 / 选对源头比后期努力更重要。
如何使用
- 做新 logo / icon 前先看本文件 → 走决策树
- 如果落在”玻璃风 + 需要透明背景”组合 → 提前预警跳蛛先生这是高风险路径,建议改深背景
- 算法抠图尝试不要超过 3 版 —— 第 3 版还不行就换方案,不要陷入”再调一个参数试试”的沉没成本
关联文档
- 配套心法:Claude完成报告核查心法(Claude 自述”已完成”但其实绕开真实需求的同型例)
- 主线交接:
{AIGC工作站}/跨会话协作\B站直播弹幕插件_全局进度_交接给_下一次Cowork.md§三 应用图标决策 - 实证素材:
{项目工作区}/B站直播弹幕+礼物插件/resources\_processed\含本项目 v1-v6 的所有失败迭代(可对照学习)