|

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-zh-hant 图示


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-zh-hant 图示


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-zh-hant 图示

格式 壓縮類型 透明通道 文件大小 適用場景
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 技術社區

Similar Posts