说明:本文在 AI 辅助下生成。文中的接口参数来自服务端源码和公开文档,价格核对于 2026-10-25,测试结论来自作者在 2026-10-07 和 10-08 的小规模自测。
做电商主图、活动海报这类图时,最常见的三个问题是:图里的字拼错,几张参考图里的人物或商品对不上,画幅选项不够用,网页横幅和手机长图都得自己裁。Google 在 2026 年 10 月推出的 Nano Banana 2.1 针对的正是这几点:按 Google 模型卡的评测,它在信息图文字准确度和多人物编辑上都比上一代 Nano Banana 2 有提升,还新增了 1:4、1:8 这类长条画幅。
Nano Banana 2.1 是 Google 的图像生成与编辑模型。同一个模型既能文生图,也能带参考图做编辑和多图融合,适合图内文字要准、多张图要保持一致、画幅不固定的批量出图场景。本文用一个 OpenAI 兼容的 HTTP 接口,把文生图、多参考图编辑、15 种画幅、三档分辨率、回调和成本估算逐个走一遍,代码可以直接复制运行。
先说利益关系:下文的调用示例走的是我们自己的平台 apimodels.app,模型名是 nano-banana-2-1。
YOUR_API_KEY。requests,或者直接用 curl。https://api.apimodels.app/v1/images/generations,文生图和改图都走这一个地址。接口是异步的:POST 提交后立刻返回一个 taskId,再用 GET 查询,直到 state 变成 completed,从 resultUrls 里取图。下面的提示词是示例,结构和参数与官方文档一致:
import requests, time
API_KEY = "YOUR_API_KEY"
ENDPOINT = "https://api.apimodels.app/v1/images/generations"
H = {"Authorization": f"Bearer {API_KEY}", "Content-Type": "application/json"}
# 第 1 步:提交任务,立即返回 taskId
res = requests.post(ENDPOINT, headers=H, json={
"model": "nano-banana-2-1",
"prompt": "竖版咖啡店开业海报,暖色调,顶部大字标题写着「秋日限定 桂花拿铁」,"
"画面中央是一杯拿铁和几枝桂花,底部一行小字写着「10 月 26 日开业」",
"aspect_ratio": "3:4",
"resolution": "2K", # 1K(默认)/ 2K / 4K,决定价格
})
task_id = res.json()["data"]["taskId"]
# 第 2 步:每 3 秒查一次,直到完成或失败
while True:
data = requests.get(ENDPOINT, headers=H, params={"task_id": task_id}).json()["data"]
if data["state"] == "completed":
print(data["resultUrls"][0])
break
if data["state"] == "failed":
raise RuntimeError(data.get("failMsg", "generation failed"))
time.sleep(3)state 只有四种取值:pending 和 processing 表示还在生成,completed 表示完成,failed 表示失败、原因写在 failMsg 里。一次请求只出一张图,要多张就并发多发几单,每单各自计费、各自可查。
出图时间在我们的自测里波动不小:10 月 7 日一张 16:9 的 1K 图大约 20 秒;10 月 8 日同样是 2K 的图,上午 25 到 28 秒,下午 65 到 77 秒。轮询循环最好留出几分钟的超时,不要按十几秒去写死。
在我们的自测里,16:9 招牌上的英文、信息图里的每一个标签都拼写正确;编辑一张带字的截图时,屏幕上的原有文字也原样保留了下来。中文长段落我们没有做过系统测试,所以下面几条是结合 Google 模型卡里写明的限制整理的经验:
改图和融合用的是同一个端点、同一个模型名。传 image(单张)或 image_urls(数组),请求就自动进入编辑模式,两者合计最多 10 张。每张可以是 URL、data URI 或裸 base64,格式支持 JPEG、PNG、WebP。提示词里用「图 1、图 2」指代参考图即可:
curl -X POST https://api.apimodels.app/v1/images/generations \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "nano-banana-2-1",
"prompt": "把图 1 的保温杯放在图 2 的木质桌面上,杯身印上图 3 的品牌标志,自然光,电商主图风格",
"image_urls": [
"https://example.com/bottle.png",
"https://example.com/desk.jpg",
"https://example.com/logo.png"
],
"aspect_ratio": "4:5",
"resolution": "2K"
}'返回同样是 taskId,轮询方式和第一节完全一样。有三点要注意:
image_urls,不是 images。我们在 10 月 8 日做过一次改图自测:把一张带标题的截图放进客厅场景,屏幕上的文字原样保留,倒影里的镜像字母也是对的;但提示词里的几条要求,它漏了一条。所以复杂的编辑指令最好拆成两步来做。
aspect_ratio 支持 15 个值:
auto(默认), 1:1, 2:3, 3:2, 3:4, 4:3, 4:5, 5:4, 9:16, 16:9, 21:9, 1:4, 4:1, 1:8, 8:1其中 21:9 适合网页横幅,1:4 和 1:8 适合长条详情图或手机长图。传了列表以外的值会直接返回 400,不会被悄悄换成别的比例,排查起来比较省事。
resolution 分 1K、2K、4K 三档,不传按 1K 处理。以 16:9 为例,三档实际出图分别是 1376×768、2752×1536、5504×3072。我们 10 月 9 日实测过,4K 是原生出图,不是放大来的。
第一种办法是加 callback_url。在请求体里带上一个公网可访问的地址,任务结束后会回调这个地址,适合放在队列或服务端批处理里用:
{
"model": "nano-banana-2-1",
"prompt": "……",
"resolution": "1K",
"callback_url": "https://your-app.example.com/webhook/image"
}回调地址必须是公网 http(s);填 localhost 或内网 IP 会在提交时直接返回 400。本地调试可以用内网穿透工具。
第二种办法是用 OpenAI 官方 SDK 同步调用。请求里带上 size(形如 1536x1024)且没有 callback_url 时,接口会等到出图后再按 OpenAI 的格式返回。下面是示例代码:
from openai import OpenAI
client = OpenAI(base_url="https://api.apimodels.app/v1", api_key="YOUR_API_KEY")
resp = client.images.generate(
model="nano-banana-2-1",
prompt="极简风格的耳机产品图,浅灰背景,右下角写着「NEW」",
size="1536x1024", # 换算成 3:2、2K 档
response_format="url", # 只要链接;不传默认还会带 b64_json
)
print(resp.data[0].url)size 的换算规则是:比例取 1:1、2:3、3:2、4:5、5:4、4:3、3:4、16:9、9:16、21:9 中最接近的一个;分辨率按像素数分档,不超过 130 万像素算 1K,不超过 500 万像素算 2K,再大算 4K。1:4、1:8 这类长条比例换算不出来,需要在 extra_body 里直接传 aspect_ratio。显式传入的 aspect_ratio 和 resolution 优先于 size 的换算结果。
价格只看分辨率,参考图张数、画幅、提示词长短都不影响:
分辨率 | apimodels.app 每张 | Google 官方标准价每张 | 差额 |
|---|---|---|---|
1K | $0.022 | $0.0336 | 低约 35% |
2K | $0.036 | $0.0504 | 低约 29% |
4K | $0.06 | $0.113 | 低约 47% |
Google 官方价取自其定价页 2026-10-07 版的标准档。按这个价格,1K 出 100 张是 $2.20,2K 是 $3.60,4K 是 $6.00。控制成本的常见做法是:先用 1K 把提示词调好,再用 2K 或 4K 出正式图。
每一单的实际扣费都可以免费查询,用创建任务时拿到的 task_id 调用:
curl https://api.apimodels.app/v1/records/TASK_ID \
-H "Authorization: Bearer YOUR_API_KEY"返回里的 credits 就是这一单从余额里扣掉的美元数,失败的单是 0,方便和自己的业务记录逐单对账。
apimodels.app 是一个多模型 API 网关:用一个 API key、一个 OpenAI 兼容端点调用图像、视频、语音和语言模型。对 Nano Banana 2.1 来说,它在调用链路上做了这几件事,先说稳定性:
/v1/records 能查到每一单的实际扣费;结果文件保留 30 天。价格方面,三档单价都低于 Google 官方标准价,按美元计费,不需要单独开 Google Cloud 账号。
不适合的情况也说清楚:
400,aspect_ratio 不合法:值不在上面 15 个之内,改成列表里的值即可。400,参考图超过 10 张:image 和 image_urls 合计不能超过 10 张。400,callback_url 不可达:回调地址必须能从公网访问,不能是 localhost 或内网 IP。state: failed:原因写在 failMsg 里,这一单不扣费,可以修改提示词后重新提交。你在用 Nano Banana 2.1 做图内文字时,遇到过哪些写不对的情况?欢迎在评论区交流。
接口文档:Nano Banana 2.1 API 文档(apimodels.app);逐单扣费查询:请求记录与实扣查询文档。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。