GPT Image 2 目前可以通过 OpenAI Images API 请求透明 PNG 和 WebP,透明背景仍处于预览阶段。 请求时同时设置 background="transparent" 与 output_format="png" 或 "webp",然后把返回的 base64 解码为图片字节。JPEG 不保留透明背景。以上是截至 2026 年 9 月 8 日官方图片生成指南的适用规则;早期“不支持透明”的结论不能直接用于当前接口。
文件名以 .png 结尾、图片模式是 RGBA、预览里出现棋盘格,都不足以证明素材可用。你需要分别判断:文件是什么格式、是否真的有透明像素、主体是否还在,以及放到实际背景上有没有白边或黑边。
为什么旧教程说不支持,而现在可以请求透明背景?
先看教程的时间和实际调用的服务。早期失败记录只能说明当时的请求结果,不能推翻后来更新的官方支持说明。因此,仅因为旧教程建议“改用 GPT Image 1.5”或“生成白底再抠图”,不必立即换模型;先确认自己使用的接口是否已经支持 GPT Image 2 的透明背景预览功能。后处理仍可用于修复边缘,或完成当前接入服务暂不支持的抠图需求。
如果走第三方网关,应核对它的最新说明、实际模型名及是否转发 background、output_format。兼容 OpenAI 请求格式,或提供带有 GPT Image 2 名称的模型别名,都不能单独证明这一能力已经可用。保存实际模型名、请求参数和错误响应后,优先查具体接入方的支持条件;不要把一个网关拒绝参数的结果概括成模型整体不支持。
本文的参数和代码适用于 Images API。ChatGPT 中能否直接选择透明背景、当前账户是否显示某个按钮,需要以实际界面为准,不能从 API 文档推断。无论在哪个界面生成,都应下载原始图片后检查:查看器可能给透明区域铺上白底或棋盘格,这种显示底色与文件像素是否透明是两回事。
先选输出格式,再写请求
PNG 和 WebP 都能承载透明度,区别主要在保存与交付需求。
| 需求 | 建议选择 | 请求和后续处理 |
|---|---|---|
| 留原始素材,继续编辑或检查细小边缘 | PNG | 设置 output_format="png",不传 output_compression |
| 直接用作网页素材,需要比较文件体积 | WebP | 设置 output_format="webp",按需加入 output_compression,下载后检查效果与大小 |
| 已有合格 PNG,需要另做网页版本 | 保留 PNG,另外转换 WebP | 使用支持 Alpha 的转换方式,对转换结果重新检查 |
| 必须交付 JPEG | 先确定背景色再合成 | JPEG 没有透明背景,这一步会把主体与选定底色合成普通图片 |
WebP 格式本身支持有损、无损以及 RGBA,但不能据此认定 API 输出必定无损。output_compression=80 也不表示“文件体积减少 80%”,更不是 token 或价格折扣。压缩是否适合你的素材,要看实际下载后的字节数、文字和轮廓;格式能力可查 Google WebP 文档,API 参数以 OpenAI 提示指南为准。
下面使用 OpenAI Python SDK 的 Images API。环境中需配置 OPENAI_API_KEY,并具备目标模型的访问权限;这是按官方接口编写的调用示例,不代表对你的账户或第三方网关已经验证成功。安装依赖:
python -m pip install -U openai pillow保存为 generate_asset.py。修改 OUTPUT_FORMAT 就能选择 PNG 或 WebP,文件扩展名会跟着改变:
import base64
from pathlib import Path
from openai import OpenAI
OUTPUT_FORMAT = "png" # 改为 "webp" 可请求 WebP
if OUTPUT_FORMAT not in {"png", "webp"}:
raise ValueError("透明素材请选择 png 或 webp")
options = {
"model": "gpt-image-2",
"prompt": (
"生成一个独立的橙色登山背包图标,保留拉链与背带细节。"
"背景完全透明,主体完整,边缘干净。"
"不要场景、纯色底、棋盘格、边框或投影。"
),
"background": "transparent",
"output_format": OUTPUT_FORMAT,
"size": "1024x1024",
"quality": "medium",
}
if OUTPUT_FORMAT == "webp":
options["output_compression"] = 80 # 示例值,按素材调整
result = OpenAI().images.generate(**options)
if not result.data or not result.data[0].b64_json:
raise RuntimeError("响应没有可保存的 base64 图片数据")
image_bytes = base64.b64decode(result.data[0].b64_json, validate=True)
target = Path(f"backpack.{OUTPUT_FORMAT}")
target.write_bytes(image_bytes)
print(f"已保存 {target},共 {len(image_bytes)} 字节")提示词中的“独立主体”“不需要投影”等描述用于说明想要的素材,background 才是请求透明输出的明确参数。若需要柔和投影或烟雾,不必机械照抄“不投影”,应描述要保留的半透明效果。
这段代码直接保存返回字节,不通过截图、画布导出或改名伪装格式。backpack.webp 仍可能在后续处理时被替换为其他格式,所以保存完成后继续执行下方检查。请求错误、没有图像数据和得到了一张不合用的图片,是三个不同的问题。

编辑商品图或继续改图,也要明确保持透明
已有商品照、Logo 或角色素材时,调用编辑接口并提交原图。下面将 product.png 中的主体分离出来;如果你的目标是 WebP,可把输出格式与保存扩展名一同改为 webp,并按需加入压缩字段。
import base64
from pathlib import Path
from openai import OpenAI
client = OpenAI()
with open("product.png", "rb") as source:
result = client.images.edit(
model="gpt-image-2",
image=source,
prompt=(
"将商品独立放在完全透明的背景上。"
"保留商品几何形状、颜色、标签文字与比例。"
"去除拍摄背景和地面投影,不添加棋盘格或实色背景。"
"主体轮廓清晰,边缘不要白边或杂色。"
),
background="transparent",
output_format="png",
)
if not result.data or not result.data[0].b64_json:
raise RuntimeError("编辑响应没有图片数据")
Path("product-cutout.png").write_bytes(
base64.b64decode(result.data[0].b64_json, validate=True)
)每次继续编辑都重新传入透明背景参数,并在提示中要求保持透明;不要只依赖上一张图片已有 Alpha。生成与编辑接口的用途及返回方式见 OpenAI Images API 指南。
“保留标签文字与形状”是编辑要求,不能保证输出与原图逐像素一致。涉及商标、包装文字或精确产品外观时,要将结果与原图核对。发丝、毛绒、玻璃和柔光往往需要半透明过渡,也不能简单要求所有主体像素都等于完全不透明。
检查真实格式与 Alpha,先排除空白图
把以下脚本保存为 check_alpha.py,执行 python check_alpha.py backpack.png 或传入 WebP 文件。它先读取真实文件格式,再统计透明度;转换为 RGBA 只是方便统一读取,不会自动去掉白底或抠出主体。这些操作使用 Pillow 的 Image 接口。
import sys
from pathlib import Path
from PIL import Image
path = Path(sys.argv[1])
expected = {".png": "PNG", ".webp": "WEBP"}.get(path.suffix.lower())
with Image.open(path) as source:
actual_format = source.format
source.load() # 确认图片能够完整解码
rgba = source.convert("RGBA")
alpha = rgba.getchannel("A")
hist = alpha.histogram()
minimum, maximum = alpha.getextrema()
print({
"format": actual_format,
"size": rgba.size,
"bytes": path.stat().st_size,
"alpha_range": [minimum, maximum],
"fully_transparent": hist[0],
"partly_transparent": sum(hist[1:255]),
"fully_opaque": hist[255],
})
if expected is None or actual_format != expected:
raise SystemExit("格式不符:请核对请求、文件扩展名和转码步骤")
if maximum == 0:
raise SystemExit("整张图完全透明:没有可见主体")
if minimum == 255:
raise SystemExit("整张图完全不透明:没有透明或半透明像素")
print("存在透明度和可见像素;仍需检查主体轮廓")
for name, color in {
"white": (255, 255, 255, 255),
"dark": (24, 24, 24, 255),
"blue": (20, 90, 210, 255),
}.items():
background = Image.new("RGBA", rgba.size, color)
preview = Image.alpha_composite(background, rgba).convert("RGB")
preview.save(path.with_name(f"{path.stem}-preview-{name}.png"))检查结果要结合素材用途解释:
- Alpha 全为
255:完全不透明,即使模式为 RGBA 也没有透明效果。白底或绘制的棋盘格都可能属于这一类。 - Alpha 全为
0:整张图不可见,不能当作成功抠图。 - Alpha 同时包含透明度与可见像素:通过了基础检查。孤立图标通常需要主体周围有完全透明的区域,但玻璃或烟雾可以主要由半透明像素构成,不一定出现
0和255两个端点。
脚本另外生成三张带底色的预览,供你查看边缘。预览是故意合成的不透明图片,不要把 -preview- 文件当透明素材上传。在白底正常、深底出现白圈,说明边缘颜色还需要处理;格子在不同底色上始终存在,可能是格子已被画入图片。应回到原文件检查对应区域,不能只凭“存在透明像素”判定整张图合格。

PNG 转 WebP 后,对最终文件再检查一次
若要保留 PNG 原稿并另做 WebP,可以用下面的离线转换。这里显式选择 Pillow 的无损 WebP 编码,不代表 API 的压缩字段也有同样语义。
from PIL import Image
with Image.open("backpack.png") as source:
source.convert("RGBA").save(
"backpack-delivery.webp", format="WEBP", lossless=True
)然后执行 python check_alpha.py backpack-delivery.webp。无损 WebP 不保证一定比 PNG 小,实际字节数由素材决定。若改用有损压缩,在比较体积的同时重新看边缘、细线和标签文字。
最容易丢失透明度的处理包括:先 .convert("RGB")、保存成 JPEG、把图片绘制到已有实色底的画布,或经过会合成背景的缩略图服务。上传之后也应下载网站实际交付的图片再检查,HTTP Content-Type 应与内容一致:PNG 为 image/png,WebP 为 image/webp。扩展名、MIME 与真实格式相互对应,才能避免“本地透明,上线白底”时查错文件。
按失败表现选择下一步
| 表现 | 先确认什么 | 下一步 |
|---|---|---|
| API 直接返回错误 | 状态码、错误信息、模型权限与最终请求字段 | 按具体错误修正请求;此时尚未进入 Alpha 检查 |
| 响应成功但没有图像数据 | 是否读到了 Images API 的 data[0].b64_json | 核对接口与响应结构,不把空字段保存成图片 |
| 扩展名是 PNG/WebP,解码格式却不同 | 保存的原始字节是否被改写 | 从 API 原始输出到转换、上传逐段定位 |
| 全不透明,或白底与棋盘格仍在 | 最终请求是否包含透明参数、服务是否支持 | 核对实际模型与服务文档,简化为独立主体后重试 |
| 整张全透明 | Alpha 最大值是否为 0 | 输出没有可见主体,需要重新生成或编辑 |
| 有透明像素,但轮廓缺损或边缘发白 | 明暗底色预览、原图细节 | 调整编辑要求,或使用背景移除、蒙版及边缘修复工具 |
| 原稿合格,交付图失败 | 原稿与最终文件的格式、Alpha 统计 | 修复丢失透明度的转码或缩略图环节 |
当透明素材已经通过检查,接下来再把调用接入业务。如果还需要区分 Images API、Responses 图片工具和更完整的接入方式,可继续阅读 GPT Image 2 API 接入说明。对于精确标签、复杂发丝或需要稳定批量产出的素材,保留原稿与后处理方案,才能在透明背景正确但主体细节不合用时继续完成交付。



