GPT Image 透明背景变棋盘格:真假透明怎么判断、怎么修
换了底色格子还在,就是画进像素的假透明。API 要传 background 并用 png 或 webp,ChatGPT 里只能用文字要求,都以保存的文件为准。
文章目录

两种棋盘格:能透出底色的是真透明,盖住底色的是画上去的
灰白格子有两种来路。一种是看图软件或编辑器画在透明像素后面的底纹,只在屏幕上显示,文件里没有它;另一种是模型把格子当成画面内容画了出来,每一格都是实打实的不透明像素。前者是真透明,后者就是常说的假透明。
区分的办法只有一个:看文件,不看预览,也不看扩展名。把保存下来的原文件叠到一块深色或彩色的底上,底色从主体四周透出来,是真透明;格子跟着图一起盖在底色上,是画上去的。OpenAI 的提示词指南里也有同一句话:画出来的棋盘格不是透明(A drawn checkerboard is not transparency)。
下面关于 ChatGPT 和 API 会返回什么的说法,全部来自 OpenAI 的文档和用户报告,截至 2026 年 10 月 2 日;这一轮没有在 ChatGPT 里生成图片,也没有发起任何付费 API 调用。实际跑过的只有文中两个本地 Python 脚本,测试对象是用 Pillow 画的合成图,不是模型输出。
确认是假透明之后,问题出在哪一步,取决于图是从哪个入口来的:
| 你的情况 | 最可能的环节 | 先做什么 |
|---|---|---|
| 在 ChatGPT 里用文字要了透明背景,保存的文件里格子还在 | 生成:界面里没有透明开关,模型自己决定画什么 | 换一个新对话按原始描述重新生成,不要让它“把格子去掉” |
| 调 OpenAI API,只在提示词里写了“透明” | 参数:没传 background 等于 auto | 补上 background 和 output_format,再看响应里的两个字段 |
| 通过第三方平台调用,参数传了但结果是白底或格子 | 路线:这个型号路线不一定支持 background | 查平台文档里该型号对透明的说明,换支持的型号 |
| 生成时是透明的,下载、转发或上传之后变成白底、黑底 | 保存与转码:JPG、截图、平台压缩 | 回到原文件,用 PNG 或 WebP 原样传 |
| 手里只有这一张假透明图,主体不能变 | 修复 | 纯色硬边的主体用下文脚本,其余交给抠图工具 |
不写代码的判断方法:把原文件叠到深色底上
把文件放到一个你能控制底色的地方,看主体四周露出来的是什么。PPT、Keynote、Figma、Photoshop、Canva 都可以:先铺一块深蓝或大红的矩形,再把图片拖到它上面。
| 叠上去之后看到的 | 说明 | 结论 |
|---|---|---|
| 主体四周是你铺的底色 | 背景像素是透明的 | 真透明,接着放大看边缘 |
| 灰白格子原样盖在底色上 | 格子是画进图里的不透明像素 | 假透明 |
| 主体周围是一整块白色或黑色 | 透明信息在保存或转换时丢了,或者一开始就是纯色底 | 不透明,回头查保存环节 |

两个容易踩的地方。第一,必须用下载下来的原文件,截图不算:截图是把屏幕上显示的结果重新存成一张不透明的图,原来透明的地方也会被拍成白色或格子。第二,扩展名不说明问题:PNG 可以带透明,也可以完全不透明,一个改了后缀的 JPG 照样能叫 .png。
Photoshop 里常见的困惑也在这里。PS 本来就会在透明区域后面显示格子底纹,所以单看一个图层分不清;在下面新建一个纯色图层,格子消失就是真透明,格子还在就是像素。
真透明的图还要再看一眼边缘。OpenAI 的提示词指南建议检查头发、玻璃、阴影和物体边缘的 alpha 通道,这些位置最容易留下白边或被切掉一块;深色底和彩色底各叠一次,问题会更明显。
用 check_transparency.py 读 alpha 通道:六种结果怎么看
图片多、要批量过,或者想要一个不靠眼睛的结论,就直接读 alpha 通道。alpha 通道的意思是:每个像素除了红、绿、蓝三个颜色值,还存了一个表示透明度的数值,0 是完全透明,255 是完全不透明。一张假透明图的 alpha 值全是 255。
下面的脚本只依赖 Pillow(pip install pillow),做三件事:读出文件的真实格式而不是扩展名;统计透明、半透明、不透明像素各占多少;如果一个透明像素都没有,再看图片外圈是不是两种浅灰交替的格子。
"""Tell real transparency from a painted checkerboard.
Usage: python check_transparency.py image.png [more files...]
Requires Pillow (pip install pillow).
"""
import sys
from collections import Counter
from pathlib import Path
from PIL import Image
def border_pixels(rgb, ring=0.04):
"""Pixels in a thin frame around the image, where the background usually is."""
w, h = rgb.size
t = max(2, int(min(w, h) * ring))
px = rgb.load()
for y in range(h):
for x in range(w):
if x < t or x >= w - t or y < t or y >= h - t:
yield px[x, y]
def painted_checkerboard(rgb):
"""True when the frame is made of two light, neutral tones that alternate."""
w, h = rgb.size
small = rgb.resize((min(w, 256), min(h, 256)), Image.NEAREST)
tones = Counter()
total = 0
for r, g, b in border_pixels(small):
total += 1
if max(r, g, b) - min(r, g, b) <= 12 and min(r, g, b) >= 150:
tones[round((r + g + b) / 3 / 8)] += 1 # 8-level buckets of gray
if total == 0 or sum(tones.values()) / total < 0.85:
return False # the frame isn't mostly light gray/white
buckets = sorted(tones)
light = [b for b in buckets if tones[b] / total >= 0.15]
if len(light) < 2 or (max(light) - min(light)) * 8 < 10:
return False # one flat tone: a plain white or gray background
# Two tones must alternate along the top row, not sit in two big blocks.
mid = (max(light) + min(light)) * 8 / 2
row = [sum(small.getpixel((x, 1))) / 3 > mid for x in range(small.width)]
flips = sum(1 for a, b in zip(row, row[1:]) if a != b)
return flips >= 4
def check(path):
with Image.open(path) as im:
real_format, mode = im.format, im.mode
rgba = im.convert("RGBA") # palette transparency becomes a real alpha channel
print(f"{path.name}: {real_format}, mode {mode}, {rgba.width}x{rgba.height}")
if real_format not in ("PNG", "WEBP"):
print(f" NOT TRANSPARENT: the bytes are {real_format}, which can't store the alpha you need.")
return "wrong-format"
hist = rgba.getchannel("A").histogram()
total = rgba.width * rgba.height
clear, solid = hist[0], hist[255]
partial = total - clear - solid
print(f" alpha: {clear / total:.1%} transparent, {partial / total:.1%} partial, {solid / total:.1%} opaque")
if clear == total:
print(" EMPTY: every pixel is transparent.")
return "empty"
if clear + partial == 0:
if painted_checkerboard(rgba.convert("RGB")):
print(" FAKE: no transparent pixels, and the frame is a two-tone gray grid. The checkerboard is painted in.")
return "painted-checkerboard"
print(" OPAQUE: no transparent pixels. The background is a solid part of the picture.")
return "opaque"
if clear == 0 and len([v for v in hist if v]) == 1:
print(" FADED: one alpha value everywhere. Opacity was lowered; nothing was cut out.")
return "faded"
print(" REAL: transparent pixels are present. Check the edges on a dark and a colored background next.")
return "real"
if __name__ == "__main__":
if len(sys.argv) < 2:
sys.exit(__doc__)
for name in sys.argv[1:]:
check(Path(name))运行 python check_transparency.py 你的图片.png,一次可以跟多个文件。对一张画了格子的合成样例和一张改了后缀的 JPG,输出是这样的:
painted-checkerboard.png: PNG, mode RGB, 512x512
alpha: 0.0% transparent, 0.0% partial, 100.0% opaque
FAKE: no transparent pixels, and the frame is a two-tone gray grid. The checkerboard is painted in.
jpeg-renamed.png: JPEG, mode RGB, 512x512
NOT TRANSPARENT: the bytes are JPEG, which can't store the alpha you need.脚本的提示是英文,六种结果对应的意思和下一步如下:
| 输出 | 意思 | 下一步 |
|---|---|---|
| REAL | 文件里有透明像素 | 叠到深色和彩色底上检查边缘 |
| FAKE | 没有任何透明像素,外圈是两种浅灰交替的格子 | 重新生成,或按后文修复 |
| OPAQUE | 没有任何透明像素,背景是画面的一部分(白底、场景,或没认出来的格子) | 同样不是透明图,按不透明处理 |
| NOT TRANSPARENT | 文件实际是 JPEG 之类存不了透明的格式 | 回到原文件,查保存和转发环节 |
| FADED | 整张图是同一个半透明值,只是调低了不透明度,没有抠出主体 | 重新生成或重新抠图 |
| EMPTY | 所有像素都透明,图是空的 | 重新生成 |
脚本在 10 个合成样例上的结果
这个脚本在 Python 3.12.1、Pillow 12.0.0、macOS 上跑过 10 个合成样例,10 个都判对了。样例全是用 Pillow 画的一个红色主体加不同背景,没有一张是 ChatGPT 或 GPT Image 的真实输出:
| 合成样例 | 判定 |
|---|---|
| 带 alpha 的 PNG、带 alpha 的 WebP、调色板透明的 PNG | REAL |
| 画了棋盘格的 RGB PNG | FAKE |
| 画了棋盘格、模式是 RGBA 但 alpha 全为 255 的 PNG | FAKE |
| 棋盘格加轻微模糊、随机噪点,再过一遍 JPEG 压缩 | FAKE |
| 白底 PNG | OPAQUE |
| 内容是 JPEG、后缀改成 .png | NOT TRANSPARENT |
| 整体半透明的 PNG | FADED |
| 全透明的空 PNG | EMPTY |
格子的识别条件写在 painted_checkerboard 里:取图片外圈一圈边框(宽度是短边的 4%),其中至少 85% 的像素是浅色中性灰,并且分成两种深浅明显不同的色调,沿顶边至少交替 4 次。模型画出来的格子不一定这么规整,格子大小不匀、带透视、颜色偏深或带阴影时,脚本很可能只报 OPAQUE 而不是 FAKE。这不影响主要结论:只要 alpha 那一行显示 100.0% opaque,这个文件就不是透明图。反过来,REAL 只说明文件里存在透明像素,抠得干不干净仍然要看边缘。
ChatGPT 里要透明背景:只能用文字要求,再检查保存的文件
ChatGPT 界面里没有透明背景的开关。OpenAI 帮助中心的 Images in ChatGPT 写明 ChatGPT Images 可以按指令“make the background transparent”,也可以上传已有图片再描述修改;但页面上没有记载任何透明设置,没有写 Save 下载的是什么格式,也没有说明预览在透明图后面显示什么。所以在 ChatGPT 里你能做的只有两件事:把要求写清楚,然后检查保存下来的文件。界面入口和对应型号见 ChatGPT Images 2.5 怎么用。
由此也能看清一个常见说法的问题:“鼠标移到图上出现棋盘格底纹,就是透明通道生效了”。预览里的格子可能是界面画的底纹,也可能是图里的像素,在预览里分不出来,结论只能从文件里得出。
要求可以这样写,思路来自 OpenAI 提示词指南的做法:写明只要一个独立主体,写明背景透明,再把不想要的东西逐项排除。
画一只橙色柴犬贴纸,只有这一个独立主体,四周留白边。
背景完全透明,输出带透明通道的 PNG。
不要画棋盘格或灰白格子,不要纯色底、场景、投影、文字和水印。后续每改一次图,都把透明要求重说一遍,例如“保持背景透明,只把围巾改成蓝色”。指南里对此有明确提醒:后续编辑要重申保留透明背景,否则这一轮可能又被补上背景。
在 ChatGPT 里要透明却拿到画进图里的格子,这类情况有公开的用户报告。OpenAI 开发者社区 2026 年 5 月到 6 月的一个帖子里,有用户描述棋盘格被“baked into the image”,不是真正的 alpha 透明;同一个帖子里也有人拿到了真透明或部分透明的结果。这些报告大多出现在 Images 2.5 之前,能说明这种失败存在,说明不了现在出现的频率。至于模型为什么会画格子,常见的解释是它在训练图片里见到的“透明”多数就是格子底纹的样子,于是把格子当成了画面内容;OpenAI 没有公开说明过原因。
拿到假透明图之后,不建议接着说“把棋盘格去掉”。那是又一次生成式编辑,官方指南提醒过,反复编辑可能改动你想保留的细节,需要像素级不变的区域应该把编辑结果合成回原图,而不是只靠提示词。更稳的顺序是:开一个新对话,用原始描述加上面的排除项重新生成;仍然不行,再考虑走 API 用参数控制,或者对现有图片做抠图。
API 该传什么:background: transparent 加 png 或 webp
调 API 时,透明靠参数,不靠提示词。OpenAI 的图片生成接口参考对 background 的说明是:可取 transparent、opaque、auto,默认 auto,这时由模型自己判断用什么背景。也就是说,只在提示词里写“透明背景”而不传这个参数,等于让模型自己决定,它完全可能给你一张白底图,或者一张画了格子的图。
截至 2026 年 10 月 2 日,各型号的支持情况如下:
| 型号 | 透明背景 | 条件 |
|---|---|---|
gpt-image-2.5-sunburst、gpt-image-2.5-flare(含 2026-09-08 快照) | 支持 | output_format 必须是 png 或 webp |
gpt-image-2、gpt-image-2-2026-04-21 | 预览阶段 | 同上 |
编辑接口 /images/edits 对 background 的说明相同,给已有图片去底时照样要传。两个 2.5 型号在透明上的要求一致,怎么选看速度和编辑精度,见 GPT Image 2.5 Flare 与 Sunburst 对比。
一个按接口参考写出的请求如下。请求本身没有实际发送过;后两行解析和解码命令用一份手写的响应文件在本地试过,能取出字段并还原出 PNG。
curl -s https://api.openai.com/v1/images/generations \
-H "Authorization: Bearer $OPENAI_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-image-2.5-flare",
"prompt": "一只橙色柴犬贴纸,单个独立主体,四周留白边。背景完全透明,不要棋盘格、纯色底、场景、投影和水印。",
"background": "transparent",
"output_format": "png",
"size": "1024x1024"
}' > response.json
jq '{background, output_format}' response.json
jq -r '.data[0].b64_json' response.json | base64 --decode > sticker.png这里有三处值得注意。
响应里先看两个字段。 接口参考写明,返回对象里带有 background(transparent 或 opaque,表示这次生成实际使用的背景设置)和 output_format(png、webp 或 jpeg)。这是不用解码图片就能做的第一道检查:如果返回的是 opaque 或 jpeg,文件不可能是透明的,问题在请求没按你的意思执行,不用再去看图。两个字段都对,再把解码出的文件交给上面的检查脚本。
提示词仍然要配合参数。 官方指南的做法是参数和提示词一起用:参数设为透明,提示词里写明独立主体,并明说不要纯色底、棋盘格、场景和阴影。参数决定文件有没有 alpha 通道,提示词减少模型往画面里添东西的机会。
PNG 不要加压缩参数。 指南写明 output_compression 只用于 JPEG 或 WebP 输出。另外,GPT Image 系列一律返回 Base64 图片数据,不返回链接,解码时直接写成二进制文件,不要经过任何会转格式的中间步骤。
如果你是通过工作流工具调用,要确认它真的把 background 传出去了。以 n8n 为例,原生节点传不了这个参数,需要改用 HTTP Request 节点,细节见 n8n 接入 GPT Image 2.5:原生节点够不够用。通过 Responses API 的图片生成工具调用时,官方指南写的是可以调整质量、尺寸、格式和压缩,没有单独列出 background,按你用的型号查对应的参考文档再决定。
中转平台调用后参数没生效:先查型号路线支不支持 background
通过第三方 API 平台(常被叫作中转、网关或聚合平台,指用它们的地址和密钥去调用 OpenAI 模型的服务)调用时,同样叫 GPT Image 2.5,不同型号路线对 background 的支持可以完全不同。请求里写了 transparent 却拿到白底或格子,先别怀疑提示词,先查你用的那个型号在平台文档里有没有承诺这个参数。
LaoZhang API 的 GPT Image 2.5 文档是一个具体例子,同一个平台上就有三类路线:
| 路线 | 型号 | 文档对透明背景的说法 |
|---|---|---|
| 按次计费 | gpt-image-2.5-flare-vip、gpt-image-2.5-sunburst-vip | 写明可以生成透明背景图,也可以给上传的图片去底,传 "background": "transparent" 和 "output_format": "png" |
| 官方转发 | gpt-image-2.5-flare、gpt-image-2.5-sunburst | 使用 OpenAI 的参数,按 token 计费 |
| 网页路线 | gpt-image-2.5-web | 不能选 Flare 或 Sunburst,支持哪些参数取决于控制台配置和实际结果,文档明确说不要假设 VIP 的选项在这里可用 |
也就是说,在网页路线上传了 background,平台并没有承诺它会生效;想要透明,就该换到写明支持的型号。其他平台同理,文档里找不到关于 background 的说明时,按“不支持”对待,用一张图验证后再批量跑。响应里的 background 和 output_format 两个字段在第三方平台上是否原样返回,各家不一样,没有这两个字段时只能靠检查文件。
如果你要的是一条按次计费、文档写明支持透明参数的路线,上表第一行的两个型号截至 2026 年 9 月 24 日的公开价格是每次 $0.03,接口地址为 https://api.laozhang.ai/v1,生成和编辑分别走 /v1/images/generations 与 /v1/images/edits。这些信息出自该平台文档,这里没有做过付费调用来验证输出;文档同时写明这两个型号不支持 mask 局部编辑,并且在 2026 年 9 月 16 日到 22 日期间曾不可用,之后恢复。官方按 token 计费和按次计费怎么比较,见 GPT Image 2.5 Sunburst 价格:官方单图费用与按次计费怎么选。
下载后变白底、发出去变白底:JPG、截图和转码都会丢透明
生成出来确实透明,到了用的地方却变成白底或黑底,问题在生成之后的环节。逐项对照:
- 存成或转成了 JPG。 JPEG 没有 alpha 通道,透明区域会被填成纯色。API 里把
output_format设成jpeg同理,官方参考要求透明必须配png或webp。 - 用的是截图。 截图记录的是屏幕上显示的样子,得到一张新的不透明图片。
- 经过了会重新压缩的渠道。 聊天软件发图、部分网站上传图片时可能把文件转成 JPEG 再分发,这一点因平台而异,没有逐个测试过。稳妥的做法是用“文件”或“原图”方式发送,对方收到后跑一次检查脚本。
- 在编辑器里“另存为”时合并了背景。 导出时选 PNG 或 WebP,并确认保留透明的选项开着。
排查顺序很简单:对最初保存的那个文件跑检查脚本,结果是 REAL,说明生成没问题,沿着文件走过的每一步往后查;结果已经是 OPAQUE、FAKE 或 NOT TRANSPARENT,问题在生成或下载那一步,回到前面两节。
假透明棋盘格怎么办:脚本能救纯色主体,白色主体会被吃掉
手里只有一张画了格子的图,主体又是颜色饱和、边缘硬朗的扁平图形(贴纸、图标、像素风素材),可以直接把格子改成真透明。下面的脚本从图片四条边出发,沿着浅色中性灰的像素一路扩散,扩散到的像素全部改成透明,碰到主体的颜色就停。因为只处理和图片边缘连通的区域,被主体包在里面的白色(眼白、牙齿、标签)不会被动到。
"""Turn a painted light-gray/white checkerboard into real transparency.
Usage: python remove_painted_checkerboard.py fake.png fixed.png
Requires Pillow (pip install pillow).
Works by flood-filling from the image border through light, neutral pixels.
It only reaches background that touches the border, so white areas enclosed by
the subject (eyes, teeth, a label) are kept. It can't separate a white or
light-gray subject edge from the grid, and it leaves a thin light rim on soft
edges.
"""
import sys
from collections import deque
from PIL import Image
src, dst = sys.argv[1], sys.argv[2]
im = Image.open(src).convert("RGBA")
w, h = im.size
px = im.load()
def is_grid(p):
r, g, b, _ = p
return max(r, g, b) - min(r, g, b) <= 14 and min(r, g, b) >= 170
seen = bytearray(w * h)
queue = deque()
for x in range(w):
queue.append((x, 0))
queue.append((x, h - 1))
for y in range(h):
queue.append((0, y))
queue.append((w - 1, y))
removed = 0
while queue:
x, y = queue.popleft()
i = y * w + x
if seen[i]:
continue
seen[i] = 1
if not is_grid(px[x, y]):
continue
px[x, y] = (0, 0, 0, 0)
removed += 1
if x > 0:
queue.append((x - 1, y))
if x < w - 1:
queue.append((x + 1, y))
if y > 0:
queue.append((x, y - 1))
if y < h - 1:
queue.append((x, y + 1))
im.save(dst)
print(f"{removed / (w * h):.1%} of the pixels made transparent -> {dst}")运行 python remove_painted_checkerboard.py fake.png fixed.png,再用检查脚本验一遍输出文件。在干净的合成样例上,两步的输出是:
76.0% of the pixels made transparent -> fixed.png
fixed.png: PNG, mode RGBA, 512x512
alpha: 76.0% transparent, 0.0% partial, 24.0% opaque
REAL: transparent pixels are present. Check the edges on a dark and a colored background next.修复脚本在合成样例上的结果与失败边界
同样是 Pillow 画的合成图:512×512,红色主体,中间有一块被主体包住的白色标签,背景是白与浅灰交替的格子。把修复结果和原始的透明蒙版逐像素比对,得到:
| 合成样例 | 背景被清除 | 红色主体损失 | 被包住的白色标签保留 | 修复后复检 |
|---|---|---|---|---|
| 干净的棋盘格 | 100.0% | 0% | 100% | REAL |
| 模糊、加噪点并经过 JPEG 压缩的棋盘格 | 99.63% | 0% | 100% | REAL |
| 近白色主体直接贴着棋盘格 | 不适用 | 100% | 不适用 | 主体整个消失 |

这组数字划出了脚本的适用范围,用之前对照一下自己的图:
- 白色、浅灰的主体不能用。 第三行就是失败边界:主体颜色和格子落在同一个范围(三个通道相差不超过 14、最暗的通道不低于 170)并且挨着背景时,扩散会一路穿过去,测试里主体像素 100% 被清掉。白色 Logo、白衣服、白色产品、浅色描边都属于这一类。
- 边缘是硬的。 修复后的文件里半透明像素为 0%,每个像素要么全透明要么全不透明。放大看是锯齿边;原图边缘如果是柔和过渡,会留下一圈细的浅色边。
- 头发、玻璃、烟雾、软阴影救不回来。 这些地方需要半透明信息,而假透明图里已经没有这份信息了,脚本不会凭空重建。
- 带噪点的图清不干净。 第二行还剩 0.37% 的背景像素没清掉,往往是零星的小点,叠到深色底上能看到。
- 样例不是模型输出。 模型画的格子如果颜色偏深、带阴影或渐变,落在阈值之外的部分会原样留下。
超出这个范围时,按主体能不能变来选:
- 主体可以重画:回到生成那一步。API 带上
background和output_format重新请求;ChatGPT 里开新对话重新生成。 - 主体必须保持不变,而且边缘复杂:把这张图当成普通的“有背景图片”去抠,用带选区或专门去底功能的工具处理,各类工具怎么选见透明底图片怎么做:按素材选方法,再确认真的透明。
- 不要让模型“只去掉格子”,原因前面说过:那是一次新的生成,主体可能被重画。
抠完或重做之后,都再跑一遍检查脚本,并叠到深色底上看边缘。
透明背景与棋盘格的几个相邻问题
GPT Image 不是不支持透明图吗?
“不支持”在 2026 年 8 月之前是对的,现在已经过时。2026 年 8 月之前,OpenAI 的文档写的是 gpt-image-2 不支持透明背景;2026 年 8 月起,API 里的 gpt-image-2 以预览形式开放了透明背景;快照日期为 2026-09-08 的两个 GPT Image 2.5 型号则直接支持,不带预览标注。遇到互相矛盾的说法,先看它的发布日期,再以 OpenAI 接口参考里 background 参数的当前说明为准。
2K、4K 会出棋盘格,换成 1K 才是真透明吗?
OpenAI 的接口参考里找不到这样的规定:background 的说明没有把透明和任何尺寸或质量档位挂钩,只要求输出格式是 png 或 webp。这个说法流传于 gpt-image-2 开放透明预览之前,当时的观察不能直接套到现在。想确认尺寸有没有影响,用同一组参数各生成一张,对文件跑检查脚本,比任何经验之谈都可靠。
gpt-image-2 和 GPT Image 2.5 在透明背景上要区别对待吗?
参数写法一样,稳定性的承诺不一样。两者都是 background 设为 transparent 加 png 或 webp,但 gpt-image-2 的透明支持标注为预览,2.5 的两个型号没有这个标注。新项目直接用 2.5;仍在用 gpt-image-2 的流程,更要对每一张输出做文件检查。
图片里出现细密的格子纹理,但我没要透明背景,是同一个问题吗?
不是。假透明的格子出现在主体之外的背景区域,是模型把“透明”画成了图案;普通不透明图片上铺满整张图的规律细网格、颗粒感,属于画质问题,处理思路完全不同,见 GPT Image 2.5 噪点、颗粒感:找到变脏的那一步再修。





