dall-e-2、gpt-image-1、最新的 gpt-image-2,以及透過同一介面接入的 nano-banana / nano-banana-2 / nano-banana-pro 系列模型。
本文檔主要介紹 OpenAI Images Edits API 操作的使用流程,利用它我們可以輕鬆使用官方 OpenAI 圖像編輯功能。
申請流程
要使用 OpenAI Images Edits API,首先可以到 OpenAI Images Edits API 頁面點擊「Acquire」按鈕,獲取請求所需要的憑證:
如果你尚未登入或註冊,會自動跳轉到登入頁面邀請您來註冊和登入,登入註冊之後會自動返回當前頁面。
在首次申請時會有免費額度贈送,可以免費使用該 API。
GPT-Image-2 模型
gpt-image-2 在圖像編輯場景下相比 gpt-image-1 有非常明顯的提升:
- 結構保持更穩定:換皮膚、換配色、換背景時幾乎不會破壞原圖的版式與構圖。
- 文字保留更準確:資訊圖、海報、菜單等含文字的圖片在編輯後文字仍然清晰可讀。
- 支援 URL 直傳:除了傳統的
multipart/form-data檔案上傳,gpt-image-2還額外支援以 JSON 方式傳入圖片 URL,無需先把圖片下載到本地,非常適合服務端流水線接入。 - 支援高解析度重繪:可以傳入一張 1K 原圖,透過
size參數請求 2K / 4K 輸出,模型會在編輯過程中同時完成放大。
支援的 size 取值
編輯介面對 size 的約束與生成介面完全一致——gpt-image-2 只需要 size 為 auto、空,或者符合 WIDTHxHEIGHT 格式,任何其他形態會返回 400。所有尺寸(1K / 2K / 4K / 自訂)按單張統一扣費,與原圖解析度和 size 請求值都無關。
上游對自訂尺寸的硬約束同樣適用:寬高均為 16 的倍數、長邊 ≤ 3840、總像素數 ≤ 8,294,400。
| 比例 | 1K 推薦 | 2K 推薦 | 4K 推薦 |
|---|---|---|---|
| 1:1 | 1024x1024 | 2048x2048 | 2880x2880 |
| 4:3 | 1536x1024 | 2048x1536 | 3264x2448 |
| 3:4 | 1024x1536 | 1536x2048 | 2448x3264 |
| 16:9 | 1792x1024 | 2048x1152 | 3840x2160 |
| 9:16 | 1024x1792 | 1152x2048 | 2160x3840 |
例如:原圖是1024x1024,size傳2048x2048時,模型會按編輯指令重繪並輸出 2K 圖;size傳3840x2160時輸出 4K 橫屏圖;傳auto或省略則由模型自行選擇。三者計費一致。
關於下面透過兩個不同方位的真實範例感受n參數gpt-image-2編輯介面目前不支援n > 1:該參數會被靜默忽略,無論傳n=1還是n=10,單次請求都只會返回 1 張圖,並且只按 1 張計費。如果你需要一次拿到多張候選編輯結果,請自行並發發起多次請求。該限制同樣適用於gpt-image-1/gpt-image-1.5,以及nano-banana/nano-banana-2/nano-banana-pro系列。dall-e-2是目前唯一原生支援n > 1的編輯模型。
gpt-image-2 的編輯能力。
呼叫方式一:JSON + 圖片 URL(推薦)
直接以application/json 方式發送請求,image 欄位填入一張圖片的 URL,模型會去抓取該圖片並按 prompt 進行編輯。
例如,下面這張原圖是用 gpt-image-2 生成的科普圖鑑:


提示:image欄位也支援傳入一個陣列,例如"image": ["url1", "url2", "url3"],最多可同時傳入 16 張參考圖,讓模型綜合參考多張圖片進行編輯。
呼叫方式二:JSON + 多張參考圖
gpt-image-2 支援同時參考多張圖片來生成最終結果,例如把多張產品照合成到一張禮物籃中:
場景示例:換風格 + 保持結構
下面是另一個例子,把一張木質書架替換為現代浮架,但嚴格保留每層書本的數量和排列。 原圖(用gpt-image-2 生成的木質書架):

task_id: e9544dba-727e-44a2-81e1-223d49869380):

呼叫方式三:multipart/form-data(相容 OpenAI SDK)
如果你已經在使用官方 OpenAI Python SDK,原有的multipart/form-data 上傳方式同樣適用,只需把 model 改為 gpt-image-2:
OPENAI_BASE_URL 設為 https://api.acedata.cloud/openai,OPENAI_API_KEY 設為申請到的 token:
Nano Banana 系列模型
nano-banana 系列在編輯場景下同樣接入了 /openai/images/edits,把 model 改為下表中的任意一個即可。
| 模型 | 計費(Credits / 次) | 適用場景 |
|---|---|---|
nano-banana | 0.14 | 普通圖像編輯,速度最快、成本最低 |
nano-banana-2 | 0.28 | 品質與細節明顯提升 |
nano-banana-pro | 0.35 | 系列中的旗艦,結構、文字、風格保留最佳 |
重要:參數支援範圍 Nano Banana 透過適配層接入 OpenAI 協議,僅支援以下參數:model、prompt、image。
image既可以透過multipart/form-data上傳檔案(worker 內部會轉成data:<mime>;base64,...傳給上游),也可以透過表單欄位直接傳圖片 URL 字串。- 不支援
mask、n、size、response_format等參數;填了也會被忽略。- 返回結構遵循 OpenAI 格式(
data[].url),但created固定為0,且不會返回b64_json,revised_prompt始終等於原始prompt。
透過表單 + 圖片 URL 呼叫

透過表單 + 本地檔案呼叫
非同步回調
callback_url 非同步回調機制對 nano-banana 同樣有效,呼叫流程與其它模型完全一致,詳見下文 非同步回調 一節。
基本使用
接下來就可以使用程式碼進行呼叫,下方是透過 CURL 進行呼叫:authorization,直接在下拉列表裡面選擇即可。另一個參數是 model,model 就是我們選擇使用 OpenAI 官網模型類別,這裡我們主要有 1 種模型,詳情可以看我們提供的模型。還有一個參數是 prompt,prompt 是我們輸入要生成圖像的提示詞。最後一個參數是 image,這個參數需要編輯的圖片路徑,需要編輯的圖片如下圖所示:

OPENAI_BASE_URL,可以設定為 https://api.acedata.cloud/openai,還有一個使用憑證變數 OPENAI_API_KEY,這個值是從 authorization 獲取到的,在 Mac OS 可以透過以下指令設定環境變數:
gift-basket.png,具體的結果如下:

dall-e-2、gpt-image-1 和 gpt-image-2,其中 gpt-image-2 是當前推薦使用的模型,詳見上文 GPT-Image-2 模型 一節。
非同步回調
由於 OpenAI Images Edits API 編輯圖片的時間可能相對較長,如果 API 長時間無回應,HTTP 請求會一直保持連線,導致額外的系統資源消耗,所以本 API 也提供了非同步回調的支援。 整體流程是:用戶端發起請求的時候,額外指定一個callback_url 欄位,用戶端發起 API 請求之後,API 會立刻返回一個結果,包含一個 task_id 的欄位資訊,代表當前的任務 ID。當任務完成之後,編輯圖片的結果會透過 POST JSON 的形式發送到用戶端指定的 callback_url,其中也包括了 task_id 欄位,這樣任務結果就可以透過 ID 關聯起來了。
下面我們透過範例來了解下具體怎麼操作。
首先,Webhook 回調是一個可以接收 HTTP 請求的服務,開發者應該替換為自己搭建的 HTTP 伺服器的 URL。此處為了方便演示,使用一個公開的 Webhook 範例網站 https://webhook.site/,打開該網站即可得到一個 Webhook URL,如圖所示:
將此 URL 複製下來,就可以作為 Webhook 來使用,此處的範例為 https://webhook.site/3d32690d-6780-4187-a65c-870061e8c8ab。
接下來,我們可以設定欄位 callback_url 為上述 Webhook URL,同時填入相應的參數,如以下程式碼所示:
task_id 欄位,data 欄位包含了和同步呼叫一樣的圖片編輯結果,透過 task_id 欄位即可實現任務的關聯。
錯誤處理
在呼叫 API 時,如果遇到錯誤,API 會返回相應的錯誤代碼和資訊。例如:400 token_mismatched:Bad request,可能因為缺少或無效參數。400 api_not_implemented:Bad request,可能因為缺少或無效參數。401 invalid_token:Unauthorized,無效或缺少授權憑證。429 too_many_requests:請求過多,超過速率限制。500 api_error:內部伺服器錯誤,伺服器發生問題。

