跳转到主要内容

AI 透明背景与抠图实测:头发丝能留住,玻璃杯两条路都发灰

单次实测:GPT Image 2.5 直接出透明底,发丝和蒲公英绒毛都留住,玻璃杯蒙着灰白雾;灰底再用 rembg 抠,玻璃里留着灰底。头发直接要透明底,玻璃按最终底色出图。

LaoZhang AI Team发布于19 分钟阅读
文章目录
AI 透明底实测封面:卷发和蒲公英直接输出透明底,半透明像素分别占 77.7% 和 62.3%,空红酒杯两条路线都发灰,玻璃改按最终底色出图

做透明底素材,难的不是轮廓,而是三类边缘:飘散的头发丝、蒲公英这类绒毛,以及能透出背后颜色的玻璃。2026 年 10 月 19 日的一轮小测试里,结论分成两半:头发和绒毛,让 GPT Image 2.5 直接输出透明底,比先出灰底再抠图留下的细丝更多;透明玻璃杯,两条路都没有做出能直接放到新背景上的玻璃,直接输出的杯身蒙着一层灰白雾,抠图版则把灰色底留在了杯子里。

先把这次测试的范围说清楚,下面所有结论都只在这个范围内成立:

  • 跑了:通过 laozhang.ai 的 gpt-image-2.5-sunburst-vip 调用 GPT Image 2.5 Sunburst,1024×1024、quality high;空红酒杯、卷发女性、蒲公英三个题材,每个题材"直接要透明底"和"中灰底再抠图"各生成 1 次,共 6 次调用,全部返回 HTTP 200,单次 36–49 秒,按 $0.03/次的报价合计 6 × $0.03 = $0.18。抠图用本地开源的 rembg 2.0.85,只用 CPU,试了 5 种设置。每张结果都量了 alpha,并合成到黑、白、红底上看边缘。
  • 没跑:OpenAI 官方 API 直连、gpt-image-2.5-flare、gpt-image-2、ChatGPT 应用、Nano Banana/Gemini、Midjourney;remove.bg、Photoroom、Canva、Adobe Express 这些付费在线抠图,Photoshop 的"选择并遮住";rembg 的 vitmatte、完整版 birefnet-general、isnet;同一题材的第二次生成;"直接在最终底色上生成玻璃杯"这条做法本身。

说明:laozhang.ai 是我们自己的服务,其价格是平台报价,不是独立比较的结论。

每条路线每个题材只有一张图,所以这里没有成功率,只有"这一张是什么样"。两条路线是分开生成的,提示词相同,但出来的人和杯子不是同一个,比较的是做法,不是逐像素对照。

按主体选做法:头发直接要透明底,玻璃按最终底色出图

下面这张表是从 6 张生成图和 15 个抠图结果推出来的选择规则,属于推断,不是任何厂商的规定,也没有在更多样本上验证。

你手上的素材这次结果更好的做法交付前要看什么
还没生成的人像、动物毛发直接让模型输出透明底(API 传 background: "transparent",存 PNG 或 WebP)放在黑底和红底上看发梢有没有白边或灰边
已有的人像照片用 BRIA RMBG-2.0 或 BiRefNet 这一类模型抠,不用 u2net细发上的灰色毛边;商用先看模型许可
玻璃杯、瓶子、塑料膜等透明物体直接在最终要用的底色(或接近的颜色)上生成或拍摄,或者进修图软件手动合成换到彩色底上,杯身里有没有残留旧背景色
蒲公英、羽毛、毛绒这类细丝直接要透明底中心有没有被挖空,外圈有没有一圈光晕
轮廓清楚的商品、Logo两条路都行,按现有素材选边缘一圈有没有白边

玻璃那一行里"在最终底色上出图"这次没有测,是因为两条测过的路线都不行才退到这一步:它绕开了透明问题,代价是换一种底色就得重新出一张。

需要按素材类型逐个讲工具(Office、预览、画图、Canva、在线抠图)和导出格式的,见 透明底图片怎么做:按素材选方法,再确认真的透明。

直接输出透明底的结果:头发 77.7% 是半透明像素,玻璃杯身平均 alpha 97.5

先说 alpha。透明 PNG 的每个像素除了颜色,还带一个 0–255 的 alpha 值:0 是完全透明,255 是完全不透明,中间的值就是半透明。"透明背景"指背景区域 alpha 为 0;头发丝边缘、玻璃这种地方需要的是中间值,也就是半透明主体。两件事经常被混成一个词,但抠图失败恰恰出在后者。

三张直接输出透明底的图,返回字段都写着 background: "transparent"、output_format: "png",文件确实带 alpha 通道:

题材alpha 0alpha 2551–254 半透明合成到黑、白、红底上的样子
卷发女性22.3%0.0%77.7%飘出去的发丝都在,三种底色上都没有光晕,是这次测试里最好的头发结果
蒲公英37.7%0.0%62.3%细丝和棕色花托都保留,黑底上外圈有一点白色光晕
空红酒杯78.3%0.0%21.7%杯口和杯脚的高光自然;杯身中央平均 alpha 97.5,确实透出背景,但带一层斑驳的灰白膜,黑底上像一团雾,红底上泛粉

百分比是占整张 1024×1024 画面的比例。头发那 77.7% 看起来很高,是因为 alpha 255 这一列是 0:整个人物都落在 1–254 的区间里,原因放在后面单独讲。

玻璃这一行是最需要注意的。杯身 alpha 97.5 说明模型知道玻璃应该半透明,问题在颜色:半透明像素里带的是一层偏白的灰,换到任何底色上都会把这层灰叠上去。放在白底电商图上几乎看不出,放在深色海报上就是一团雾。

灰底再抠图的结果:5 种 rembg 设置都把玻璃抠成了实心

另一条路线是先让模型在纯中灰(#808080)背景上出图,再用 rembg 在本机 CPU 上抠。纯色背景加清晰轮廓本来是抠图最容易的情况,这次三个题材专门挑了最难的边缘:

设置玻璃杯头发蒲公英
u2net杯身几乎不透明,灰底留在杯里,红底上是一只灰杯子边缘一圈模糊光晕,飘发被抹掉,头旁边有灰块整个外圈一圈灰色光晕,中心保留
u2net + alpha matting同上和 u2net 相近,边更硬,54.7% 像素完全不透明同上,更糊
birefnet-general-lite同上飘发留住了,但颗粒感重、有块状碎片中心被挖出洞
bria-rmbg(rembg 默认,BRIA RMBG-2.0)同上发丝留住,细发上有一圈淡灰毛边棕色花托大部分被去掉,剩下块状的洞
bria-rmbg + decontaminate同上alpha 与上一行完全相同,毛边颜色淡一些同样的洞

玻璃杯一栏五行都一样:抠出来的杯身平均 alpha 在 254.2–254.9 之间,几乎是实心。杯子里看到的灰色是拍摄背景透过玻璃的样子,抠图模型把它当成杯子本身的颜色保留下来,所以换到红底上,杯子仍然是灰的。

头发上,BRIA RMBG-2.0 是这五种设置里最好的,但细发上的灰边比直接输出透明底那张明显。decontaminate 选项改的是边缘像素的颜色,不改哪些像素算前景,所以它能让灰边淡一点,救不回丢掉的发丝。rembg 的 README 把 alpha matting 定位成"遮罩形状错了"时用的、按封闭解重新估计覆盖范围,比 decontaminate 慢得多;这次在 u2net 上加了 alpha matting,头发和玻璃都没有被救回来。

玻璃为什么比头发难:缺的不是半透明,而是背景色被留在了玻璃里

头发丝的问题是覆盖率:一根发丝只占一个像素的一部分,这个像素应该是半透明的,比如 alpha 80。抠图模型只要把发丝边缘的 alpha 估准,再把边缘里混进去的旧背景色清掉,头发放到新背景上就是对的。BRIA 和 BiRefNet 这类新模型在这件事上明显比 u2net 强,这次的头发结果也印证了这一点。

玻璃的问题不一样。一张已经拍好或生成好的玻璃杯照片里,杯身每个像素的颜色都是"玻璃的反光 + 透过来的背景"混在一起的结果。要把它变成能放到任意底色上的透明素材,需要同时做两件事:给杯身合适的半透明 alpha,并把透过来的那部分背景色从像素里减掉。

  • 抠图模型只输出 alpha。它把杯子判断成一个整体前景,给了接近 255 的值,背景色留在像素里,于是变成一只灰色的实心杯子。
  • 直接生成透明底的那张图,alpha 给对了方向(杯身平均 97.5),但像素颜色里仍然带着一层不属于玻璃的灰白,所以叠到深色、彩色底上会发雾。

玻璃杯两条路线对照:灰底加 rembg 抠图的杯身平均 alpha 为 254.2–254.9,灰底留在杯里;直接输出透明底的杯身平均 alpha 为 97.5,但带一层灰白膜,黑底上像一团雾

这也解释了"在最终底色上出图"为什么是这次能给出的稳妥做法:玻璃后面本来就是最终那个颜色,透过来的颜色就是对的,不需要透明通道。代价是素材不能随便换底,海报和详情页底色不同就要各出一张。

GPT Image 2.5 透明 PNG 没有一个像素是 alpha 255:影响和修法

三张直接输出透明底的文件有同一个特点:最高 alpha 是 254,99% 分位是 253,完全不透明的像素占 0.0%。人物脸部、杯脚这种明明不透明的地方,alpha 落在 251–253,大约有 1% 透出背景。另外画面里还有一层肉眼看不见的薄雾,alpha 只有 1–3,头发那张占全图 4.4%,玻璃那张占 1.0%。

单独放一层时,1% 的透明度看不出来。它会在这些情况下冒出来(这部分是推断,下游工具没有测):

  • 有些"是否完全不透明"的检查只认 alpha 等于 255,会把整个人物判成半透明;
  • 同一个素材叠好几层时,雾和 1% 的透明会累积;
  • 自动裁边按"alpha 大于 0"找边界时,那层 alpha 1–3 的薄雾会让边界框比主体大。

修法是把两头的值收紧:alpha 大于 250 的改成 255,小于 4 的改成 0。下一节的脚本加 --clean 就是这么做的。在头发那张图上试过,清理后 58.5% 的像素完全不透明,薄雾 0.0%,最高 alpha 255。这一步只动两端,发丝边缘那些中间值保持原样。

交付前用 check_edges.py 在深色和彩色底上检查

浏览器和看图软件常把透明区域显示成白色或棋盘格,这时候灰边和白边最容易藏住。OpenAI 的图片提示词指南也要求检查解码后图片的 alpha 通道,点名了头发、玻璃、阴影和物体边缘。下面这个脚本就是这次测试里用过的版本,原样贴出,没有改动:

python
"""check_edges.py — inspect a transparent PNG/WebP before you use it.

    python check_edges.py image.png            # report + preview sheet
    python check_edges.py image.png --clean    # also write image.clean.png

Needs: pip install pillow numpy
"""
import sys

import numpy as np
from PIL import Image

path = sys.argv[1]
im = Image.open(path)
if im.mode not in ("RGBA", "LA") and "transparency" not in im.info:
    sys.exit(f"{path}: mode {im.mode}, no alpha channel. Any checkerboard you see is painted pixels.")

rgba = im.convert("RGBA")
a = np.asarray(rgba)[..., 3]
total = a.size
print(f"{path}: {im.size[0]}x{im.size[1]}, mode {im.mode}")
print(f"  fully transparent (alpha 0):     {100 * (a == 0).sum() / total:5.1f}%")
print(f"  fully opaque (alpha 255):        {100 * (a == 255).sum() / total:5.1f}%")
print(f"  partly transparent (1-254):      {100 * ((a > 0) & (a < 255)).sum() / total:5.1f}%")
print(f"  near-invisible haze (alpha 1-3): {100 * ((a > 0) & (a < 4)).sum() / total:5.1f}%")
print(f"  highest alpha in the file:       {a.max()}")
if a.max() < 255:
    print("  note: no pixel is fully opaque; the whole subject lets a little of the background through")

# Preview: the same image on black, white, red and a mid grey
w, h = rgba.size
sheet = Image.new("RGB", (w * 4, h))
for i, color in enumerate([(0, 0, 0), (255, 255, 255), (200, 30, 40), (128, 128, 128)]):
    bg = Image.new("RGBA", (w, h), color + (255,))
    bg.alpha_composite(rgba)
    sheet.paste(bg.convert("RGB"), (i * w, 0))
out = path.rsplit(".", 1)[0] + ".preview.png"
sheet.save(out)
print(f"  preview on black / white / red / grey: {out}")

if "--clean" in sys.argv:
    arr = np.asarray(rgba).copy()
    alpha = arr[..., 3]
    alpha[alpha < 4] = 0      # drop the invisible haze
    alpha[alpha > 250] = 255  # make the solid core really solid
    clean = path.rsplit(".", 1)[0] + ".clean.png"
    Image.fromarray(arr, "RGBA").save(clean)
    print(f"  cleaned copy: {clean}")

用法:

bash
pip install pillow numpy
python check_edges.py hair.png
python check_edges.py hair.png --clean

测试环境是 Python 3.12、Pillow 12、numpy 2.5,跑过两个 RGBA 文件和一个 RGB 文件。读输出时看三处:

  1. 没有 alpha 通道就直接退出,提示 no alpha channel。这时你看到的棋盘格是画进像素里的,不是透明。这种假透明怎么判断、API 参数怎么传、怎么用泛洪填充补救,见 GPT Image 透明背景变棋盘格:真假透明怎么判断、怎么修。
  2. 最高 alpha 不是 255,会多打一行 note,说明主体整体有一点透。需要严格不透明时加 --clean。
  3. 预览图(文件名带 .preview.png)把同一张图依次放在黑、白、红、中灰四种底上。白边在黑底上最明显,灰边和玻璃里的残留底色在红底上最明显,中灰底用来对照抠图前的拍摄背景。

check_edges.py 预览图的四种底色各看什么:黑底看白边,白底容易藏住灰边和雾,红底看灰边和残留底色,中灰底对照拍摄背景

免费的本地抠图 rembg:默认 BRIA 模型商用要先签协议

rembg 本身免费、离线运行,代码是 MIT 许可,但 README 写明模型权重各有各的许可。2.0.85 版的默认模型 bria-rmbg 下载的是 BRIA RMBG-2.0,它的模型页写的是 CC BY-NC 4.0,只限非商业使用,商业使用要和 BRIA 另签协议(模型页提供购买表单,或改用 Bria API)。电商主图、详情页、广告素材都属于商业用途。BiRefNet 权重页标的是 MIT 许可;u2net 权重的许可这次没有查到原文,不在这里下结论。这些只是许可页面的原文要点,不构成法律意见。

安装和这次测试的 CPU 用时(Apple 芯片 MacBook,每张 1024×1024;换成 GPU 会快很多):

模型首次下载每张用时这次的表现
u2net176 MB0.6–1.5 秒头发、蒲公英都有光晕
u2net + alpha matting同上1.3–2.1 秒没有救回发丝
birefnet-general-lite224 MB16–91 秒飘发留住但颗粒感重,蒲公英中心有洞
bria-rmbg(默认)1.0 GB75–146 秒头发最好,蒲公英花托被挖掉

用 pip install "rembg[cpu]" 安装,要命令行再加上 cli 扩展;README 要求 Python 3.11 到 3.13。这次的抠图是在 Python 里调用的,核心就是下面两行(从测试脚本里摘出来,去掉了循环和计时,这个缩短版本身没有单独跑过):

python
from PIL import Image
from rembg import new_session, remove

session = new_session("bria-rmbg")  # 或 "birefnet-general-lite"、"u2net"
remove(Image.open("hair-grey.png"), session=session).save("hair-cut.png")

要试 decontaminate,在 remove() 里加 decontaminate=True;要试 alpha matting,加 alpha_matting=True。模型名和参数以 rembg 的 GitHub README 为准,商用前读一遍 BRIA RMBG-2.0 的 Hugging Face 模型页。

用 API 直接要透明底时,请求里写什么

OpenAI 的图片生成指南写明,gpt-image-2.5-sunburst 和 gpt-image-2.5-flare 要透明背景都是设 background: "transparent",输出用 png 或 webp;gpt-image-2 的透明背景还在预览阶段。提示词指南另外建议在文字里也写上不要纯色底、棋盘格、场景和投影,后续编辑时再重复一遍"保留透明背景"。

这次直接输出透明底用的请求体如下,发到 laozhang.ai 的 /v1/images/generations:

说明:laozhang.ai 是我们自己的服务,其价格是平台报价,不是独立比较的结论。

json
{
  "model": "gpt-image-2.5-sunburst-vip",
  "prompt": "Head-and-shoulders portrait of a young woman with long curly hair, many loose flyaway strands blowing outward around her head, centered with padding, soft studio light. Transparent background. Isolated subject. No backdrop, no scenery, no checkerboard, no cast shadow.",
  "size": "1024x1024",
  "quality": "high",
  "background": "transparent",
  "output_format": "png"
}

灰底那一组把提示词结尾换成"plain flat uniform mid-grey (#808080) studio backdrop",background 改成 "opaque"。

按 laozhang.ai 的GPT Image 2.5 接入文档,gpt-image-2.5-sunburst-vip 和 gpt-image-2.5-flare-vip 都是 $0.03/次,不随尺寸、质量、参考图和生成/编辑变化,支持 background="transparent" 加 output_format="png" 出透明 PNG,不支持 mask 局部编辑;文档提到的编辑接口去背景这次没有测。走 OpenAI 官方计费时单张费用怎么算、两种计费怎么选,见 GPT Image 2.5 Sunburst 价格:官方单图费用与按次计费怎么选。

透明背景和抠图的几个相关问题

ChatGPT 能直接生成透明背景的图片吗?

能,但在 ChatGPT 里没有 background 这个参数可选,只能在文字里要求透明背景,结果要以下载下来的文件为准:用上面的脚本看有没有 alpha 通道,再看边缘。这次测试没有跑 ChatGPT 应用,具体表现和画出来的假棋盘格问题见 GPT Image 透明背景变棋盘格。

AI 抠图后为什么有白边或灰边?

边缘的半透明像素里混着原来的背景色。白底上抠出来的图换到深色底上就是白边,这次灰底抠出来的头发在红底上是灰边。处理办法是用能修正边缘颜色的设置(rembg 的 decontaminate 让这次的灰边淡了一些),或者一开始就在接近最终底色的背景上生成。发丝已经被抠掉的情况,改边缘颜色救不回来,要换更好的抠图模型或改用直接输出透明底。

头发丝怎么抠干净?

还没生成的图,这次最干净的是直接要透明底:GPT Image 2.5 输出的飘发在黑、白、红三种底上都没有光晕。已有照片,在测过的本地模型里 BRIA RMBG-2.0 最好,BiRefNet-lite 次之但有颗粒,u2net 会把飘发抹掉;不管用哪个,都在黑底和红底上各看一遍发梢。

透明玻璃杯能抠成透明的吗?

这次测过的两条路都做不到能直接换底的效果:直接输出的杯身半透明但发雾,五种抠图设置都把杯子抠成了不透明的灰色。需要玻璃杯放在特定底色上时,直接在那个底色上生成或拍摄;需要真正可换底的玻璃素材,就要在修图软件里分层处理反光和透明度,这一步这次没有测。

免费抠图工具能商用吗?

工具免费不等于模型可以商用。rembg 代码是 MIT,但它的默认模型 BRIA RMBG-2.0 是 CC BY-NC 4.0,商用要和 BRIA 签协议;BiRefNet 权重页标的是 MIT。用于电商和广告前,先确认实际下载的是哪个模型,以及那个模型页面写的许可。

参考来源4

本文引用的外部页面,按正文出现顺序排列。最后更新于 2026年10月19日。

  1. 1.图片提示词指南developers.openai.com/api/docs/guides/image-prompting
  2. 2.rembg 的 GitHub READMEgithub.com/danielgatis/rembg
  3. 3.BRIA RMBG-2.0 的 Hugging Face 模型页huggingface.co/briaai/RMBG-2.0
  4. 4.图片生成指南developers.openai.com/api/docs/guides/image-generation