Nano Banana(代号)是谷歌图像生成模型的代号,目前有两个可用版本:
- 正式版:
gemini-2.5-flash-image
(推荐,支持 10 种宽高比和分辨率自定义)
- 预览版:
gemini-2.5-flash-image-preview
(仍可使用)
两个模型都具有强大的图像生成和编辑能力,价格和调用方式完全相同。
2025年10月3日更新:谷歌发布了正式版 gemini-2.5-flash-image
,新增 10 种宽高比支持和分辨率自定义功能。推荐使用正式版以获得最佳体验,旧版本仍可继续使用。
📚 最新文档
飞书完整使用指南 - 更新最快,支持评论互动访问飞书文档获取最新的使用教程、技巧分享和问题解答。文档持续更新,遇到问题可直接在飞书上评论交流。
核心优势
- 🚀 生成速度快:平均仅需 10 秒,比 OpenAI 系列更快
- 💰 价格优势:$0.025/张(官网五折),结合充值优惠约 ¥0.14/张
- 🔄 完全兼容:使用对话补全端点,与 gpt-4o-image、sora_image 调用方式完全兼容
- 🎨 谷歌技术:基于谷歌最新、最强的图像生成/编辑技术
调用方式
正确端点 ✅
POST /v1/chat/completions
错误端点 ❌
POST /v1/images/generations # 不支持此端点
重要提示:本模型使用对话补全端点,不是传统的图像生成端点。这样设计是为了保持与 gpt-4o-image、sora_image 等模型的兼容性。
兼容性说明
如果你之前使用过以下模型,可以直接替换模型名称:
gpt-4o-image
→ gemini-2.5-flash-image
(推荐)或 gemini-2.5-flash-image-preview
sora_image
→ gemini-2.5-flash-image
(推荐)或 gemini-2.5-flash-image-preview
其他参数保持不变,即可无缝切换使用。
推荐使用正式版:gemini-2.5-flash-image
支持更多功能(10种宽高比、分辨率自定义),但预览版 gemini-2.5-flash-image-preview
仍可正常使用。
Python 示例代码
以下是完整的 Python 示例代码,支持自动保存 base64 图片到本地:
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Gemini 图片生成 - Python版本
支持非流式输出和自动保存base64图片到本地
"""
import requests
import json
import base64
import re
import os
import datetime
from typing import Optional, Tuple
class GeminiImageGenerator:
def __init__(self, api_key: str, api_url: str = "https://api.apiyi.com/v1/chat/completions"):
"""
初始化Gemini图片生成器
Args:
api_key: API密钥
api_url: API地址
"""
self.api_key = api_key
self.api_url = api_url
self.headers = {
"Content-Type": "application/json",
"Authorization": f"Bearer {api_key}"
}
def generate_image(self, prompt: str, model: str = "gemini-2.5-flash-image",
output_dir: str = ".") -> Tuple[bool, str]:
"""
生成图片并保存到本地
Args:
prompt: 图片描述提示词
model: 使用的模型
output_dir: 输出目录
Returns:
Tuple[是否成功, 结果消息]
"""
print("🚀 开始生成图片...")
print(f"提示词: {prompt}")
print(f"模型: {model}")
# 生成文件名
timestamp = datetime.datetime.now().strftime("%Y%m%d_%H%M%S")
output_file = os.path.join(output_dir, f"gemini_generated_{timestamp}.png")
try:
# 准备请求数据
payload = {
"model": model,
"stream": False,
"messages": [
{
"role": "user",
"content": prompt
}
]
}
print("📡 发送API请求...")
# 发送非流式请求
response = requests.post(
self.api_url,
headers=self.headers,
json=payload,
timeout=300
)
if response.status_code != 200:
error_msg = f"API请求失败,状态码: {response.status_code}"
try:
error_detail = response.json()
error_msg += f", 错误详情: {error_detail}"
except:
error_msg += f", 响应内容: {response.text[:500]}"
return False, error_msg
print("✅ API请求成功,正在解析响应...")
# 解析非流式JSON响应
try:
result = response.json()
print("✅ 成功解析JSON响应")
except json.JSONDecodeError as e:
return False, f"JSON解析失败: {str(e)}"
# 提取消息内容
full_content = ""
if "choices" in result and len(result["choices"]) > 0:
choice = result["choices"][0]
if "message" in choice and "content" in choice["message"]:
full_content = choice["message"]["content"]
if not full_content:
return False, "未找到消息内容"
print(f"📝 获取到消息内容,长度: {len(full_content)} 字符")
print("🔍 正在解析图片数据...")
# 提取并保存图片(支持base64和URL两种方式)
success, message = self._extract_and_save_images(full_content, output_file)
if success:
return True, message
else:
return False, f"图片保存失败: {message}"
except requests.exceptions.Timeout:
return False, "请求超时(300秒)"
except requests.exceptions.ConnectionError as e:
return False, f"连接错误: {str(e)}"
except Exception as e:
return False, f"未知错误: {str(e)}"
def _extract_and_save_images(self, content: str, base_output_file: str) -> Tuple[bool, str]:
"""
高效提取并保存base64图片数据
Args:
content: 包含图片数据的内容
base_output_file: 基础输出文件路径
Returns:
Tuple[是否成功, 结果消息]
"""
try:
print(f"📄 内容预览(前200字符): {content[:200]}")
# 使用精确的正则表达式一次性提取base64图片数据
base64_pattern = r'data:image/([^;]+);base64,([A-Za-z0-9+/=]+)'
match = re.search(base64_pattern, content)
if not match:
print('⚠️ 未找到base64图片数据')
return False, "响应中未包含base64图片数据"
image_format = match.group(1) # png, jpg, etc.
b64_data = match.group(2)
print(f'🎨 图像格式: {image_format}')
print(f'📏 Base64数据长度: {len(b64_data)} 字符')
# 解码并保存图片
image_data = base64.b64decode(b64_data)
if len(image_data) < 100:
return False, "解码后的图片数据太小,可能无效"
# 根据检测到的格式设置文件扩展名
output_file = base_output_file.replace('.png', f'.{image_format}')
os.makedirs(os.path.dirname(output_file) if os.path.dirname(output_file) else ".", exist_ok=True)
with open(output_file, 'wb') as f:
f.write(image_data)
print(f'🖼️ 图片保存成功: {output_file}')
print(f'📊 文件大小: {len(image_data)} 字节')
return True, f"图片保存成功: {output_file}"
except Exception as e:
return False, f"处理图片时发生错误: {str(e)}"
def main():
"""
主函数
"""
# 配置参数
API_KEY = "sk-" # 请替换为你的实际API密钥
PROMPT = "a beautiful cat under the tree"
print("="*60)
print("Gemini 图片生成器 - Python版本")
print("="*60)
print(f"开始时间: {datetime.datetime.now()}")
# 创建生成器实例
generator = GeminiImageGenerator(API_KEY)
# 生成图片
success, message = generator.generate_image(PROMPT)
print("\n" + "="*60)
if success:
print("🎉 执行成功!")
print(f"✅ {message}")
else:
print("❌ 执行失败!")
print(f"💥 {message}")
print(f"结束时间: {datetime.datetime.now()}")
print("="*60)
if __name__ == "__main__":
main()
使用步骤
- 替换 API Key:将代码中的
API_KEY
替换为你的实际 API 密钥
- 修改提示词:根据需要修改
PROMPT
变量
- 运行脚本:执行 Python 脚本,图片将自动保存到本地
价格对比
模型 | 定价 | 优势 |
---|
Nano Banana | $0.025/张 (充值加赠约¥0.14) | ⭐ 谷歌最强技术,生成速度快 |
gpt-image-1 | 更高 | - |
flux-kontext-pro | $0.035/张 | 持平 |
sora_image | 更低 | 逆向模型,稳定性一般 |
性价比建议:Nano Banana 在价格、速度、质量之间达到了很好的平衡,特别适合需要快速生成高质量图片的应用场景。
特性对比
速度对比
- Nano Banana:平均 10 秒
- OpenAI 系列:15-30 秒
- 其他模型:因模型而异
兼容性
- ✅ 完全兼容
gpt-4o-image
调用方式
- ✅ 完全兼容
sora_image
调用方式
- ✅ 支持对话补全端点
- ❌ 不支持传统图像生成端点
常见问题
为了保持与现有图像生成模型(如 gpt-4o-image、sora_image)的兼容性,方便用户无缝切换使用不同的图像生成模型。
如何从其他图像模型切换到 Nano Banana?
只需要将模型名称从 gpt-4o-image
或 sora_image
改为 gemini-2.5-flash-image
(推荐)或 gemini-2.5-flash-image-preview
,其他参数保持不变。
正式版 gemini-2.5-flash-image
支持 10 种宽高比和分辨率自定义功能,预览版 gemini-2.5-flash-image-preview
功能相对较少但仍可正常使用。两者价格和调用方式完全相同,推荐使用正式版。
模型会返回 base64 编码的图片数据,通常为 PNG 或 JPEG 格式。代码会自动检测格式并保存为对应的文件类型。
是的,Nano Banana 不仅支持图片生成,还支持图片编辑功能。具体使用方法请参考详细文档。
相关文档
更多技术细节和使用案例,请查看上方的详细使用指南链接。