方法论与洞察

MJ 出图 · 绕开抠图陷阱

首次记录:2026-05-12 来源:B 站直播弹幕插件 LiveLink 应用图标制作过程(5 版迭代) 状态:规律已确立,跨”MJ → 图标 / logo”场景都适用


现象

用 MJ 出”白底 + 主体 + 投影”的图标设计原图后,算法抠图永远剔不干净阴影

具体表现(本项目实测 4 版算法尝试):

版本算法结果
v1floodfill 抠白底 + soft alpha 渐变主体偏左上 + 底部投影占 30% 画面
v2dist > 25 二值化 + 高斯模糊主体内部浅色高光被误删,边缘颗粒化
v3”硬核 mask” 膨胀(dist > 50 → MaxFilter 21)立方体顶部高光接近背景色被切掉,破损
v4找硬核重心 + squircle mask 切主体在 mask 内但 mask 比立方体本身大,保留了立方体周围的淡光环

最终方案重跑 MJ 用深色背景 → 整图直接当 ICO,不抠图。问题在源头消失。


根因

MJ 在出”glassmorphism / 玻璃 / 半透明”主体时,会按物理光学渲染:

  1. 主体顶部高光 —— 玻璃球的反射高光颜色接近背景白色(物理正确)
  2. 主体底部投影 —— 物体投在地面的光晕(产品摄影风格的默认行为)

这两件事让”基于颜色阈值”的抠图算法必然失败:

加 prompt 约束(--no shadow, drop shadow, reflection, halo, glow)能减轻投影,但不能消除主体内发光——这是物理玻璃的固有视觉。


绕开方案:深背景整图 ICO

不要试图剔除背景,让背景本身成为 ICO 的一部分

MJ prompt 改造

加:

处理流程

  1. MJ 出 1024×1024 深背景图
  2. 中心裁剪到正方形(如果原图非 1:1)
  3. 不抠图——整图直接作为 ICO 的多分辨率源
  4. 缩放到 256/128/64/48/32/24/16
  5. 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])

这个方案的副作用

✅ 好处

⚠️ 限制


决策树

要做 logo / icon?
  ├── 透明背景必需吗?
  │     ├── 是(要浮在用户自定义背景上) → 走透明 PNG → MJ prompt 强制 NO shadow + 算法抠图
  │     │       └── 这条路风险高,可能反复迭代算法
  │     └── 否(icon 本身可以带背景) → 走深背景整图 ICO
  │             └── 这条路一次成型,无算法环节
  └── 形态是"玻璃 / 半透明 / 渐变"吗?
        ├── 是 → 强烈推荐深背景方案
        └── 否(实色 / 扁平 / 矢量风) → 透明背景方案可行

经验:玻璃风格 logo 默认走深背景,不要再花时间研究”怎么剔干净”。


关联现象

类似的”绕开陷阱”心法:

类比《代码生成 vs GPT Image 2 工具选择假说》——选对工具 / 选对源头比后期努力更重要。


如何使用

关联文档

类型/协作工具链