作者注:详解 Nano Banana Pro API 图片输出格式的控制方法,通过 base64 解码保存为 PNG,附完整代码示例
使用 Nano Banana Pro API 生成图片时,很多开发者会遇到一个问题:如何强制输出 PNG 而非 JPG 格式? 本文将详细解答这个问题,并提供多种实现方案。
核心价值: 读完本文,你将掌握 Nano Banana Pro 图片格式的控制原理,学会通过 base64 解码保存任意格式的图片。

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 画像形式コントロール・クイックスタート
方法 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 画像形式プランの比較

| 形式 | 圧縮タイプ | 透過チャネル | ファイルサイズ | 推奨シーン |
|---|---|---|---|---|
| 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デコードが正しく行われていないことです。以下を確認してください:
inline_data.dataフィールドの完全な内容を抽出しているか- 正しいbase64デコード方法を使用しているか
- バイナリモードでファイルに書き込んでいるか(
"w"ではなく"wb")
問題が解決しない場合は、APIが返却する mimeType フィールドを確認し、画像の形式を特定してください。
Q2: AIが生成した画像にはPNGとJPEGのどちらが適していますか?
用途によって異なります:
- PNG: 後編集が必要な場合、背景を透過させる場合、または最高品質を維持したいシーンに適しています。
- JPEG: そのまま公開する場合、ネットワーク経由で送信する場合、またはファイルサイズを抑える必要があるシーンに適しています。
どちらにすべきか迷う場合は、まず無損(ロスレス)のPNGで保存し、必要に応じて他の形式に変換することをお勧めします。
Q3: Nano Banana Proをすぐに試すにはどうすればいいですか?
APIYI プラットフォームでのテストをお勧めします:
- APIYI (apiyi.com) にアクセスしてアカウントを登録
- Nano Banana Pro の API キーを取得
- 本記事のコードサンプルを使用(価格は公式サイトのわずか2割程度)
- オンライン体験:imagen.apiyi.com で画像生成の効果を直接テストできます
まとめ
Nano Banana Pro の画像フォーマット制御における核心的なポイント:
- API は base64 エンコードを返却: inlineData.data はフォーマットに依存しない生のデータであり、保存時に自由にフォーマットを選択できます。
- 公式からはフォーマット指定パラメータは提供されていない: Imagen 3 とは異なり、Nano Banana Pro は
output_mime_typeパラメータをサポートしていません。 - クライアント側で出力フォーマットを制御: base64 デコード後、PIL や sharp などのツールを使用して PNG/JPEG/WebP として保存します。
- 利用シーンに応じてフォーマットを選択: PNG はデザイン素材、JPEG は写真、WebP はモダンな Web アプリケーションに適しています。
base64 デコードの仕組みを理解すれば、Nano Banana Pro で生成された画像の出力フォーマットを完全にコントロールできるようになります。
Nano Banana Pro API へのアクセス権は、APIYI(apiyi.com)経由での取得がおすすめです。安定したサービスを提供しており、価格は公式サイトのわずか 2 割で、一括生成もサポートしています。
📚 参考文献
⚠️ リンク形式の説明: すべての外部リンクは
資料名: domain.comの形式を使用しています。コピーしやすく、クリックによる遷移を防ぐことで SEO 評価の流出を避けています。
-
Google AI 画像生成ドキュメント: 公式 API ベストプラクティスガイド
- リンク:
ai.google.dev/gemini-api/docs/image-generation - 説明:
inlineDataのレスポンス構造とコード例が含まれています。
- リンク:
-
Pillow (PIL) ドキュメント: Python 画像処理ライブラリ
- リンク:
pillow.readthedocs.io - 説明: 多様な画像フォーマットの読み込み、変換、保存をサポートしています。
- リンク:
-
Sharp ドキュメント: Node.js 高性能画像処理ライブラリ
- リンク:
sharp.pixelplumbing.com - 説明: PNG/JPEG/WebP フォーマット変換に対応し、パフォーマンスに優れています。
- リンク:
-
APIYI Nano Banana Pro 特設ページ: 中国語版導入ドキュメント
- リンク:
apiyi.com - 説明: 中国語のドキュメント、コード例、料金体系の説明が提供されています。
- リンク:
著者: 技術チーム
技術交流: コメント欄での Nano Banana Pro の活用テクニックに関するディスカッションを歓迎します。詳細な資料は APIYI(apiyi.com)技術コミュニティをご覧ください。
