Skip to main content
本頁是 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