Gemini 影像生成:使用參考圖片
Gemini 不僅能根據提示詞生成影像,也可以從您提供的圖片生成。這正是如何在系列中保持角色一致性,或將真實產品截圖渲染到生成場景中,而不是產生一個虛構產品的方法。
模型限制
以下資料取自 2026 年 9 月 19 日的 Gemini API 影像生成文件。模型名稱與限制會變更;請在依賴這些資料前重新閱讀當前文件。
最多 14 張參考圖片,每個類別有各自的子限制,這些是獨立配額而非共享池:
| 模型 | objects | characters | style |
|---|---|---|---|
gemini-3.1-flash-image | 10 | 4 | 3 |
gemini-3-pro-image | 6 | 5 | - |
gemini-3.1-flash-lite-image | 14 | - | - |
因此,產品截圖與角色肖像不會互相競爭預算。一張圖片可以同時包含多個螢幕和多個人物。
類別是推斷出來的,並非宣告出來的。 透過 AI SDK 和閘道器,您傳送的是未區分的 file 部分;沒有任何欄位會註明「這一個是角色」。請將 14 視為真正的上限,並遠低於此數字。類別限制描述的是模型能夠處理的範圍,而非您可以斷言的內容。實務上,兩個螢幕加上兩個人物就已經足夠。
呼叫方式
透過 Vercel AI Gateway,影像模型的行為類似語言模型:它會在文字 API 的回應中,透過 files 回傳圖片,而專門的影像 API 則會拒絕此類請求。請檢查您自己的提供者路由如何公開此功能。
const result = await generateText({
model,
prompt: [{ role: 'user', content: [
...references.map((r) => ({ type: 'file', mediaType: r.mediaType, data: r.bytes })),
{ type: 'text', text: prompt }, // 圖片在前,然後是指令
]}],
providerOptions: { google: {
responseModalities: ['IMAGE'],
imageConfig: { aspectRatio: '4:5', imageSize: '2K' },
}},
});
const file = result.files.find((f) => f.mediaType.startsWith('image/'));
寬高比:1:1 3:2 2:3 3:4 4:3 4:5 5:4 9:16 16:9 21:9。尺寸:512px 1K 2K 4K。
陷阱
1. 當附加參考圖片時,請勿撰寫「無浮水印」。 Gemini 似乎會將其解讀為要求從提供的圖片中移除浮水印,並拒絕整次呼叫。於 2026 年 9 月測量,每個提示詞尾部執行兩次,附加兩張參考圖片:
| 提示詞尾部 | 結果 |
|---|---|
| "絕非插圖,而是 3D 渲染..." | 圖片, 圖片 |
| "人物、臉部、手部... 都歡迎。" | 圖片, 圖片 |
| "無其他公司標誌。" | 圖片, 圖片 |
| "無浮水印。" | 內容過濾, 內容過濾 |
只有浮水印相關的措辭會觸發問題。從其他影像工具複製而來的負面提示慣例(許多結尾會加上 watermark, over-saturated, stock-image)可能會暗中破壞每一次呼叫。
2. 拒絕看起來像模型不穩定。 它會回傳 finishReason: 'content-filter',零個檔案以及空字串。如果您的錯誤訊息印出 result.text,您將看不到任何內容,並斷定 API 不可靠。請務必記錄 finishReason。
3. 在拋出錯誤前,重試空回應。 模型偶爾會因一般原因回傳空結果。只有在嘗試次數用完後才拋出錯誤,並在錯誤中加入 finishReason。
4. 不要描述提供的螢幕上有什麼內容。 截圖已經存在;描述其內容的文字會與圖片衝突,產生混雜的結果。只描述容納它的場景:桌子、光線、手部。
5. 模型會重新繪製,而不是貼上。 參考螢幕上的小文字可能會微妙地失真,出現看似合理但錯誤的名稱和標籤。這在縮圖尺寸上沒問題,但對於讀者會放大的內容來說就錯了。請檢查輸出,而非假設其保真度。
6. 參考圖片不會讓輸出看起來較不合成。 由真實截圖和真實肖像構建的圖片仍然是 AI 生成的。請遵守任何適用於您使用生成影像的標籤或揭露規則;請自行檢查相關規定,而非假設參考圖片能讓您免責。
參考圖片管線檢查清單
- 參考圖片部分位於文字部分之前。
- 少於 14 張參考圖片;理想為 4 張或更少。
- 提示詞描述場景,而非提供的螢幕內容。
- 提示詞中無浮水印相關措辭。
- 已記錄
finishReason,且空結果會重試。 - 發佈前檢查輸出是否有失真的小文字。