|

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-ja 图示


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-ja 图示


Nano Banana Pro 画像形式コントロール・クイックスタート

方法 1:PNG として直接保存(推奨)

最も簡単な方法は、保存時に直接拡張子 .png を指定することです。

import google.generativeai as genai
import base64

# APIYI 接続の設定
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:
        """
        画像を生成し、指定した形式で保存

        引数:
            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
    )

ヒント: APIYI を通じて Nano Banana Pro API のアクセス権を取得することをお勧めします。このプラットフォームは安定した接続サービスを提供しており、価格は公式サイトの約 20% で、一括呼び出しもサポートしています。


Nano Banana Pro 画像形式プランの比較

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

形式 圧縮タイプ 透過チャネル ファイルサイズ 推奨シーン
PNG 可逆圧縮 ✅ 対応 大きめ デザイン素材、アイコン、透過背景が必要な場合
JPEG 非可逆圧縮 ❌ 非対応 小さめ 写真、風景画、ネットワーク転送
WebP 可逆/非可逆選択可 ✅ 対応 最小 モダンな Web サイト、モバイルアプリ

各形式の詳細説明

PNG 形式の推奨シーン:

  • 透過背景を保持する必要があるデザイン素材
  • 極めて高い画質が要求されるシーン
  • 繰り返し編集が必要な中間素材
  • アイコンやロゴなど、エッジの鋭さが必要な画像

JPEG 形式の推奨シーン:

  • 写真系画像(風景、人物、商品の実写)
  • ネットワーク転送でファイルサイズを抑える必要がある場合
  • ソーシャルメディアでの共有
  • 透過背景を必要としない一般的な画像

WebP 形式の推奨シーン:

  • モダン Web アプリ(ブラウザのサポートが充実)
  • モバイルアプリの埋め込み画像
  • 品質とファイルサイズを両立させたいシーン
  • アニメーションに対応(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. バイナリモードでファイルに書き込んでいるか("w" ではなく "wb"

問題が解決しない場合は、APIが返却する mimeType フィールドを確認し、画像の形式を特定してください。

Q2: AIが生成した画像にはPNGとJPEGのどちらが適していますか?

用途によって異なります:

  • PNG: 後編集が必要な場合、背景を透過させる場合、または最高品質を維持したいシーンに適しています。
  • JPEG: そのまま公開する場合、ネットワーク経由で送信する場合、またはファイルサイズを抑える必要があるシーンに適しています。

どちらにすべきか迷う場合は、まず無損(ロスレス)のPNGで保存し、必要に応じて他の形式に変換することをお勧めします。

Q3: Nano Banana Proをすぐに試すにはどうすればいいですか?

APIYI プラットフォームでのテストをお勧めします:

  1. APIYI (apiyi.com) にアクセスしてアカウントを登録
  2. Nano Banana Pro の API キーを取得
  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 で生成された画像の出力フォーマットを完全にコントロールできるようになります。

Nano Banana Pro API へのアクセス権は、APIYI(apiyi.com)経由での取得がおすすめです。安定したサービスを提供しており、価格は公式サイトのわずか 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. APIYI Nano Banana Pro 特設ページ: 中国語版導入ドキュメント

    • リンク: apiyi.com
    • 説明: 中国語のドキュメント、コード例、料金体系の説明が提供されています。

著者: 技術チーム
技術交流: コメント欄での Nano Banana Pro の活用テクニックに関するディスカッションを歓迎します。詳細な資料は APIYI(apiyi.com)技術コミュニティをご覧ください。

類似投稿