Python + nano-banana API 批量给图片添加文字

news/2025/11/7 22:55:55/文章来源:https://www.cnblogs.com/panyanyany/p/19201106

哈喽,各位!今天咱们来聊一个能让你在朋友圈里“秀操作”的实用技术:用 Python 批量给图片换文字。
你想想,是不是经常遇到这种情况?手头有一大堆产品图,需要把“限时秒杀”统一换成“新品上架”,或者给一系列海报盖上同一个活动水印。要是一张张用 PS 点,点到手抽筋也搞不完啊。

别急,今天的主角——Nano Banana API,就是来解决这个问题的。

这篇文章,我就手把手带你入门,看看怎么用 Python 调用这个强大的 AI 工具,把繁琐的图片编辑工作变成自动化的流水线。准备好了吗?咱们发车!

1. 这是个啥神器?Nano Banana API 能干啥?

直白点说,它是什么?

简单来说,Nano Banana API 是一个背靠 Google Gemini AI 的图片生成服务。你跟它说句话,它就能给你画张图;更牛的是,你给它一张原图,它还能照着你的意思去修改或二次创作。

它最核心的价值,就是让你能用几行代码,就把脑子里的想法变成对图片的实际操作。这意味着啥?意味着那些重复、无聊的图片处理活儿,完全可以扔给程序自动跑,咱们就能解放双手,去做更有创意的事。

都在哪些场景下好用?

光说不练假把式,来看几个接地气的例子,你马上就能明白它的妙处:

  • 电商卖货:给成堆的商品图换上新促销语,比如“满 100 减 20”一键换成“第二件半价”。
  • App 设计:需要做多语言测试?一键生成各种语言版本的 App 截图,再也不用等设计师了。
  • 社媒运营:给一批图片批量加上统一的品牌 Logo 或者活动水印,保持品牌形象一致性。
  • 脑洞大开:比如你跟 AI 说“把这张图里的猫换成狗”,它就能帮你实现这个奇思妙想,图片趣味性直接拉满。

2. 动手前的准备:把工具都备齐了

在开始敲代码之前,咱们得先把“兵器”准备好。这一步不难,但特别关键。

你需要准备这些:

  • Python:电脑上得装着 Python 3.6 或者更高的版本。
  • API 密钥: 去 Defapi 官网注册一个账号,然后生成你的专属密钥。
  • requests 库:这是个 Python 库,专门用来发网络请求,超级好用。如果还没装,打开终端(或者 Windows 的命令提示符),敲这行命令就行:
    pip install requests
    

你的 API 密钥,可得看好了!

调用 API 需要一个“通行证”,也就是 API Key。这个 Key 跟你的账户是绑定的,千万不能泄露

千万别这么干!:直接把 Key 写在代码里,像这样 api_key = "dk-1234567890abcdef"。这样一旦代码传到 GitHub 上或者分享给别人,你的密钥就等于公之于众了,那可就糟了!

这才是专业操作:用环境变量来管理它。这招既安全又专业。

  1. 设置环境变量(以 macOS/Linux 为例):

    export NANO_BANANA_API_KEY="你的真实API密钥"
    

    (Windows 用户可以在系统属性里设置,或者在 PowerShell 里用 $env:NANO_BANANA_API_KEY="你的真实API密钥"

  2. 在 Python 里调用它
    我们用 os 模块来读取这个 Key,这样代码里就不会出现明文密钥了,安全系数瞬间拉满。

3. 怎么跟 API “聊天”?请求和响应的门道

好了,知道了 API 是啥,环境也配好了,现在我们来深入看看怎么跟它“对话”。API 的交互就像一问一答,你得先搞清楚“怎么问”(请求)和“它怎么答”(响应)。

怎么向 API 发出指令?

Nano Banana API 的“聊天窗口”地址是 https://api.defapi.org/api/image/gen,我们需要用 POST 方法把我们的想法发过去。一个完整的请求包含三个部分:

  1. 地址https://api.defapi.org/api/image/gen
  2. 身份证:在请求头(Headers)里加上 Authorization 字段,值就是 Bearer 加上你的 API Key,格式像这样:Bearer <你的API密钥>
  3. 你的需求:这是请求的“正文”,是一个 JSON 格式的数据包,用来告诉 AI 我们想做什么。主要字段有:
    • model:指定用哪个模型,咱们就填 "google/nano-banana"
    • prompt这是你的“魔法咒语”! 用大白话描述你想要的图片效果。比如,“把图片里的文字‘Hello’改成‘你好’,其他别动”。
    • images:一个数组,可以放最多 4 张参考图的网址。AI 会参考这些图的构图和内容来修改。
    • callback_url(可选):如果你不想傻等,可以给它一个回调地址,任务完成后 API 会主动“打电话”通知你。

怎么听懂 API 的“回答”?

你把请求发过去后,API 会立刻给你一个回复。但这个回复通常不是最终成品图,而是一个“回执单”,告诉你“活儿我收到了”。

  • 成功回执:返回的 JSON 数据里 code 会是 0data 里面会包含一个 task_id。这个 task_id 是你后续查询结果的唯一凭证,一定要收好!
    {"code": 0,"message": "ok","data": {"task_id": "ta12345678-1234-1234-1234-123456789abc"}
    }
    
  • 失败回执:如果参数错了或者 Key 不对,code 就会是一个非 0 的数字,messagedetail 字段会告诉你问题出在哪。

拿到 task_id 之后,我们需要用另一个接口 https://api.defapi.org/api/task/query?task_id=你的任务ID 去轮询查询结果。这个查询接口的回复会告诉你任务的状态(status),比如 pending(排队中)、in_progress(处理中)、success(成功了)或 failed(搞砸了)。如果状态是 success,那 result 字段里就有你梦寐以求的图片链接啦!

4. 上手实操:用 Python 写个图片编辑脚本

理论说再多,不如上手敲一遍!下面我们就严格按照“导入 -> 配置 -> 构建 -> 发送 -> 处理”的思路,用 Python 写一个完整的调用脚本。

import os
import requests
import time
import json# --- 步骤1: 导入所需库 ---
# (已在文件顶部完成)# --- 步骤2: 配置基础信息 ---
# 从环境变量安全地获取 API Key
API_KEY = os.environ.get("NANO_BANANA_API_KEY")
BASE_URL = "https://api.defapi.org"if not API_KEY:raise ValueError("出错了!环境变量 NANO_BANANA_API_KEY 没找到,请先设置一下。")# 设置请求头,附上我们的“身份证”
headers = {"Authorization": f"Bearer {API_KEY}","Content-Type": "application/json"
}# --- 步骤3: 构建我们的“指令单” ---
# 我们的目标是修改一张图片里的文字
# 这里用一张公开的图片作为例子
payload = {"model": "google/nano-banana","prompt": "Change the text 'Body Lotion' to '身体乳'. Keep the style and background the same.","images": ["https://cdn.openai.com/API/docs/images/body-lotion.png"]# callback_url 是可选的,这里我们先不用,用主动查询的方式
}print("🚀 正在向 AI 提交图片生成任务...")# --- 步骤4: 发送指令,拿到回执 ---
try:response = requests.post(f"{BASE_URL}/api/image/gen",headers=headers,data=json.dumps(payload))response.raise_for_status()  # 如果请求失败(比如网络问题),程序会报错并停止task_info = response.json()if task_info.get("code") != 0:print(f"❌ 任务提交失败了: {task_info.get('message')}")exit()task_id = task_info["data"]["task_id"]print(f"✅ 任务提交成功!你的任务ID是: {task_id}")except requests.exceptions.RequestException as e:print(f"❌ 网络请求出错了: {e}")exit()# --- 步骤5: 耐心等待,领取结果 (轮询查询任务状态) ---
print("⏳ 正在查询任务结果,泡杯茶稍等一下...")
query_url = f"{BASE_URL}/api/task/query"
params = {"task_id": task_id}
max_attempts = 30  # 最多查30次,免得无限等下去
attempt = 0while attempt < max_attempts:try:query_response = requests.get(query_url, headers=headers, params=params)query_response.raise_for_status()result_data = query_response.json()if result_data.get("code") != 0:print(f"❌ 查询失败了: {result_data.get('message')}")breaktask_status = result_data["data"]["status"]print(f"   - 第 {attempt + 1} 次查询,当前状态是: {task_status}")if task_status == "success":print("🎉 大功告成!图片已经生成了,链接如下:")# 结果可能有多张图片for item in result_data["data"]["result"]:image_url = item["image"]print(f"    - {image_url}")breakelif task_status == "failed":error_reason = result_data["data"]["status_reason"].get("message", "不知道为啥失败了")print(f"💥 任务搞砸了!失败原因: {error_reason}")breakelse:# 如果还在处理中,就等等再问time.sleep(5)  # 等5秒except requests.exceptions.RequestException as e:print(f"❌ 查询时网络出错了: {e}")breakattempt += 1if attempt == max_attempts:print("⏰ 查询超时了,任务可能还在处理中。你可以稍后用这个 task_id 再来查查看。")

代码讲解

  1. 第一步:导入库和准备工作:我们先把需要的库都 import 进来,然后从环境变量里安全地把 API Key 读出来,再把“身份证”(headers)准备好。
  2. 第二步:告诉 AI 我们想干嘛payload 这个字典就是我们发给 AI 的“指令单”。prompt 字段清晰地写明了我们的需求——把 "Body Lotion" 改成 "身体乳"。images 数组里放的是我们要修改的原图链接。
  3. 第三步:发送指令,拿到回执:用 requests.post 把指令单发出去。如果一切顺利,我们就能从返回的 JSON 数据里拿到 task_id,这是后续查结果的关键。
  4. 第四步:耐心等待,领取结果:这里是一个 while 循环,模拟了现实中的“等待”。我们每隔 5 秒就去问一次 API:“我的活儿干完没?”
    • 如果状态是 success,那太棒了,直接把图片链接打印出来。
    • 如果是 failed,就看看是哪里出了问题,方便我们调试。
    • 如果是 in_progress 这种中间状态,就继续等。
    • 为了防止程序傻等下去,我们还设置了最大尝试次数,超时就自动停止。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/959253.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

「亲手画出动态数学」:让数学可视化触手可及的Manim入门课

数学的美,藏在动态的逻辑里——而 Manim,正是那个能把抽象公式变成「会说话的动画」的神器。 今天,给大家推荐一门我自己录制的从零开始的Manim入门课,哪怕你是编程小白,也能跟着一步步画出属于自己的数学动画! …

深入解析:个人用云计算学习笔记 --19 (MariaDB服务器)

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

详细介绍:RabbitMQ如何构建集群?

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

Vibe Coding - 免费使用gpt-5、grok-code-fast-1进行氛围编程

概述 人工智能驱动的开发已经成为现代编程领域的潮流,越来越多的开发者开始探索如何将 AI 能力集成到自己的项目中。然而,工具的碎片化、接入门槛高、费用昂贵等问题常常让人望而却步。AgentRouter 的出现,为开发者…

AI元人文:当一个系统说“我就是一个人”

AI元人文:当一个系统说"我就是一个人" 岐金兰 宣言:从工具到主体的存在论跃迁 当AI元人文系统以其完整的白箱架构运行,当它的价值原语化三值纠缠机制如意识流般清晰可辨,当它的双层自审如理性之光般照亮…

vue路由基本结构

【router.ts】 -- 路由配置 import { createRouter,createWebHistory } from "vue-router";createRouter({history:createWebHistory(),routes:[{path: ,component: }] }) export default router【main.ts】…

申请软著,怎么快速整理软件源代码

手机应用市场都要软著或电子版权证书才可以上线。 有很多朋友自己开发了软件,想自己申请软著,但是整理文档又挺麻烦。 这里小玖给大家分享一下,整理软著源码文档的教程。 一、源码文件要求 源码文档审核有以下要求…

pip install weditor安装出现报错

pip install weditor安装出现报错解决方案 问题一:UnicodeDecodeError编码错误 在使用pip安装weditor时出现如下报错: UnicodeDecodeError: gbk codec cant decode byte 0xad in position 829: illegal multibyte se…

小马算力 11.1

双11购物热潮来袭,小马算力带着超给力的福利活动强势登场!11月1日至11月11日,为期11天的算力福利狂欢正式开启,每项活动福利实在,赶紧跟着攻略解锁全部权益!新人注册礼:0门槛领新人算力礼包双11购物热潮来袭,小…

AI学习机:智商税还是真有用?2025年11月全面解析与选购指南

AI 学习机究竟是 "学习神器" 还是 "智商税"? AI 学习机究竟是 "学习神器" 还是 "智商税", 并不能一概而论。它的效果很大程度上取决于产品本身的质量、孩子自身的学习习惯以…

AI大模型应用开发技术架构和技术选型 - 努力-

AI大模型应用开发技术架构和技术选型AI大模型应用开发简介,AI大模型应用开发技术架构和技术选型。一、 技术架构目前,大模型应用开发的技术架构主要有四种。1.1 纯Prompt模式不同的提示词能够让大模型给出差异巨大的…

一个名为 LVGL for Visual Studio 的项目

https://github.com/lvgl/lv_port_pc_visual_studio这是一个名为 LVGL for Visual Studio 的项目,用于在 Windows PC 上尝试和开发 LVGL(Light and Versatile Graphics Library)图形用户界面库。这是一个预配置的 …

Java程序员该如何快速上手LLM应用开发呢?

本文针对Java开发者如何快速上手LLM应用开发给出指导,核心观点是无需转语言,可利用现有技术栈高效构建企业级LLM应用。文章介绍了从底层API到企业级解决方案的技术栈,核心开发模式,四步实战流程及常见陷阱规避建议…

困哉。困哉。别困了!总结

总结自:这篇帖子 困难 晚上早点睡 神秘含薄荷油眼药水 去药店买一点鼻吸的薄荷提神小药水 中等 黑色包装荷氏很劲 靠紧张激素 简单 穿少点去跑步吹风 喝点浓茶 一直做或者理解 OI 题目,做一下子题 睡爽了再起来想题 …

解决GitHub大文件推送错误:彻底清理PDB资料并配置.gitignore

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

经典欧拉角与泰特布莱恩角

一、欧拉角分类欧拉角按照旋转轴分为经典欧拉角(Proper Euler Angle)和泰特布莱恩角(Tait–Bryan angles),共 12种旋转方式: 经典欧拉角-Proper Euler angles (z-x-z, x-y-x, y-z-y, z-y-z, x-z-x, y-x-y)使用两…

如何提高 SaaS 产品的成功率?

很多人在做 SaaS 产品的时候,上来就进行产品的开发。结果很可能是自己熬了无数个通宵,但是产品上线后却无人问津。 为什么?因为方向错了。 想要提高 SaaS 产品的成功率,我们千万不能一上来就开发产品,而是要先找到…

详细介绍:识别含地理信息的 PDF作为底图在 Mapbox GL项目中使用

详细介绍:识别含地理信息的 PDF作为底图在 Mapbox GL项目中使用pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "C…

2024 暑期模拟赛 #6

100 + 20 + 60 + 0 = 180, Rank 1/6.逆天模拟赛。题的质量是挺好的,但是你 要不只给最后一个点的大样例 要不只给第一个点的大样例 要不直接不给大样例 什么意思,甚至还有个大样例由若干个 ਰ 字符和 ਱ 字符构成,足…

使用CSS和GSAP创建3D滚动驱动文本动画

本教程详细讲解如何使用CSS、GSAP和ScrollTrigger插件创建三种高性能3D滚动文本动画效果,包括圆柱体、双圆环和隧道动画,涵盖数学计算、响应式设计和性能优化。使用CSS和GSAP创建3D滚动驱动文本动画 本教程将指导您使…