NanoBanana Pro Edit
圖片編輯與 NanoBanana Pro 生圖 使用同一套 Gemini API(generateContent),只是請求裡要帶上原圖 + 編輯指令,回應中回傳編輯後的圖片。參見 Gemini 官方:圖片編輯。
端點:與生圖相同,POST https://aiberm.com/v1beta/models/gemini-3-pro-image-preview:generateContent。
重點:contents 中傳入圖片 part(inlineData)+ 文字 part(編輯說明);generationConfig.responseModalities 設為 ["TEXT", "IMAGE"] 以同時拿到文字與編輯後的圖;從回應 candidates[0].content.parts 裡取 inline_data 即編輯結果圖。
範例程式碼
Python 用底線命名,REST/cURL 用駝峰命名,含義相同。
1from google import genai2from google.genai import types3from PIL import Image4from io import BytesIO5 6base_url = "https://aiberm.com"7api_key = "YOUR_API_KEY"8model = "gemini-3-pro-image-preview"9output_file = "edited.png"10 11# 原图路径与编辑指令12image_path = "original.png"13edit_prompt = "给这张图加上一顶时尚的礼帽,保持其余部分不变。"14 15client = genai.Client(16 api_key=api_key,17 http_options=types.HttpOptions(api_version="v1beta", base_url=base_url),18)19image = Image.open(image_path)20 21response = client.models.generate_content(22 model=model,23 contents=[edit_prompt, image],24 config=types.GenerateContentConfig(25 response_modalities=["TEXT", "IMAGE"],26 ),27)28 29for part in response.parts:30 if part.text is not None:31 print(part.text)32 elif part.inline_data is not None:33 Image.open(BytesIO(part.inline_data.data)).save(output_file)34 print(f"编辑后图片已保存: {output_file}")與生圖的差異
| 能力 | 生圖(NanoBanana Pro) | 編輯(本頁) |
|---|---|---|
請求 contents | 僅文字(描述要產生的圖) | 原圖 + 文字(描述如何改圖) |
generationConfig.imageConfig | 需要(寬高比、解析度 1K/2K/4K) | 編輯可不傳 |
responseModalities | ["IMAGE"] 或 ["TEXT","IMAGE"] | 建議 ["TEXT","IMAGE"] 以拿到編輯後圖 |
同一端點、同一驗證方式,僅 contents 與是否傳 imageConfig 不同。更多參數說明見 NanoBanana Pro 的 cURL 圖像參數與常見問題。
多張圖
在 contents 的 parts 裡依序放入多張圖(每張一個 inlineData part),再放一條文字編輯指令即可,模型會基於所有圖片和指令回傳結果(例如「把第一張圖的主體合成到第二張圖的背景上」)。
Python:在 contents 中傳入多個圖片物件 + 一條文字。
image1 = Image.open("photo.png")
image2 = Image.open("background.png")
response = client.models.generate_content(
model=model,
contents=["将第一张图的人物抠出来,放到第二张图的背景里。", image1, image2],
config=types.GenerateContentConfig(response_modalities=["TEXT", "IMAGE"]),
)
cURL:在 contents[0].parts 裡依序寫多個 inlineData,最後寫一個 text。
"contents": [{
"parts": [
{ "inlineData": { "mimeType": "image/png", "data": "<BASE64_图1>" }},
{ "inlineData": { "mimeType": "image/png", "data": "<BASE64_图2>" }},
{ "text": "将第一张图的人物合成到第二张图的背景里。" }
]
}]
使用圖片 URL
介面只接受 inlineData(base64) 或透過 File API 的 fileData,不能直接傳圖片 URL。若圖在網路上,需要先下載再放入請求。
Python 範例:從 URL 下載後交給 SDK(SDK 會依需求轉為 inlineData)。
import requests
from io import BytesIO
image_url = "https://example.com/photo.jpg"
resp = requests.get(image_url)
image = Image.open(BytesIO(resp.content))
response = client.models.generate_content(
model=model,
contents=["给这张图加上一顶礼帽。", image],
config=types.GenerateContentConfig(response_modalities=["TEXT", "IMAGE"]),
)
cURL:需在本機先把 URL 的圖下載並轉成 base64,再把得到的字串填入 inlineData.data。