摘要:在撸起袖子写代码之前,咱们得先找个地方把玩一下这个新玩具,找找感觉。谷歌为我们开发者准备了一个绝佳的“游乐场”——Google AI Studio。在这里,你可以免费、无限制地和Nano Banana互动,测试各种天马行空的想法,而这一切,甚至不需要你写一行代
最近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 genaifrom PIL import Imagefrom io import BytesIO# 用你的API密钥配置好客户端client = genai.Client(api_key="YOUR_API_KEY")prompt = """Create a photorealistic image of an orange catwith 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 genaifrom PIL import Imagefrom io import BytesIOclient = 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 aNew York City neighborhood, with the blurred legs of pedestriansand 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 genaifrom PIL import Imagefrom io import BytesIOclient = 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 genaifrom PIL import Imagefrom io import BytesIOclient = 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 genaifrom PIL import Imagefrom io import BytesIOclient = 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
教程最后还附上了社区里很多大神用它做出的非常酷的东西。
视角切换:@henrydaubrez
少量图片实现角色一致性设计:@multimodalart
从谷歌地图中给你实景(“红色箭头所指的是什么?”):@tokumin
角色+草图生成画面:@yachimat_manga
静态图片生成3D模型:@deedydas
由于nano banana拥有gemini的世界知识,可以用来标注真实世界中的景物:@bilawalsidhu
2D地图平面转3D:@demishassabis
去创造吧,用代码和想象力,看看这个工具能在你手中绽放出怎样的火花。
来源:算泥社区