跳转到主要内容
本页是 gpt-image-2 通过 POST /v1/images/edits 上传原图 + 蒙版(mask)+ 提示词实现局部重绘的实操指南。接口参数与在线调试请见 图片编辑 API 参考

核心原理:Alpha 通道决定编辑区域

一次局部编辑请求由三部分组成:
蒙版通过 PNG 的 Alpha 透明通道标记修改区域:
最容易搞反的一点:决定编辑区域的是 Alpha 通道,不是肉眼看到的黑色或白色。
一张”看起来黑白分明”的 PNG,如果没有 Alpha 通道,直接上传会报 invalid_image_file

一个直观例子

假设原图尺寸是 1024×1024:
配合提示词:

Mask 不是硬裁剪

GPT Image 的蒙版不是 Photoshop 那种绝对像素级的硬限制。官方说明其本质仍是基于提示词的引导式编辑:模型会参考蒙版,但不保证严格按每一个像素边界执行。 因此可能出现:
  • 蒙版外的阴影略微变化
  • 物体边缘向外扩展
  • 光照和反射发生联动
  • 背景细节被轻微重绘
  • 蒙版边界附近出现过渡
这对自然融合是好事,但不适合要求绝对像素不变的场景(解决方案见下文「严格保持蒙版外不变」)。

提高局部编辑稳定性

提示词不要只写「换成红色衣服」,建议写成:
实务建议:
  1. 蒙版比目标物体边缘稍微扩大一些
  2. 不要只遮住物体中心,要覆盖物体边缘、阴影和反射
  3. 明确写出哪些内容必须保持不变
  4. 编辑区域过小时,适当扩大蒙版
  5. 要求绝对不变时,最后自行做一次像素合成(见下文)

要不要用 Mask?与纯提示词编辑的取舍

一个常见疑问:现在的 AI 不是已经”指哪打哪”了吗,为什么还要费劲做蒙版? 确实,gpt-image-2 不传 mask、只靠一句”把左边桌上的杯子换成花”,多数时候就能改对地方——指令遵循能力已经很强,日常随手改图完全够用。但 mask 解决的是提示词说不清、或者说清了也不保险的问题: 学术研究也支持这个分工:mask-free(纯文字驱动)的编辑方法难以精确控制空间位置和形状——比如 prompt-to-prompt 类方法无法在画面中空间移动一个物体,编辑区域覆盖不准时还会”该改的没改、不该改的改了”;而 mask-based 方法以牺牲一点便利为代价,换来明确的空间控制精度。
一句话结论:mask 不是被淘汰的旧技术,而是从”必需品”变成了”精度控制工具”。聊天式随手改图 → 直接用提示词;生产环境要求可复现、可控、边界严格 → 用 mask。另外别忘了:gpt-image-2 纯提示词编辑本质是整图重生成,未指定区域同样可能变化——这正是 mask + 像素合成存在的意义。

文件要求速查

多图编辑时的角色分配:
「尺寸完全一致」听起来麻烦,实际不需要手动对齐——蒙版都是从原图上派生出来的(在原图副本上擦除 / 涂抹 / 分割),同尺寸自动满足,详见下文 蒙版从哪来

Python 调用示例

不要传 input_fidelity="high" —— gpt-image-2 对输入图默认始终高保真处理,API 不允许调整该参数,传了会 400 报错,直接省略即可。

cURL 调用示例

图片编辑接口必须使用 multipart/form-data,不能把原图和蒙版作为普通 JSON 字段提交:
即便只有一张图片,也建议按官方示例使用 image[] 字段名。
使用 -F不要手动设置 -H "Content-Type: multipart/form-data"。curl 需要自动生成 boundary,手动设置会丢失 boundary,导致服务器无法识别文件。

Node.js 调用示例

蒙版从哪来?五种常见制作方式

很多人觉得做蒙版麻烦——“还得跟原图一模一样的尺寸”。其实有一个关键认知:蒙版几乎从不’另画一张’,而是从原图上派生出来的。无论用代码、修图软件还是网页画布,流程都是「打开原图 → 在原图上标记区域 → 导出」,尺寸一致是自动满足的,不需要手动对齐。

方法一:程序直接生成透明蒙版

把矩形区域设为透明(允许编辑):
  • (255, 255, 255, 255) = 不透明,保留区
  • (0, 0, 0, 0) = 透明,编辑区

方法二:修图软件手动擦除

任何支持透明 PNG 的修图软件(Photoshop、GIMP、Krita、Photopea 等)都能做蒙版,本质就一步:把要编辑的区域”擦”成透明。以 Photoshop 为例:
  1. 打开原图副本(直接在原图上操作,尺寸天然一致)
  2. 如果图层是「背景」,先双击解锁为普通图层(背景图层不支持透明)
  3. 用套索 / 快速选择 / 对象选择工具框选要修改的区域
  4. 按 Delete 删除选区内容 → 露出透明棋盘格
  5. 「导出为 PNG」(勾选透明度),得到的就是合格的 Alpha 蒙版
GIMP 同理:图层 → 透明 → 添加 Alpha 通道,选区后 Delete,导出 PNG。
形状完全不限于矩形——套索沿着物体轮廓走、快速选择一键选中主体,擦出来的透明区就是任意不规则形状。建议选区比物体轮廓稍微外扩几个像素(Photoshop:选择 → 修改 → 扩展),把阴影和边缘一并覆盖。

方法三:网页涂抹画布

各类 AI 修图产品里”用笔刷涂一下要改的地方”的交互,就是在浏览器里动态生成 Alpha 蒙版,核心只有一个 Canvas API 属性。实现原理见下文 涂抹式修图的实现原理

方法四:AI 自动分割一键出蒙版

手动涂抹也嫌麻烦?可以让分割模型代劳。Meta 开源的 SAM(Segment Anything Model) 系列是目前的主流方案:
  • 点选出蒙版:在物体上点一下,模型输出该物体的像素级精确轮廓(连头发丝边缘都能贴合)
  • 文字出蒙版:2025 年 11 月开源的 SAM 3 支持概念级文字提示,如「所有黄色出租车」「穿红色球衣的球员」,一次返回所有匹配实例的蒙版(模型与代码见 github.com/facebookresearch,介绍见 ai.meta.com
  • 抠主体 / 抠背景rembg 这类开源工具一行命令分离主体与背景,背景区域直接可以当”只改背景”的蒙版用
拿到分割结果(通常是黑白位图)后,用下面「方法五」转成 Alpha 蒙版即可。Stable Diffusion 社区的 Inpaint Anything 插件、ComfyUI 的 Mask Editor 就是「SAM 分割 + 笔刷微调 → 蒙版 → 局部重绘」这套流水线的成熟实现,思路可以直接借鉴。

方法五:把黑白蒙版转换成 Alpha 蒙版

如果你已有一张「黑色 = 编辑,白色 = 保留」的黑白蒙版:

上传前先校验蒙版

很多 invalid_image_file 都是因为文件扩展名是 .png,实际却只有 RGB 没有 Alpha。上传前跑一遍:

蒙版形状与涂抹式修图的实现原理

蒙版可以是任意不规则形状

蒙版本质是一张逐像素的位图,不是几何图形——每个像素独立记录一个 Alpha 值。所以:
  • 矩形、圆形只是最简单的示例
  • 沿人物轮廓的剪影、头发丝边缘、随手涂鸦的一团、不连通的多块区域,全部合法
  • 实践中大多数蒙版都是不规则的:跟着目标物体的轮廓走,再略微外扩
唯一的”形状建议”与规则无关,与效果有关:透明区要完整覆盖物体本体 + 边缘 + 阴影 + 反射,宁可多圈一点,让模型有空间做自然融合。

涂抹式修图是怎么实现的

各类修图 App 里”笔刷涂哪改哪”的交互,前端实现出奇地简单:两层画布叠加,笔刷把上层”擦”成透明
核心只有一行——把 Canvas 合成模式设为 destination-out(新笔迹从已有像素中”挖掉”内容):
几个工程细节:
  1. 坐标换算:画布在页面上通常被 CSS 缩小显示,笔迹坐标要按 原始宽 / 显示宽 的比例换算回去,否则蒙版错位
  2. 撤销:每笔开始前 ctx.getImageData() 存快照,撤销时 putImageData() 恢复
  3. 蒙版膨胀(dilate):用户涂抹往往只盖住物体中心,提交前程序性外扩几个像素(专业工具里的「Expand Mask」按钮就是这个),Python 端可用 PIL.ImageFilter.MaxFilter 或 OpenCV cv2.dilate 实现
  4. 半透明预览:给用户看的涂抹高亮(如红色半透明)画在另一个预览层上,导出的蒙版层保持纯粹的”不透明 / 透明”二值

进阶:点选 / 文字自动出蒙版

涂抹式再往前一步,就是把”人手涂”换成”模型算”:
这正是 Inpaint Anything、ComfyUI Mask Editor 等工具的做法:分割模型负责”准”,笔刷负责”改”——先一键生成精确蒙版,再用笔刷做加减微调(Add / Trim mask by sketch)。自建产品时,把 SAM 部署为后端服务、前端保留涂抹画布做兜底微调,是当前体验最好的组合。

多参考图 + 蒙版

典型场景:换装(第一张是人物原图,后面是款式 / 材质参考图,蒙版标记衣服区域):
多图时必须在 prompt 中清楚描述每张图的用途(第一张是主体、第二张是款式参考、第三张是材质参考),否则模型可能混淆图片角色。

严格保持蒙版外不变(像素级后处理)

由于模型可能轻微修改蒙版外内容,对像素精度要求高的场景(商品图、证件版式、固定 UI 截图),可以在生成后把蒙版外区域强制替换回原图:
最终效果:蒙版内部采用 AI 编辑结果,蒙版外部恢复成原始图片,边界轻微羽化融合。

常见错误排查

常见原因:
  • 蒙版不是有效 PNG,或文件内容损坏
  • 扩展名是 PNG,实际编码不是 PNG
  • 图片模式异常(CMYK、调色板模式、缺 Alpha)
  • 上传时 MIME 类型错误
  • 文件流在请求前已被读取完毕或关闭
统一转码可解决大多数问题:
哪怕只差 1 像素也会报错。修正:
RGB / L / P 模式都不行,必须是 RGBA。用上文「方法二」把黑白蒙版转换成 Alpha 蒙版。
蒙版本身可以包含透明通道(这正是标记编辑区的方式),但 gpt-image-2 不支持输出透明背景
background 请使用 "opaque""auto",传 "transparent" 会报错。
GPT Image 系列固定返回 Base64 数据,response_format 只适用于旧的 DALL·E 2 行为。正确读取方式:
通常是手动设置了 Content-Type 头导致 boundary 丢失,或中间层把 multipart 请求解析成 JSON 后再转发。让 HTTP 客户端自动生成 multipart 头即可。

尺寸参数

gpt-image-2 支持灵活尺寸,需同时满足:
常用尺寸:1024x10241536x10241024x15362048x20482048x11523840x21602160x3840auto。方形图片通常生成更快。

生产环境请求模板

相关页面

图片编辑 API 参考

完整参数说明与在线调试 Playground

GPT-Image-2 概览

模型能力、定价与版本说明
官方参考资料(请复制到浏览器访问):
  • 模型说明:developers.openai.com/api/docs/models/gpt-image-2
  • 图像编辑 API Reference:developers.openai.com/api/reference/python/resources/images/methods/edit/
  • 图像生成指南:developers.openai.com/api/docs/guides/image-generation