本頁是
gpt-image-2 通過 POST /v1/images/edits 上傳原圖 + 蒙版(mask)+ 提示詞實現局部重繪的實操指南。介面引數與線上除錯請見 圖片編輯 API 參考。核心原理:Alpha 通道決定編輯區域
一次局部編輯請求由三部分組成:一個直觀例子
假設原圖尺寸是 1024×1024:Mask 不是硬裁剪
GPT Image 的蒙版不是 Photoshop 那種絕對畫素級的硬限制。官方說明其本質仍是基於提示詞的引導式編輯:模型會參考蒙版,但不保證嚴格按每一個畫素邊界執行。 因此可能出現:- 蒙版外的陰影略微變化
- 物體邊緣向外擴充套件
- 光照和反射發生聯動
- 背景細節被輕微重繪
- 蒙版邊界附近出現過渡
提高局部編輯穩定性
提示詞不要只寫「換成紅色衣服」,建議寫成:- 蒙版比目標物體邊緣稍微擴大一些
- 不要只遮住物體中心,要覆蓋物體邊緣、陰影和反射
- 明確寫出哪些內容必須保持不變
- 編輯區域過小時,適當擴大蒙版
- 要求絕對不變時,最後自行做一次畫素合成(見下文)
要不要用 Mask?與純提示詞編輯的取捨
一個常見疑問:現在的 AI 不是已經”指哪打哪”了嗎,為什麼還要費勁做蒙版? 確實,gpt-image-2 不傳 mask、只靠一句”把左邊桌上的杯子換成花”,多數時候就能改對地方——指令遵循能力已經很強,日常隨手改圖完全夠用。但 mask 解決的是提示詞說不清、或者說清了也不保險的問題:
學術研究也支援這個分工:mask-free(純文字驅動)的編輯方法難以精確控制空間位置和形狀——比如 prompt-to-prompt 類方法無法在畫面中空間移動一個物體,編輯區域覆蓋不準時還會”該改的沒改、不該改的改了”;而 mask-based 方法以犧牲一點便利為代價,換來明確的空間控制精度。
檔案要求速查
多圖編輯時的角色分配:
Python 呼叫示例
cURL 呼叫示例
圖片編輯介面必須使用multipart/form-data,不能把原圖和蒙版作為普通 JSON 欄位提交:
image[] 欄位名。
Node.js 呼叫示例
蒙版從哪來?五種常見製作方式
很多人覺得做蒙版麻煩——“還得跟原圖一模一樣的尺寸”。其實有一個關鍵認知:蒙版幾乎從不’另畫一張’,而是從原圖上派生出來的。無論用程式碼、修圖軟體還是網頁畫布,流程都是「開啟原圖 → 在原圖上標記區域 → 匯出」,尺寸一致是自動滿足的,不需要手動對齊。方法一:程式直接生成透明蒙版
把矩形區域設為透明(允許編輯):(255, 255, 255, 255)= 不透明,保留區(0, 0, 0, 0)= 透明,編輯區
方法二:修圖軟體手動擦除
任何支援透明 PNG 的修圖軟體(Photoshop、GIMP、Krita、Photopea 等)都能做蒙版,本質就一步:把要編輯的區域”擦”成透明。以 Photoshop 為例:- 開啟原圖副本(直接在原圖上操作,尺寸天然一致)
- 如果圖層是「背景」,先雙擊解鎖為普通圖層(背景圖層不支援透明)
- 用套索 / 快速選擇 / 物件選擇工具框選要修改的區域
- 按 Delete 刪除選區內容 → 露出透明棋盤格
- 「匯出為 PNG」(勾選透明度),得到的就是合格的 Alpha 蒙版
圖層 → 透明 → 新增 Alpha 通道,選區後 Delete,匯出 PNG。
方法三:網頁塗抹畫布
各類 AI 修圖產品裡”用筆刷塗一下要改的地方”的互動,就是在瀏覽器裡動態生成 Alpha 蒙版,核心只有一個 Canvas API 屬性。實現原理見下文 塗抹式修圖的實現原理。方法四:AI 自動分割一鍵出蒙版
手動塗抹也嫌麻煩?可以讓分割模型代勞。Meta 開源的 SAM(Segment Anything Model) 系列是目前的主流方案:- 點選出蒙版:在物體上點一下,模型輸出該物體的畫素級精確輪廓(連頭髮絲邊緣都能貼合)
- 文字出蒙版:2025 年 11 月開源的 SAM 3 支援概念級文字提示,如「所有黃色計程車」「穿紅色球衣的球員」,一次返回所有匹配例項的蒙版(模型與程式碼見
github.com/facebookresearch,介紹見ai.meta.com) - 摳主體 / 摳背景:
rembg這類開源工具一行命令分離主體與背景,背景區域直接可以當”只改背景”的蒙版用
方法五:把黑白蒙版轉換成 Alpha 蒙版
如果你已有一張「黑色 = 編輯,白色 = 保留」的黑白蒙版:上傳前先校驗蒙版
很多invalid_image_file 都是因為副檔名是 .png,實際卻只有 RGB 沒有 Alpha。上傳前跑一遍:
蒙版形狀與塗抹式修圖的實現原理
蒙版可以是任意不規則形狀
蒙版本質是一張逐畫素的點陣圖,不是幾何圖形——每個畫素獨立記錄一個 Alpha 值。所以:- 矩形、圓形只是最簡單的示例
- 沿人物輪廓的剪影、頭髮絲邊緣、隨手塗鴉的一團、不連通的多塊區域,全部合法
- 實踐中大多數蒙版都是不規則的:跟著目標物體的輪廓走,再略微外擴
塗抹式修圖是怎麼實現的
各類修圖 App 裡”筆刷塗哪改哪”的互動,前端實現出奇地簡單:兩層畫布疊加,筆刷把上層”擦”成透明。destination-out(新筆跡從已有畫素中”挖掉”內容):
- 座標換算:畫布在頁面上通常被 CSS 縮小顯示,筆跡座標要按
原始寬 / 顯示寬的比例換算回去,否則蒙版錯位 - 撤銷:每筆開始前
ctx.getImageData()存快照,撤銷時putImageData()恢復 - 蒙版膨脹(dilate):使用者塗抹往往只蓋住物體中心,提交前程式性外擴幾個畫素(專業工具裡的「Expand Mask」按鈕就是這個),Python 端可用
PIL.ImageFilter.MaxFilter或 OpenCVcv2.dilate實現 - 半透明預覽:給使用者看的塗抹高亮(如紅色半透明)畫在另一個預覽層上,匯出的蒙版層保持純粹的”不透明 / 透明”二值
進階:點選 / 文字自動出蒙版
塗抹式再往前一步,就是把”人手塗”換成”模型算”:多參考圖 + 蒙版
典型場景:換裝(第一張是人物原圖,後面是款式 / 材質參考圖,蒙版標記衣服區域):嚴格保持蒙版外不變(畫素級後處理)
由於模型可能輕微修改蒙版外內容,對畫素精度要求高的場景(商品圖、證件版式、固定 UI 截圖),可以在生成後把蒙版外區域強制替換回原圖:常見錯誤排查
invalid_image_file / Invalid image file or mode
invalid_image_file / Invalid image file or mode
常見原因:
- 蒙版不是有效 PNG,或檔案內容損壞
- 副檔名是 PNG,實際編碼不是 PNG
- 圖片模式異常(CMYK、調色盤模式、缺 Alpha)
- 上傳時 MIME 型別錯誤
- 檔案流在請求前已被讀取完畢或關閉
原圖和蒙版尺寸不一致
原圖和蒙版尺寸不一致
哪怕只差 1 畫素也會報錯。修正:
黑白蒙版沒有 Alpha 通道
黑白蒙版沒有 Alpha 通道
RGB / L / P 模式都不行,必須是 RGBA。用上文「方法二」把黑白蒙版轉換成 Alpha 蒙版。請求透明背景報錯
請求透明背景報錯
蒙版本身可以包含透明通道(這正是標記編輯區的方式),但
gpt-image-2 不支援輸出透明背景:background 請使用 "opaque" 或 "auto",傳 "transparent" 會報錯。response_format=url 拿不到圖
response_format=url 拿不到圖
GPT Image 系列固定返回 Base64 資料,
response_format 只適用於舊的 DALL·E 2 行為。正確讀取方式:Content-Type isn't multipart/form-data
Content-Type isn't multipart/form-data
通常是手動設定了
Content-Type 頭導致 boundary 丟失,或中間層把 multipart 請求解析成 JSON 後再轉發。讓 HTTP 客戶端自動生成 multipart 頭即可。尺寸引數
gpt-image-2 支援靈活尺寸,需同時滿足:
1024x1024、1536x1024、1024x1536、2048x2048、2048x1152、3840x2160、2160x3840、auto。方形圖片通常生成更快。
生產環境請求模板
相關頁面
圖片編輯 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