🍌 Nano Banana

基于 Gemini 2.5 Flash Image 的AI图像处理服务

例如:把背景改成海滩、增强图片亮度、添加滤镜效果等
⚠️ 注意:照片动画功能需要 Veo 视频生成模型支持。目前该功能可能不可用,因为您的 API 密钥可能没有访问 Veo 模型的权限。如需使用此功能,请联系 Google 获取 Veo API 访问权限。
🔧 高级选项 (基于Veo-3官方文档)
Preview版本质量最高,Fast版本速度最快,Stable版本最稳定
用于排除不希望在视频中出现的内容

📱 微信小程序集成说明

🎉 新增功能:本服务现已支持微信小程序登录和积分系统!用户可以通过微信登录,充值积分,使用积分调用AI图片处理服务。

重要提醒: 所有AI图片处理功能现在都需要用户登录并消耗积分。请确保在调用API前完成用户认证。

💰 积分系统规则

积分获取方式

  • 新用户注册奖励:100积分(自动发放)
  • 微信支付充值:1元人民币 = 10积分

API调用消费

API功能积分消费说明
老照片修复10积分基础修复功能
AI换装20积分复杂的风格转换
自定义处理15积分灵活的图片处理
照片动画30积分最高级的视频生成

积分特性

  • ✅ API调用成功后才扣除积分
  • ✅ API调用失败不会扣除积分
  • ✅ 积分不足时会拒绝API调用(返回402状态码)
  • ✅ 完整的交易记录和使用统计

🔑 用户认证流程

1. 微信小程序登录

// 小程序端代码
wx.login({
  success: (res) => {
    if (res.code) {
      wx.request({
        url: 'https://your-domain.com/api/wechat/login',
        method: 'POST',
        data: { code: res.code },
        success: (loginRes) => {
          // 保存用户token
          wx.setStorageSync('userToken', loginRes.data.token);
          wx.setStorageSync('userInfo', loginRes.data.user);
          console.log('积分余额:', loginRes.data.user.points);
        }
      });
    }
  }
});

2. 使用AI服务

// 调用AI API时需要携带token
wx.uploadFile({
  url: 'https://your-domain.com/api/image/outfit-change',
  filePath: imagePath,
  name: 'image',
  header: {
    'Authorization': 'Bearer ' + wx.getStorageSync('userToken')
  },
  formData: { style: '商务正装' },
  success: (res) => {
    const data = JSON.parse(res.data);
    console.log('剩余积分:', data.points.remaining);
    console.log('处理结果:', data.data.imageUrl);
  }
});

💳 充值和支付

创建支付订单

// 创建充值订单
wx.request({
  url: 'https://your-domain.com/api/wechat/payment/create',
  method: 'POST',
  header: {
    'Authorization': 'Bearer ' + wx.getStorageSync('userToken')
  },
  data: {
    amount: 10.0,  // 充值10元
    description: '购买100积分'
  },
  success: (res) => {
    if (res.data.success) {
      // 调起微信支付
      wx.requestPayment({
        ...res.data.paymentParams,
        success: () => {
          console.log('充值成功');
          // 刷新用户积分
          refreshUserInfo();
        }
      });
    }
  }
});

查询用户信息

// 获取用户信息和积分余额
wx.request({
  url: 'https://your-domain.com/api/wechat/user/info',
  method: 'GET',
  header: {
    'Authorization': 'Bearer ' + wx.getStorageSync('userToken')
  },
  success: (res) => {
    console.log('用户信息:', res.data.data);
    console.log('积分余额:', res.data.data.points);
  }
});

🌟 核心API接口详解

1. 用户登录 API

POST /api/wechat/login

功能:通过微信小程序授权码进行用户登录,获取访问令牌

请求参数:
参数名类型是否必须说明
codeString微信小程序wx.login()获取的授权码
请求示例:
{
  "code": "061gHGll2A3t8K4Jfnol2jGjEp3gHGlA"
}
成功响应:
{
  "success": true,
  "user": {
    "id": "user_1736250123_abcdefg",
    "openid": "oABC123def456ghi789jkl",
    "points": 100,
    "nickname": "",
    "avatar": ""
  },
  "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
}
错误响应:
{
  "error": "登录失败",
  "message": "WeChat login error: invalid code",
  "code": "LOGIN_ERROR"
}

2. 创建充值订单 API

POST /api/wechat/payment/create

功能:创建微信支付订单,用户充值积分

请求头:
Authorization: Bearer {用户token}
Content-Type: application/json
请求参数:
参数名类型是否必须说明
amountNumber充值金额(元),必须大于0
descriptionString订单描述,默认"购买积分"
请求示例:
{
  "amount": 10.0,
  "description": "购买100积分"
}
成功响应:
{
  "success": true,
  "orderId": "order_1736250123_abcdefg",
  "paymentParams": {
    "appId": "wx765b20f090a4a0f9",
    "timeStamp": "1736250123",
    "nonceStr": "abc123def456",
    "package": "prepay_id=wx123456789012345678901234567890",
    "signType": "MD5",
    "paySign": "C380BEC2BFD727A4B6845133519F3AD6"
  },
  "amount": 10.0
}
使用说明:
  • 获取paymentParams后,直接传入wx.requestPayment()调起支付
  • 支付成功后积分会自动充值到账
  • 充值比例:1元 = 10积分
  • 支付回调由服务器自动处理,无需前端关心
错误响应:
{
  "error": "创建订单失败",
  "message": "WeChat payment not configured",
  "code": "CREATE_ORDER_ERROR"
}

📊 积分查询接口

GET /api/wechat/user/info

GET /api/wechat/user/info

功能:获取用户完整信息和当前积分余额

认证:需要Bearer Token

请求示例:
GET /api/wechat/user/info
Authorization: Bearer your_token_here
成功响应:
{
  "success": true,
  "data": {
    "id": "user_1234567890_abc123def",
    "openid": "wx_openid_example_123456",
    "nickname": "微信用户昵称",
    "avatar": "https://wx.qlogo.cn/mmopen/avatar.jpg",
    "points": 150,
    "created_at": "2024-01-15T08:30:00.000Z"
  }
}
使用场景:
  • 用户进入小程序时获取基本信息
  • 定期刷新积分余额显示
  • 验证用户登录状态

GET /api/wechat/points/config

GET /api/wechat/points/config

功能:获取积分系统配置信息

认证:不需要

请求示例:
GET /api/wechat/points/config
成功响应:
{
  "success": true,
  "data": {
    "apiCosts": {
      "restore_photo": 10,    // 老照片修复积分消耗
      "outfit_change": 20,    // 换装功能积分消耗
      "custom": 15,           // 自定义处理积分消耗
      "animate": 30           // 照片动画积分消耗
    },
    "exchangeRate": 10,       // 充值比例:1元 = 10积分
    "newUserBonus": 100       // 新用户注册赠送积分
  }
}
使用场景:
  • 显示各功能的积分价格
  • 计算充值所需金额
  • 用户使用前的积分预算提示

GET /api/wechat/user/transactions

GET /api/wechat/user/transactions

功能:获取用户积分交易记录

认证:需要Bearer Token

请求参数:
  • limit (可选): 返回记录数量,默认50
请求示例:
GET /api/wechat/user/transactions?limit=20
Authorization: Bearer your_token_here
成功响应:
{
  "success": true,
  "data": {
    "transactions": [
      {
        "id": "trans_123456789",
        "type": "earn",              // earn=获得积分, spend=消费积分
        "amount": 100,
        "description": "微信支付充值",
        "wechat_order_id": "wx_order_123",
        "created_at": "2024-01-15T10:30:00.000Z"
      },
      {
        "id": "trans_987654321",
        "type": "spend",
        "amount": 20,
        "description": "换装功能 API调用",
        "api_call_id": "api_call_456",
        "created_at": "2024-01-15T09:15:00.000Z"
      }
    ],
    "total": 25
  }
}

GET /api/wechat/user/api-usage

GET /api/wechat/user/api-usage

功能:获取用户API使用记录

认证:需要Bearer Token

请求参数:
  • limit (可选): 返回记录数量,默认50
请求示例:
GET /api/wechat/user/api-usage?limit=10
Authorization: Bearer your_token_here
成功响应:
{
  "success": true,
  "data": {
    "usage": [
      {
        "id": "usage_123456789",
        "api_type": "outfit_change",
        "points_cost": 20,
        "request_id": "req_789012345",
        "success": true,
        "created_at": "2024-01-15T09:15:00.000Z"
      },
      {
        "id": "usage_987654321",
        "api_type": "restore_photo",
        "points_cost": 10,
        "request_id": "req_456789012",
        "success": true,
        "created_at": "2024-01-15T08:45:00.000Z"
      }
    ],
    "total": 15
  }
}

💡 积分返回说明

所有图像处理API都会返回积分信息:

标准积分返回格式:
{
  "success": true,
  "message": "处理完成",
  "data": {
    // ... 处理结果数据
  },
  "points": {
    "deducted": 20,        // 本次扣除的积分
    "remaining": 130       // 扣除后的剩余积分
  }
}
适用的API接口:
  • POST /api/image/restore (扣除10积分)
  • POST /api/image/outfit (扣除20积分)
  • POST /api/image/custom (扣除15积分)
  • POST /api/image/animate (扣除30积分)
积分不足错误:
{
  "error": "积分不足",
  "code": "INSUFFICIENT_POINTS",
  "message": "当前积分:5,需要积分:20"
}

其他数据接口一览

接口方法认证说明
/api/wechat/user/infoGET需要获取用户信息和积分余额
/api/wechat/user/transactionsGET需要获取用户交易记录
/api/wechat/user/api-usageGET需要获取API使用记录
/api/wechat/points/configGET不需要获取积分配置信息

通用错误处理

  • 400 Bad Request:请求参数错误
  • 401 Unauthorized:未登录或token过期
  • 402 Payment Required:积分不足
  • 500 Internal Server Error:服务器内部错误

⚙️ 配置要求

微信小程序配置

  • AppID:wx765b20f090a4a0f9(已配置)
  • 服务器域名:需要在小程序后台配置request合法域名
  • 支付功能:需要开通微信支付商户号

开发调试

  • 开发工具中启用"不校验合法域名"选项
  • 使用真机调试测试支付功能
  • 生产环境必须使用HTTPS

🚀 集成示例

完整的小程序集成代码

// app.js - 全局登录处理
App({
  globalData: {
    userInfo: null,
    token: null,
    apiBase: 'https://your-domain.com/api'
  },

  onLaunch() {
    this.login();
  },

  // 用户登录
  async login() {
    return new Promise((resolve, reject) => {
      wx.login({
        success: (res) => {
          if (res.code) {
            wx.request({
              url: this.globalData.apiBase + '/wechat/login',
              method: 'POST',
              data: { code: res.code },
              success: (loginRes) => {
                if (loginRes.data.success) {
                  this.globalData.token = loginRes.data.token;
                  this.globalData.userInfo = loginRes.data.user;
                  wx.setStorageSync('token', loginRes.data.token);
                  wx.setStorageSync('userInfo', loginRes.data.user);
                  resolve(loginRes.data);
                } else {
                  reject(loginRes.data);
                }
              },
              fail: reject
            });
          } else {
            reject(res);
          }
        },
        fail: reject
      });
    });
  },

  // 检查积分余额
  async checkPoints(required) {
    const userInfo = wx.getStorageSync('userInfo') || this.globalData.userInfo;
    if (!userInfo || userInfo.points < required) {
      wx.showModal({
        title: '积分不足',
        content: `操作需要${required}积分,您当前有${userInfo?.points || 0}积分。是否前往充值?`,
        success: (res) => {
          if (res.confirm) {
            // 跳转到充值页面
            wx.navigateTo({ url: '/pages/recharge/recharge' });
          }
        }
      });
      return false;
    }
    return true;
  },

  // 使用AI服务
  async useAI(apiPath, filePath, params = {}) {
    const token = wx.getStorageSync('token') || this.globalData.token;
    if (!token) {
      await this.login();
    }

    return new Promise((resolve, reject) => {
      wx.uploadFile({
        url: this.globalData.apiBase + apiPath,
        filePath: filePath,
        name: 'image',
        header: {
          'Authorization': `Bearer ${token}`
        },
        formData: params,
        success: (res) => {
          try {
            const data = JSON.parse(res.data);
            if (data.success) {
              // 更新用户积分信息
              if (data.points) {
                const userInfo = wx.getStorageSync('userInfo');
                userInfo.points = data.points.remaining;
                wx.setStorageSync('userInfo', userInfo);
                this.globalData.userInfo = userInfo;
              }
              resolve(data);
            } else {
              reject(data);
            }
          } catch (e) {
            reject({ message: '解析响应失败', error: e });
          }
        },
        fail: reject
      });
    });
  }
});

🔧 API接口文档

Nano Banana 提供四个场景化的AI图像处理接口,基于 Gemini 2.5 Flash Image Preview 模型。

⚠️ 重要更新: 所有AI图片处理API现在都需要用户认证和积分消费。请在请求头中携带 Authorization: Bearer {token} 并确保有足够的积分余额。

🔐 用户认证与支付API

使用AI图片处理功能前,用户需要先登录获取token,如积分不足需要充值。

微信小程序登录

POST https://banana.8miao.cn/api/wechat/login

功能说明:通过微信小程序授权码进行用户登录,新用户自动注册并获得100积分奖励。

请求参数
参数名类型是否必须说明
codeString微信小程序wx.login()获取的授权码
响应格式
{
  "success": true,
  "user": {
    "id": "user_1736250123_abcdefg",
    "openid": "oABC123def456ghi789jkl",
    "points": 100,
    "nickname": "",
    "avatar": ""
  },
  "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
}

创建充值订单

POST https://banana.8miao.cn/api/wechat/payment/create

功能说明:创建微信支付订单,用户充值积分。充值比例:1元 = 10积分。

请求头
Authorization: Bearer {用户token}
Content-Type: application/json
请求参数
参数名类型是否必须说明
amountNumber充值金额(元),必须大于0
descriptionString订单描述,默认"购买积分"
响应格式
{
  "success": true,
  "orderId": "order_1736250123_abcdefg",
  "paymentParams": {
    "appId": "wx765b20f090a4a0f9",
    "timeStamp": "1736250123",
    "nonceStr": "abc123def456",
    "package": "prepay_id=wx123456789012345678901234567890",
    "signType": "MD5",
    "paySign": "C380BEC2BFD727A4B6845133519F3AD6"
  },
  "amount": 10.0
}
使用方法
  • 获取响应中的paymentParams,直接传入wx.requestPayment()
  • 支付成功后积分自动充值,无需手动处理回调
  • 可通过 /api/wechat/user/info 查询最新积分余额

📸 1. 老照片修复 API

接口地址

POST https://banana.8miao.cn/api/image/restore

功能说明

使用AI技术修复老旧、破损的照片,提升清晰度,修复划痕和污渍,调整亮度和对比度,保持原有历史风格。

请求头

Authorization: Bearer {用户token}
Content-Type: multipart/form-data

请求参数

参数名类型是否必须说明
imageFile需要修复的老照片文件

积分消费

💰 消费:10积分 | 仅在处理成功后扣除

文件要求

  • 支持格式:JPG、JPEG、PNG、GIF、WebP、BMP
  • 文件大小:最大10MB
  • 建议分辨率:不超过2048x2048像素以获得最佳处理效果

响应格式

{
  "success": true,
  "message": "老照片修复完成",
  "requestId": "req_1704123456",
  "processingTime": "3245ms",
  "data": {
    "originalImage": "upload_123.jpg",
    "restoredImage": "restored_123.jpg",
    "imageUrl": "/uploads/restored_123.jpg"
  },
  "points": {
    "deducted": 10,
    "remaining": 170
  }
}

👗 2. AI换装 API

接口地址

POST https://banana.8miao.cn/api/image/outfit-change

功能说明

为人物图片更换服装风格,保持人物面部和体型特征不变,支持风格描述和参考图片两种方式。

请求头

Authorization: Bearer {用户token}
Content-Type: multipart/form-data

请求参数

参数名类型是否必须说明
imageFile包含人物的原始图片
styleString二选一服装风格描述
referenceFile二选一参考服装的图片文件

积分消费

💰 消费:20积分 | 仅在处理成功后扣除

风格选项

  • 预设风格:商务、休闲、运动、正装、时尚、复古、街头、优雅、韩式、日式等
  • 自定义描述:如"黑色西装配红色领带"、"夏季连衣裙"等
  • 参考图片:上传包含目标服装风格的图片

响应格式

{
  "success": true,
  "message": "换装完成",
  "requestId": "req_1704123457",
  "processingTime": "5678ms",
  "data": {
    "originalImage": "upload_124.jpg",
    "changedImage": "outfit_124.jpg",
    "imageUrl": "/uploads/outfit_124.jpg",
    "style": "商务正装",
    "useReference": false,
    "referenceImage": null
  },
  "points": {
    "deducted": 20,
    "remaining": 150
  }
}

🎨 3. 自定义处理 API

接口地址

POST https://banana.8miao.cn/api/image/custom

功能说明

根据用户自定义指令对图片进行AI处理,支持背景更换、滤镜效果、风格转换等多种操作。

请求头

Authorization: Bearer {用户token}
Content-Type: multipart/form-data

请求参数

参数名类型是否必须说明
imageFile需要处理的原始图片
promptString处理指令描述

积分消费

💰 消费:15积分 | 仅在处理成功后扣除

指令示例

  • "把背景改成海滩日落风景"
  • "将图片转换为油画风格"
  • "增强图片亮度和对比度"
  • "添加复古滤镜效果"
  • "移除背景,保留主体"

响应格式

{
  "success": true,
  "message": "自定义图片处理完成",
  "requestId": "req_1704123458",
  "processingTime": "4567ms",
  "data": {
    "originalImage": "upload_125.jpg",
    "processedImage": "custom_125.jpg",
    "imageUrl": "/uploads/custom_125.jpg",
    "prompt": "把背景改成海滩日落风景"
  },
  "points": {
    "deducted": 15,
    "remaining": 135
  }
}

🎬 4. 照片动画 API

接口地址

POST https://banana.8miao.cn/api/image/animate

功能说明

使用Veo 3将静态照片转换为动态视频,支持人像动画、场景动画和自定义动画效果。

请求头

Authorization: Bearer {用户token}
Content-Type: multipart/form-data

请求参数

参数名类型是否必须说明
imageFile需要制作动画的图片文件
animationTypeString动画类型:general/portrait/scene/custom,默认general
expressionTypeString表情类型(portrait时使用):natural/smile/blink/nod/speak
sceneTypeString场景类型(scene时使用):gentle/dynamic/nature/urban/vintage
motionPromptString条件必须自定义动作描述(custom时必须)
modelTypeString模型版本:preview/fast/stable,默认preview
aspectRatioString宽高比:16:9/9:16,默认16:9
negativePromptString负面提示词,排除不希望的内容

积分消费

💰 消费:30积分 | 仅在处理成功后扣除

动画类型说明

  • general:通用动画效果,适合各种图片
  • portrait:人像动画,专门优化面部表情和动作
  • scene:场景动画,增强环境氛围和景物动态
  • custom:自定义动画,根据motionPrompt生成特定效果

响应格式

{
  "success": true,
  "message": "照片动画生成完成",
  "requestId": "req_1704123459",
  "processingTime": "15678ms",
  "data": {
    "originalImage": "upload_126.jpg",
    "animatedVideo": "animated_126_photo.mp4",
    "videoUrl": "/uploads/animated_126_photo.mp4",
    "animationType": "portrait",
    "duration": "3s",
    "resolution": "1024x576",
    "mimeType": "video/mp4"
  },
  "points": {
    "deducted": 30,
    "remaining": 105
  }
}

📁 图片上传下载说明

上传方式

  • Content-Type:multipart/form-data
  • 编码方式:表单数据编码
  • 字段名:image(主图片)、reference(参考图片)

下载方式

  • 访问地址:https://banana.8miao.cn/uploads/{filename}
  • 文件命名:{功能}_{时间戳}_{原文件名}.png
  • 浏览器访问:直接在浏览器中打开图片URL
  • 程序下载:通过HTTP GET请求获取图片数据

错误响应

{
  "success": false,
  "message": "具体错误信息",
  "error": "错误代码或详细描述"
}

⚙️ 使用注意事项

  • 🔐 用户认证:所有API都需要携带有效的Authorization头
  • 💰 积分消费:调用前确保有足够积分,成功后才扣除
  • 📱 微信登录:使用微信小程序code换取访问token
  • 💳 积分充值:通过微信支付充值,1元=10积分
  • 📊 数据记录:所有交易和API使用都有完整记录
  • 所有接口都需要使用POST方法,Content-Type为multipart/form-data
  • 图片文件大小限制为10MB,建议2MB以内以获得最佳响应速度
  • 处理时间通常为5-30秒,照片动画需要20-60秒
  • 生成的图片/视频会保存在服务器,建议及时下载
  • API基于Gemini 2.5 Flash Image模型,具有内容安全过滤机制
  • 对于人物图片,建议使用清晰、正面或半身照以获得最佳效果

错误状态码

状态码错误类型说明
401Unauthorized未登录或token过期,需要重新登录
402Payment Required积分不足,需要充值后重试
429Too Many RequestsAPI配额限制,请稍后重试
502Bad GatewayAI服务错误,请稍后重试