最近AI图像圈子里玩疯了的Nano Banana新模型,迎来了官方保姆级开发教程。

从环境准备到代码实战,再到怎么和它“聊”出你想要的神图,所有你想知道的,都给你嚼碎了。
万事开头难?不,这次很简单
在撸起袖子写代码之前,咱们得先找个地方把玩一下这个新玩具,找找感觉。谷歌为我们开发者准备了一个绝佳的“游乐场”——Google AI Studio。在这里,你可以免费、无限制地和Nano Banana互动,测试各种天马行空的想法,而这一切,甚至不需要你写一行代码。在正式开工前,先在这里把你的“prompt(提示词)”打磨到炉火纯青。要进入这个专属游乐场也非常简单,直接访问 aistudio.google.com,用你的谷歌账户登录,然后在模型选择器里找到Nano Banana就行了。

好了,热身结束。游戏进入了下一关,我们需要准备好“装备”:
首先,你需要一把“钥匙”,也就是来自Google AI Studio的API key。其次,你需要为你的项目“充值”,也就是设置好结算账户。最后,你需要一套“工具”,也就是谷歌的Gen AI SDK,无论你是Python党还是JavaScript/TypeScript高手,都有对应的版本。
python:
https://github.com/googleapis/python-genai
JavaScript:
https://github.com/googleapis/js-genai
拿到API key的过程非常直接。在Google AI Studio的左侧导航栏找到“Get API key”,点击“Create API key”,然后选择一个现有的Google Cloud项目或者新建一个。这个项目主要是用来管理你调用API产生的费用。完成后,你就会得到一串密钥,记得妥善保管,这可是你的重要凭证。接下来是大家最关心的钱的问题。虽然在AI Studio里调试是免费的,但通过API调用模型来构建真正的应用是需要付费的。你需要在API密钥管理页面,找到你的项目并点击“Set up billing”来启用结算功能。

那么,用Nano Banana到底贵不贵?其实相当亲民。生成一张图片的成本大约是0.039美元。换算一下,1美元大概能生成25张图片。官方的定价是输入token每百万0.30美元,输出token每百万30美元。一张标准的1024x1024像素图片会消耗1290个输出token,算下来就是前面说的那个价。
最后一步,安装SDK。根据你的技术栈选择对应的命令:
如果你用Python:
pip install -U google-genai
# 别忘了装Pillow库,处理图片会用到
pip install Pillow
如果你用JavaScript / TypeScript:
npm install @google/genai
接下来的例子我会主要用Python来演示,不过别担心,如果你是前端高手,可以去这个GitHub链接找到对应的JavaScript代码片段。
让代码施展真正的图像魔法
准备工作就绪,好戏正式开场。让我们先从最基础的“无中生有”开始——用一段文字描述来生成图片。记住,我们在调用API时,指定的模型ID是 gemini-2.5-flash-image-preview。
from google import genai
from PIL import Image
from io import BytesIO
# 堆代码 duidaima.com
# 用你的API密钥配置好客户端
client = genai.Client(api_key="YOUR_API_KEY")
prompt = """Create a photorealistic image of an orange cat
with a green eyes, sitting on a couch."""
# 调用API生成内容
response = client.models.generate_content(
model="gemini-2.5-flash-image-preview",
contents=prompt,
)
# 模型的返回结果可能同时包含文本和图片数据# 我们需要遍历一下,找到图片并保存
for part in response.candidates[0].content.parts:
if part.text is not None:
print(part.text)
elif part.inline_data is not None:
image = Image.open(BytesIO(part.inline_data.data))
image.save("cat.png")
执行完这段代码,你会得到一张图片。

你会发现,返回的response结构很有意思,它是一个包含多个部分的列表。这是因为这个模型是多模态的,它可以在一次响应里同时返回文字和图片。所以我们需要写个循环来把它俩分开。生成新图只是开胃菜,Nano Banana真正强大的地方在于图像编辑。它能理解一张现有的图片,并根据你的指令进行修改,而且最牛的是,它能很好地保持原图中的角色和内容的一致性。我们用刚才生成的猫图来试试。
from google import genai
from PIL import Image
from io import BytesIO
client = genai.Client(api_key="YOUR_API_KEY")
prompt = """Using the image of the cat, create a photorealistic,
street-level view of the cat walking along a sidewalk in a
New York City neighborhood, with the blurred legs of pedestrians
and yellow cabs passing by in the background."""
image = Image.open("cat.png")
# 注意,这次我们把文本和图片一起放进 'contents' 列表里
response = client.models.generate_content(
model="gemini-2.5-flash-image-preview",
contents=[prompt, image],
)
for part in response.candidates[0].content.parts:
if part.text is not None:
print(part.text)
elif part.inline_data is not None:
image = Image.open(BytesIO(part.inline_data.data))
image.save("cat2.png")
看看效果,是不是很惊艳?

这种能力的应用场景非常广,比如照片修复。家里那些承载着回忆的黑白老照片,现在有救了。一个简单的指令,就能让它焕发新生。
from google import genai
from PIL import Image
from io import BytesIO
client = genai.Client(api_key="YOUR_API_KEY")
prompt = "Restore and colorize this image from 1932"
image = Image.open("lunch.jpg")
response = client.models.generate_content(
model="gemini-2.5-flash-image-preview",
contents=[prompt, image],
)
for part in response.candidates[0].content.parts:
if part.text is not None:
print(part.text)
elif part.inline_data is not None:
image = Image.open(BytesIO(part.inline_data.data))
image.save("lunch-restored.png")
看看修复前后的对比。著名的照片《摩天楼顶上的午餐, 1932》:

Nano Banana还能处理更复杂的任务,比如同时理解多张图片。想象一下,你想给照片里的人物换件衣服,只需要提供人物照片和衣服的照片,然后告诉它你想做什么。
from google import genai
from PIL import Image
from io import BytesIO
client = genai.Client(api_key="YOUR_API_KEY")
prompt = "Make the girl wear this t-shirt. Leave the background unchanged."
image1 = Image.open("girl.png")
image2 = Image.open("tshirt.png")
response = client.models.generate_content(
model="gemini-2.5-flash-image-preview",
contents=[prompt, image1, image2],
)
for part in response.candidates[0].content.parts:
if part.text is not None:
print(part.text)
elif part.inline_data is not None:
image = Image.open(BytesIO(part.inline_data.data))
image.save("girl-with-tshirt.png")
结果就像这样。
像聊天一样去修改你的图片
有时候,我们很难一次性就把需求描述完美。如果能像和设计师沟通一样,反复修改就好了。Nano Banana的聊天会话功能就能满足你。你可以开启一个会话,在上下文中不断对图片进行迭代优化。
from google import genai
from PIL import Image
from io import BytesIO
client = genai.Client(api_key="YOUR_API_KEY")
# 创建一个聊天会话
chat = client.chats.create(
model="gemini-2.5-flash-image-preview"
)
# 第一次编辑
response1 = chat.send_message(
[
"Change the cat to a bengal cat, leave everything else the same",
Image.open("cat.png"),
]
)
# 这里可以展示或保存图片...# 继续聊天,进行第二次编辑
response2 = chat.send_message("The cat should wear a funny party hat")
# 再次展示或保存图片...
经过两轮对话,图片就变成了这样。

这里有个小提示:如果在连续多轮的对话编辑后,你发现图片的一些细节开始变得模糊或者“跑偏”,最好的办法是停下来,用最新生成的图片开启一个新的会话,然后给出一个更全面、更具体的综合性指令。这样可以保持图片的高保真度。
学会和AI沟通的艺术
要想让Nano Banana发挥出百分之百的功力,你需要掌握一些和它沟通的技巧。这就像是学习一门新的语言,你越懂它,它就越懂你。
首先,要描述得极其具体。不要只说“一只猫”,要说“一只橘色的、绿眼睛的、坐在沙发上的猫”。主体、颜色、光线、构图,细节越多,你对结果的控制力就越强。其次,告诉它你的意图。你希望这张图是温馨的、是紧张的、还是充满未来感的?理解了你的创作背景和情绪,模型会做出更有创造性的选择。再者,要有耐心,不断迭代。别指望一次就能得到完美的结果。利用它的对话能力,一步步微调,直到你满意为止。
对于复杂的场景,可以试试分步指令。像写菜谱一样,清晰地告诉它第一步做什么,第二步做什么。还有一个技巧是多用正面描述。与其说“不要有车”,不如说“一条空旷、寂静、没有任何交通迹象的街道”。
最后,学会使用专业术语来控制“镜头”。比如“广角镜头”、“微距拍摄”、“低角度视角”("wide-angle shot, "macro shot", or "low-angle perspective")等等,这些词汇能帮助模型更好地理解你想要的画面构图。
想深入学习,可以去看看官方博客里关于提示词最佳实践的文章,以及文档里的提示词指南。
最佳实践:
https://developers.googleblog.com/en/how-to-prompt-gemini-2-5-flash-image-generation-for-the-best-results/
提示词指南:
https://ai.google.dev/gemini-api/docs/image-generation?hl=zh-cn#prompt-guide