用 GPT Image 2.5 Flare 局部改图:蒙版之外的像素也要检查
GPT Image 局部改图会不会改到主体?用真实蒙版与无蒙版输出比较,检查透明通道、尺寸和目标区域之外的像素变化,附原图、蒙版、结果及复现脚本。
蒙版会告诉图像编辑请求你希望修改哪里,但你仍应检查返回图像的其他区域。在我们对 GPT Image 2.5 Flare 的测试中,蒙版背景编辑结果在目标区域以外看起来与原图很接近,但像素对比发现这些区域也有差异。输出并不是无损补丁。
本教程会展示原图、蒙版约定、实际返回的图像,以及一个简单的像素检查方法。本文面向需要修改产品图局部、又不希望产品在不知情的情况下被改动的开发者和创作者。本文不声称所有蒙版编辑的表现都一样,也不以单个示例衡量模型的整体质量。

这张于 10 月 12 日截取的公开嵌入式 Playground 截图显示,该界面当时提示不支持图像编辑。本文中的编辑结果来自下文所示的 API 路由,而不是这个 Playground。不要在这张界面截图中寻找蒙版或参考图上传控件。
发起请求前先确定编辑区域
我们复用了 9 月 13 日由 Ofox 生成的一张参考图:一个没有品牌标识、带象牙白瓶盖的琥珀色瓶子。这是合成产品图,并非客户产品的照片。源文件是 1024 × 1024 的 PNG。图中没有标签文字,因此本测试不能说明模型能否保留商标、成分信息或法规文案。

我们将目标区域设得很简单:最左侧 256 列,即 x = 0 到 x = 255。瓶子位于这条区域之外。我们要求只在这条区域内把背景改为低饱和鼠尾草绿,瓶子、瓶盖、位置和其他区域保持不变。
蒙版是与原图尺寸相同的 RGBA PNG。可编辑区域的 Alpha 值为 0,其他区域完全不透明。看起来只是黑白两色的灰度图,并不等同于这个 Alpha 蒙版。OpenAI 的图像编辑参考文档介绍了透明蒙版区域,以及蒙版与输入图像之间的关系;请始终核对端点当前的文件限制。
在本地验证蒙版
上传前,检查文件模式、尺寸和 Alpha 分布。下面的代码用于验证我们的测试文件;请根据实际编辑区域调整坐标。
from PIL import Image
source = Image.open("source.png")
mask = Image.open("mask-left.png")
assert source.size == mask.size == (1024, 1024)
assert mask.mode == "RGBA"
alpha = mask.getchannel("A")
assert alpha.crop((0, 0, 256, 1024)).getextrema() == (0, 0)
assert alpha.crop((256, 0, 1024, 1024)).getextrema() == (255, 255)
这些断言能在产生计费的请求发出前,发现 Alpha 通道反转或被压平的问题。在常见图像编辑器中,应检查实际透明度,而不要只依赖蒙版的预览颜色。原图和蒙版应分别保存,避免输出图像覆盖其中任何一个文件。
如果提供了多张参考图,请确认端点会将蒙版应用到哪一张图上。将预期的底图放在第一张,不要假定蒙版会对所有参考图起全局指示作用。我们的蒙版测试只提供了一张图。
发起实际编辑请求
成功的测试使用 openai/gpt-image-2.5-flare,通过 Ofox 的 /v1/images/edits 端点发送请求。请求设置了 size=1024x1024 和 n=1,没有显式指定画质。响应中报告了 quality: low;这是记录到的响应字段,并不代表每个请求的默认值都如此。
curl --silent --show-error --fail-with-body \
--connect-timeout 15 --max-time 120 \
'https://api.ofox.io/v1/images/edits' \
-H "Authorization: Bearer $OFOX_API_KEY" \
-F 'model=openai/gpt-image-2.5-flare' \
-F 'image=@source.png;type=image/png' \
-F 'mask=@mask-left.png;type=image/png' \
-F 'size=1024x1024' -F 'n=1' \
-F 'prompt=Change only the background strip at the far left quarter to muted sage green. Keep the amber bottle, cap, its position, and every other area unchanged.' \
-o edit-response.json
运行前请安全地设置 OFOX_API_KEY。此命令可能产生 API 用量。解码前先阅读保存的响应:错误响应中没有可供解码的图像。我们的成功响应包含 data[0].b64_json;请将该字段按 Base64 解码、保存字节数据,并确认图像能以预期尺寸打开。
可下载工具包包含原始输入、蒙版、返回的文件,以及一个执行这项操作的有限范围脚本。通用的 GPT Image API 指南介绍了初次接入和保存图像响应的方法。
对比两张实际输出图
我们用同一条文字编辑指令,在不使用蒙版的情况下发送了一次请求,并成功获得输出。第一次使用蒙版的尝试在客户端超时;之后的一次蒙版请求成功。客户端超时并不能证明没有发生生成或扣费,因此之后进行账单核对时,不要直接排除这次请求。

成功的蒙版结果在左侧呈现一条明显的纯色鼠尾草绿区域。瓶子的整体特征和位置看起来与原图接近,但只凭外观无法证明受保护区域没有变化。

未使用蒙版时,模型也在左侧生成了一条鼠尾草绿区域;在这个样本中,它的纹理更明显。两次请求都对提示词作出了看起来合理的理解,但对于要求精确保留内容的工作流程,两种输出不能因此视为可以互换。
我们比较了解码后图像在 x = 256 到 1023、共 1024 行范围内的 RGB 值。该区域包含 786,432 个像素。只要三个通道中任意一个通道的值有差异,即使只差一级,该像素就计为发生变化。
| 成功的输出 | 目标区域以外发生变化的像素数 | 平均绝对通道差异,范围为 0–255 |
|---|---|---|
| 使用蒙版 | 786,432 个中的 784,316 个 | 3.493 |
| 未使用蒙版 | 786,432 个中的 785,921 个 | 5.464 |
在这组结果中,使用蒙版的输出平均差异较低。样本量太小,不能据此声称蒙版通常能带来幅度相近的优势。更重要的是,两种结果都没有满足像素完全一致的要求。变化像素数量较多,也可能包含非常微小的差异;这并不意味着每个变化的像素都出现了肉眼可见的损坏。
重复检查受保护区域
请使用下载的原始文件,不要使用截图、JPEG 预览图或缩小后的缩略图。这些处理会引入与模型编辑无关的差异。
from PIL import Image, ImageChops, ImageStat
a = Image.open("source.png").convert("RGB")
b = Image.open("edited.png").convert("RGB")
if a.size != b.size:
raise ValueError("Output dimensions changed; inspect before comparing")
region = (256, 0, 1024, 1024)
diff = ImageChops.difference(a.crop(region), b.crop(region))
changed = sum(any(pixel) for pixel in diff.getdata())
mean_difference = sum(ImageStat.Stat(diff).mean) / 3
print(changed, mean_difference)
这项检查测量的是像素差异,不是品牌准确度、感知质量或产品几何结构。请分别检查瓶盖、轮廓、材质、边缘、文字和阴影。如果产品位置发生变化,直接比较像素差异就不太适合描述人眼感知的相似度,但它仍能准确指出固定位置的像素一致性要求未能满足。
如果要求精确保留,可以使用传统合成工作流,将通过验收的编辑区域覆盖到原图上。请检查接缝和光照;生硬的边界可能无法接受。这是单独的后处理步骤,并不意味着模型本身保护了这些像素。请勿用这种方法掩盖已发布模型对比中的变化。
重新运行前先排查失败原因
如果改错了方向,先检查 Alpha 值和坐标。如果整张图都变了,请确认蒙版是否确实附加到了请求中、该路由是否接受这个参数,以及图像顺序是否符合蒙版预期的来源。请将请求元数据与输出一起保存。
如果服务器拒绝文件,请检查文件格式、字节大小、尺寸以及端点当前的限制。把 JPEG 文件改名为 .png 并不会将其转换为 PNG。如果请求超时,请在重试前检查请求记录;将重试视为另一次可能产生费用的操作。
如果结果在缩略图尺寸下看起来不错,请先以原始尺寸检查,再决定是否接受。对于带标签的产品,请额外检查文字和商标;这张没有标签的瓶子测试图无法验证这些属性。如需了解如何更改完整场景并保留产品,请参阅单张参考图与两张参考图测试。
常见问题
- 蒙版能保证其他所有像素都完全不变吗?
- 我们的成功样本在目标区域以外没有保留完全一致的 RGB 值。如果交付要求精确保留像素,请使用明确的像素检查。
- 使用蒙版的输出总是更好吗?
- 这组结果不足以证明这一点。它在受保护区域的平均差异较低,但两种输出仍都需要按照具体任务进行视觉验收。
- 可以用黑白 JPEG 代替 Alpha 蒙版吗?
- 不能用它代替本文使用的透明 PNG 蒙版。请检查 Alpha 通道,并遵循所选端点文档中列出的输入要求。


