Nano Banana Pro (gemini-3-pro-image-preview) APIで画像編集や画像生成を行う際、開発者はよく画像アップロード失敗の問題に遭遇します。本記事では、1枚あたり7MBという厳格な制限と、制限を超えた画像の正しい処理方法について詳しく解説します。
この記事で得られる価値: Nano Banana Pro の画像アップロードに関するすべての仕様制限を把握し、制限を超えた画像を圧縮する3つの方法を習得できます。

Nano Banana Pro API 画像制限の重要ポイント
Nano Banana Pro (gemini-3-pro-image-preview) で画像をアップロードする際は、以下の技術仕様を守る必要があります:
| 制限項目 | 仕様値 | 説明 |
|---|---|---|
| 1枚あたりの画像サイズ | 7 MB | インラインデータまたはコンソール直接アップロードの厳格な上限 |
| Cloud Storage | 30 MB | Google Cloud Storage経由でアップロードする場合の上限 |
| リクエストごとの画像数 | 最大14枚 | 1つのプロンプトに含められる画像数の上限 |
| 出力画像数 | 32,768トークン | 出力トークン制限の影響を受ける |
なぜ7MBなのか?
Googleの公式ドキュメントには、インラインデータまたはコンソール経由で直接アップロードする各ファイルのサイズ上限は7MBと明記されています。この制限の設計上の考慮点:
- 転送効率 – Base64エンコード後、画像サイズは約33%増加し、7MBの元画像はエンコード後約9.3MBになります
- サービスの安定性 – 単一ファイルのサイズを制限することで、APIの応答速度を保証します
- メモリ管理 – 1回のリクエストで過剰なサーバーメモリを消費することを防ぎます
より大きな画像(最大30MB)をアップロードする必要がある場合は、Google Cloud Storageを経由できますが、これは開発の複雑さを増します。

Nano Banana Pro APIがサポートする画像フォーマット
以下は、Nano Banana Proがサポートする MIME タイプとフォーマットの対照表です:
| MIME タイプ | ファイル拡張子 | サポート状況 | 備考 |
|---|---|---|---|
image/png |
.png | サポート | 推奨、可逆圧縮 |
image/jpeg |
.jpg, .jpeg | サポート | 推奨、容量が小さい |
image/webp |
.webp | サポート | 高圧縮率 |
image/heic |
.heic | サポート | iPhone ネイティブフォーマット |
image/heif |
.heif | サポート | 高効率画像フォーマット |
image/gif |
.gif | 非サポート | フォーマット変換が必要 |
image/bmp |
.bmp | 非サポート | フォーマット変換が必要 |
image/tiff |
.tiff | 非サポート | フォーマット変換が必要 |
APIYI による JPEG フォーマットの互換性最適化
注目すべきポイントとして、APIYI apiyi.com プラットフォームは JPEG フォーマットに対して追加の互換性最適化を実施しています。一部の古い JPEG ファイルは Google API に直接アクセスすると フォーマット認識の問題が発生する可能性がありますが、APIYIを経由することでこれらの互換性問題を自動的に処理できます。
🎯 フォーマット推奨: 日常使用では JPEG または WebP フォーマットがおすすめです。容量が小さく互換性も良好です。PNG は透明背景が必要なシーンに適しています。APIYI apiyi.com 経由で Nano Banana Pro を利用すると、より優れたフォーマット互換性サポートが得られます。
Nano Banana Pro APIがサポートするアスペクト比
Nano Banana Pro は豊富なアスペクト比オプションをサポートし、さまざまなアプリケーションシーンに対応しています:
| アスペクト比 | 用途説明 | 代表的な解像度 |
|---|---|---|
| 1:1 | SNSアイコン、商品画像 | 1024×1024, 2048×2048 |
| 3:2 | 標準写真比率 | 1536×1024 |
| 2:3 | 縦向き写真 | 1024×1536 |
| 3:4 | SNS縦型画像 | 1536×2048 |
| 4:3 | 従来のディスプレイ比率 | 2048×1536 |
| 4:5 | Instagram 推奨 | 1638×2048 |
| 5:4 | 大判印刷用 | 2048×1638 |
| 9:16 | スマホ縦画面動画 | 1152×2048 |
| 16:9 | 横画面動画/PPT | 2048×1152 |
| 21:9 | ウルトラワイド/シネマ比率 | 2688×1152 |

Nano Banana Pro API 画像サイズ超過の解決方法
画像が 7MB を超える場合、以下の 3 つの解決方法をお勧めします:
方法1: Python による圧縮(推奨)
Pillow ライブラリを使用してスマート圧縮を行い、自動的に 7MB 以下に調整します:
from PIL import Image
import io
def compress_image_for_nano_banana(image_path: str, max_size_mb: float = 7.0) -> bytes:
"""
Nano Banana Pro API の制限以下に画像を圧縮
Args:
image_path: 元画像のパス
max_size_mb: 最大ファイルサイズ(MB)、デフォルト7MB
Returns:
圧縮後の画像バイトデータ
"""
max_size_bytes = max_size_mb * 1024 * 1024
with Image.open(image_path) as img:
# RGB に変換(RGBA 透明画像の処理)
if img.mode in ('RGBA', 'P'):
img = img.convert('RGB')
# まず直接保存を試す
buffer = io.BytesIO()
img.save(buffer, format='JPEG', quality=95)
if buffer.tell() <= max_size_bytes:
return buffer.getvalue()
# サイズ制限を満たすまで段階的に品質を下げる
for quality in range(90, 10, -5):
buffer = io.BytesIO()
img.save(buffer, format='JPEG', quality=quality)
if buffer.tell() <= max_size_bytes:
print(f"圧縮成功: quality={quality}, size={buffer.tell()/1024/1024:.2f}MB")
return buffer.getvalue()
# 品質圧縮だけでは不十分な場合、サイズも縮小
scale = 0.9
while scale > 0.3:
new_size = (int(img.width * scale), int(img.height * scale))
resized = img.resize(new_size, Image.LANCZOS)
buffer = io.BytesIO()
resized.save(buffer, format='JPEG', quality=85)
if buffer.tell() <= max_size_bytes:
print(f"圧縮成功: scale={scale:.1f}, size={buffer.tell()/1024/1024:.2f}MB")
return buffer.getvalue()
scale -= 0.1
raise ValueError("画像を 7MB 以下に圧縮できません")
# 使用例
compressed_data = compress_image_for_nano_banana("large_image.png")
完全な API 呼び出しコード(圧縮とアップロードを含む)を見る
import requests
import base64
from PIL import Image
import io
from typing import Dict, Any
def compress_image_for_nano_banana(image_path: str, max_size_mb: float = 7.0) -> bytes:
"""指定サイズに画像を圧縮"""
max_size_bytes = max_size_mb * 1024 * 1024
with Image.open(image_path) as img:
if img.mode in ('RGBA', 'P'):
img = img.convert('RGB')
# 異なる品質レベルを試す
for quality in range(95, 10, -5):
buffer = io.BytesIO()
img.save(buffer, format='JPEG', quality=quality)
if buffer.tell() <= max_size_bytes:
return buffer.getvalue()
# サイズを縮小
scale = 0.8
while scale > 0.3:
new_size = (int(img.width * scale), int(img.height * scale))
resized = img.resize(new_size, Image.LANCZOS)
buffer = io.BytesIO()
resized.save(buffer, format='JPEG', quality=80)
if buffer.tell() <= max_size_bytes:
return buffer.getvalue()
scale -= 0.1
raise ValueError("7MB 以下に圧縮できません")
def edit_image_with_nano_banana(
image_path: str,
prompt: str,
api_key: str = "YOUR_API_KEY",
base_url: str = "https://vip.apiyi.com/v1"
) -> Dict[str, Any]:
"""
Nano Banana Pro で画像を編集
Args:
image_path: 元画像のパス
prompt: 編集指示
api_key: API キー
base_url: API ベース URL
Returns:
API レスポンス結果
"""
# 画像を確認して圧縮
import os
file_size = os.path.getsize(image_path)
if file_size > 7 * 1024 * 1024:
print(f"元画像 {file_size/1024/1024:.2f}MB が 7MB 制限を超えています。圧縮を開始します...")
image_data = compress_image_for_nano_banana(image_path)
else:
with open(image_path, 'rb') as f:
image_data = f.read()
# Base64 エンコード
image_base64 = base64.b64encode(image_data).decode('utf-8')
# API を呼び出し
response = requests.post(
f"{base_url}/images/edits",
json={
"model": "gemini-3-pro-image-preview",
"image": image_base64,
"prompt": prompt
},
headers={
"Authorization": f"Bearer {api_key}",
"Content-Type": "application/json"
},
timeout=(30, 600) # 接続タイムアウト30秒、読み取りタイムアウト600秒
)
return response.json()
# 使用例
if __name__ == "__main__":
result = edit_image_with_nano_banana(
image_path="my_photo.jpg",
prompt="背景を海辺の夕日に変更"
)
print(result)
方法2: オンライン圧縮ツール
コードを書きたくない場合は、オンラインツールを使用できます:
- TinyPNG: tinypng.com – PNG/JPEG のスマート圧縮
- Squoosh: squoosh.app – Google のオープンソース画像圧縮ツール
- iLoveIMG: iloveimg.com – バッチ圧縮対応
方法3: コマンドラインツール
ImageMagick を使用して高速圧縮:
# 指定サイズに圧縮(約 7MB)
convert input.png -quality 85 -define jpeg:extent=7MB output.jpg
# サイズと品質を同時に調整
convert input.png -resize 4096x4096\> -quality 80 output.jpg
アドバイス: APIYI apiyi.com 経由で Nano Banana Pro を呼び出すと、プラットフォームが無料テストクレジットを提供しており、圧縮後の画像が正常に処理できるか確認するのに便利です。
Nano Banana Pro API よくあるエラーと解決方法
| エラーメッセージ | 原因 | 解決方法 |
|---|---|---|
File size exceeds limit |
1枚の画像が 7MB を超過 | 上記の圧縮方法を使用 |
Unsupported MIME type |
非対応フォーマット (GIF/BMP など) | PNG/JPEG/WebP に変換 |
Invalid image format |
画像が破損または異常なフォーマット | 再エクスポートまたはフォーマット変換 |
Too many images |
14枚の画像制限を超過 | 複数回のリクエストに分割 |
よくある質問
Q1: 7MBの制限は元画像とBase64エンコード後のどちらに適用されますか?
7MBの制限は元ファイルサイズに適用され、Base64エンコード後のサイズではありません。Base64エンコードによりデータは約33%増加するため、7MBの元画像はエンコード後約9.3MBになります。APIはデコード後に元のサイズをチェックします。
Q2: なぜ5MBの画像でもアップロードに失敗するのですか?
考えられる原因:
- サポートされていない画像形式(GIF、BMP、TIFFなど)
- 画像ファイルの破損
- リクエスト全体のサイズが20MBを超過(複数画像の場合)
まずJPEG形式に変換してから、APIYI apiyi.comでテストすることをおすすめします。
Q3: Cloud Storageを使って30MBの画像をアップロードする手順は?
- 画像をGoogle Cloud Storageにアップロード
- 画像の
gs://リンクを取得 - APIリクエストでBase64データの代わりにそのリンクを使用
- この方法では最大30MBの画像に対応
注意:Google Cloudアカウントの追加設定が必要です。ほとんどの場合、7MB以下に圧縮する方が簡単です。
まとめ
Nano Banana Pro (gemini-3-pro-image-preview) APIの画像制限における重要ポイント:
- 1枚あたり7MBの制限: 埋め込みデータまたはコンソールアップロードの上限、Cloud Storageでは30MB可能
- 5つの対応形式: PNG、JPEG、WebP、HEIC、HEIF。GIF/BMP/TIFFは非対応
- 10種類のアスペクト比: 1:1から21:9まで、様々な用途に対応
- 制限超過時の解決策: Python圧縮、オンラインツール、コマンドラインツールの3つの方法
これらの制限を理解することで、Nano Banana Proを使った画像編集・生成がより効率的になります。
APIYI apiyi.comでNano Banana Proを試してみることをおすすめします。無料枠とJPEG形式の互換性最適化を提供しており、1枚あたり**$0.05**で利用できます。
📚 参考資料
⚠️ リンク形式について: すべての外部リンクは
資料名: domain.comの形式で表記しています。コピーは可能ですが、クリックでの遷移はできません。SEO権重の流出を防ぐための措置です。
-
Google Gemini API 画像理解ドキュメント: 公式の画像入力仕様説明
- リンク:
ai.google.dev/gemini-api/docs/image-understanding - 説明: MIMEタイプとサイズ制限に関する公式ドキュメント
- リンク:
-
Firebase AI Logic 入力ファイル要件: 詳細なファイル仕様説明
- リンク:
firebase.google.com/docs/ai-logic/input-file-requirements - 説明: サポートされているすべてのファイルタイプと制限事項が記載されています
- リンク:
-
Pillow 画像処理ドキュメント: Python画像圧縮ライブラリの公式ドキュメント
- リンク:
pillow.readthedocs.io - 説明: 画像圧縮とフォーマット変換を学ぶための最適なリソース
- リンク:
著者: 技術チーム
技術交流: コメント欄でのディスカッションを歓迎します。さらなる情報は APIYI apiyi.com 技術コミュニティをご覧ください
