|

Nano Banana Pro 如何强制输出 PNG 格式:3 种方法解决图片格式问题

作者注:详解 Nano Banana Pro API 图片输出格式的控制方法,通过 base64 解码保存为 PNG,附完整代码示例

使用 Nano Banana Pro API 生成图片时,很多开发者会遇到一个问题:如何强制输出 PNG 而非 JPG 格式? 本文将详细解答这个问题,并提供多种实现方案。

核心价值: 读完本文,你将掌握 Nano Banana Pro 图片格式的控制原理,学会通过 base64 解码保存任意格式的图片。

nano-banana-pro-image-output-format-png-jpg-control 图示


Nano Banana Pro 图片格式输出核心要点

要点 说明 价值
API 返回 base64 inlineData 中包含图片的 base64 编码 原始数据格式中立
保存时可指定格式 解码 base64 后可保存为 PNG/JPG/WebP 开发者完全控制输出
官方未提供格式参数 Nano Banana Pro 无 output_mime_type 参数 需在客户端处理
PNG 保留透明通道 适合需要透明背景的设计场景 质量无损压缩
JPG 文件更小 适合照片类图片和网络传输 压缩比高

为什么官方没有提供格式控制参数?

查阅 Google AI 官方文档 ai.google.dev/gemini-api/docs/image-generation 可以发现,Nano Banana Pro(基于 Gemini 的原生图像生成)并没有像 Imagen 3 那样提供 output_mime_type 参数。

这是因为 Nano Banana Pro 的 API 响应设计与传统图像生成 API 不同:

  • Imagen 3: 专用图像生成模型,支持 output_mime_type='image/jpeg''image/png' 参数
  • Nano Banana Pro: 多模态模型的图像生成能力,返回的是 base64 编码的原始图像数据

因此,Nano Banana Pro 的图片格式控制需要在客户端(保存时)处理,而非在 API 请求时指定。

inlineData 响应结构解析

Nano Banana Pro API 的响应结构如下:

{
  "candidates": [{
    "content": {
      "parts": [
        {
          "inlineData": {
            "mimeType": "image/png",
            "data": "iVBORw0KGgoAAAANSUhEUgAA..."
          }
        }
      ]
    }
  }]
}

关键字段说明:

字段 说明
inlineData.mimeType 图片的 MIME 类型,通常是 image/png
inlineData.data 图片的 base64 编码字符串

由于 data 字段是 base64 编码的原始图像数据,你可以在解码后保存为任意格式。

nano-banana-pro-image-output-format-png-jpg-control 图示


Nano Banana Pro 图片格式控制快速上手

方法一:直接保存为 PNG(推荐)

最简单的方法是在保存时直接指定 .png 扩展名:

import google.generativeai as genai
import base64

# 配置 API易 接入
genai.configure(
    api_key="YOUR_API_KEY",
    transport="rest",
    client_options={"api_endpoint": "https://vip.apiyi.com"}
)

# 生成图片
model = genai.GenerativeModel("nano-banana-pro")
response = model.generate_content("一只可爱的橘猫,白色背景")

# 提取 base64 数据并保存为 PNG
for part in response.candidates[0].content.parts:
    if hasattr(part, 'inline_data') and part.inline_data:
        image_data = base64.b64decode(part.inline_data.data)
        with open("output.png", "wb") as f:
            f.write(image_data)
        print("图片已保存为 PNG 格式")

查看完整的多格式保存代码
import google.generativeai as genai
import base64
from PIL import Image
import io
from typing import Literal

class NanoBananaImageSaver:
    """
    Nano Banana Pro 图片格式转换工具
    支持 PNG、JPG、WebP 等多种格式
    """

    def __init__(self, api_key: str):
        genai.configure(
            api_key=api_key,
            transport="rest",
            client_options={"api_endpoint": "https://vip.apiyi.com"}
        )
        self.model = genai.GenerativeModel("nano-banana-pro")

    def generate_and_save(
        self,
        prompt: str,
        output_path: str,
        format: Literal["PNG", "JPEG", "WEBP"] = "PNG",
        quality: int = 95
    ) -> bool:
        """
        生成图片并保存为指定格式

        Args:
            prompt: 生成提示词
            output_path: 输出文件路径
            format: 输出格式 (PNG/JPEG/WEBP)
            quality: 压缩质量 (仅对 JPEG/WEBP 有效, 1-100)
        """
        try:
            response = self.model.generate_content(prompt)

            for part in response.candidates[0].content.parts:
                if hasattr(part, 'inline_data') and part.inline_data:
                    # 解码 base64
                    image_data = base64.b64decode(part.inline_data.data)

                    # 使用 PIL 打开并转换格式
                    image = Image.open(io.BytesIO(image_data))

                    # 处理透明通道 (PNG → JPEG 需要)
                    if format == "JPEG" and image.mode == "RGBA":
                        # 创建白色背景
                        background = Image.new("RGB", image.size, (255, 255, 255))
                        background.paste(image, mask=image.split()[3])
                        image = background

                    # 保存为指定格式
                    save_params = {}
                    if format in ["JPEG", "WEBP"]:
                        save_params["quality"] = quality

                    image.save(output_path, format=format, **save_params)
                    print(f"图片已保存: {output_path} (格式: {format})")
                    return True

            return False
        except Exception as e:
            print(f"保存失败: {e}")
            return False


# 使用示例
if __name__ == "__main__":
    saver = NanoBananaImageSaver("YOUR_API_KEY")

    # 保存为 PNG (无损,保留透明通道)
    saver.generate_and_save(
        prompt="现代建筑外观,透明背景",
        output_path="building.png",
        format="PNG"
    )

    # 保存为 JPEG (有损压缩,文件更小)
    saver.generate_and_save(
        prompt="风景照片,落日海滩",
        output_path="sunset.jpg",
        format="JPEG",
        quality=85
    )

    # 保存为 WebP (现代格式,兼顾质量和体积)
    saver.generate_and_save(
        prompt="产品展示图",
        output_path="product.webp",
        format="WEBP",
        quality=90
    )

建议: 通过 API易 apiyi.com 获取 Nano Banana Pro API 访问权限。平台提供稳定的接入服务,价格仅为官网 2 折,支持批量调用。


Nano Banana Pro 图片格式方案对比

nano-banana-pro-image-output-format-png-jpg-control 图示

格式 压缩类型 透明通道 文件大小 适用场景
PNG 无损压缩 ✅ 支持 较大 设计素材、图标、需要透明背景
JPEG 有损压缩 ❌ 不支持 较小 照片、风景图、网络传输
WebP 无损/有损可选 ✅ 支持 最小 现代网页、移动端应用

各格式详细说明

PNG 格式适用场景:

  • 需要保留透明背景的设计素材
  • 对图像质量要求极高的场景
  • 需要反复编辑的中间素材
  • 图标、Logo 等需要锐利边缘的图像

JPEG 格式适用场景:

  • 照片类图像(风景、人像、产品实拍)
  • 网络传输需要控制文件大小
  • 社交媒体分享
  • 不需要透明背景的一般图像

WebP 格式适用场景:

  • 现代 Web 应用(浏览器支持度高)
  • 移动端 App 内嵌图片
  • 需要同时兼顾质量和体积的场景
  • 支持动画的场景(可替代 GIF)

Nano Banana Pro 图片格式转换进阶用法

Node.js 版本实现

const { GoogleGenerativeAI } = require("@google/generative-ai");
const fs = require("fs");
const sharp = require("sharp");

async function generateAndSave(prompt, outputPath, format = "png") {
  const genAI = new GoogleGenerativeAI("YOUR_API_KEY");
  const model = genAI.getGenerativeModel({ model: "nano-banana-pro" });

  const result = await model.generateContent(prompt);
  const response = await result.response;

  for (const part of response.candidates[0].content.parts) {
    if (part.inlineData) {
      const buffer = Buffer.from(part.inlineData.data, "base64");

      // 使用 sharp 转换格式
      let sharpInstance = sharp(buffer);

      switch (format.toLowerCase()) {
        case "png":
          sharpInstance = sharpInstance.png();
          break;
        case "jpeg":
        case "jpg":
          sharpInstance = sharpInstance.jpeg({ quality: 85 });
          break;
        case "webp":
          sharpInstance = sharpInstance.webp({ quality: 90 });
          break;
      }

      await sharpInstance.toFile(outputPath);
      console.log(`图片已保存: ${outputPath}`);
    }
  }
}

// 强制输出 PNG
generateAndSave("可爱的卡通角色", "character.png", "png");

cURL 命令行版本

# 调用 API 并保存为 PNG
curl -X POST "https://vip.apiyi.com/v1/models/nano-banana-pro:generateContent" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -d '{"contents":[{"parts":[{"text":"一只可爱的橘猫"}]}]}' \
  | jq -r '.candidates[0].content.parts[] | select(.inlineData) | .inlineData.data' \
  | base64 --decode > output.png

echo "图片已保存为 output.png"

常见问题

Q1: 为什么我保存的图片打不开?

最常见的原因是 base64 解码不正确。确保:

  1. 提取的是 inline_data.data 字段的完整内容
  2. 使用正确的 base64 解码方法
  3. 以二进制模式写入文件("wb" 而非 "w"

如果问题仍然存在,检查 API 返回的 mimeType 字段,确认图片类型。

Q2: PNG 和 JPEG 哪个更适合 AI 生成的图片?

取决于用途:

  • PNG: 适合需要后续编辑、透明背景、或对质量要求极高的场景
  • JPEG: 适合直接发布、网络传输、或需要控制文件大小的场景

如果你不确定,建议先保存为 PNG(无损),需要时再转换为其他格式。

Q3: 如何快速开始测试 Nano Banana Pro?

推荐使用 API易 平台进行测试:

  1. 访问 API易 apiyi.com 注册账号
  2. 获取 Nano Banana Pro API Key
  3. 使用本文的代码示例,价格仅为官网 2 折
  4. 在线体验: imagen.apiyi.com 可直接测试出图效果

总结

Nano Banana Pro 图片格式控制的核心要点:

  1. API 返回 base64 编码: inlineData.data 是格式中立的原始数据,保存时可自由选择格式
  2. 官方未提供格式参数: 与 Imagen 3 不同,Nano Banana Pro 不支持 output_mime_type 参数
  3. 客户端控制输出格式: 通过 base64 解码后使用 PIL/sharp 等工具保存为 PNG/JPEG/WebP
  4. 根据场景选择格式: PNG 适合设计素材,JPEG 适合照片,WebP 适合现代 Web 应用

理解了 base64 解码原理后,你可以完全控制 Nano Banana Pro 生成图片的输出格式。

推荐通过 API易 apiyi.com 获取 Nano Banana Pro API 访问权限,平台提供稳定服务,价格仅为官网 2 折,支持批量生成。


📚 参考资料

⚠️ 链接格式说明: 所有外链使用 资料名: domain.com 格式,方便复制但不可点击跳转,避免 SEO 权重流失。

  1. Google AI 图像生成文档: 官方 API 最佳实践指南

    • 链接: ai.google.dev/gemini-api/docs/image-generation
    • 说明: 包含 inlineData 响应结构和代码示例
  2. Pillow (PIL) 文档: Python 图像处理库

    • 链接: pillow.readthedocs.io
    • 说明: 支持多种图片格式的读取、转换和保存
  3. Sharp 文档: Node.js 高性能图像处理库

    • 链接: sharp.pixelplumbing.com
    • 说明: 支持 PNG/JPEG/WebP 格式转换,性能优秀
  4. API易 Nano Banana Pro 专区: 中文接入文档

    • 链接: apiyi.com
    • 说明: 提供中文文档、代码示例、定价说明

作者: 技术团队
技术交流: 欢迎在评论区讨论 Nano Banana Pro 使用技巧,更多资料可访问 API易 apiyi.com 技术社区

类似文章