Авторское примечание: подробный разбор того, почему API Nano Banana 2 выдает изображения в формате PNG вместо JPEG, и технический анализ того, почему размер 4K-изображений в AI Studio сократился с 30 МБ до 8 МБ. Рассматриваются различия в управлении форматами между Vertex AI и AI Studio.
Многие разработчики при генерации изображений через API Nano Banana 2 сталкиваются с одним и тем же вопросом: API возвращает данные в формате base64, но что это на самом деле — PNG или JPEG? Еще больше недоумения вызывает тот факт, что при том же разрешении 4K размер изображений, генерируемых в AI Studio, резко упал с 30+ МБ до примерно 8 МБ. В этой статье мы разберем внутренние механизмы API и докопаемся до истины о контроле форматов и изменении объема файлов.
Ключевая ценность: Прочитав эту статью, вы узнаете, как правильно получать изображения в формате PNG через API Nano Banana 2, и поймете фундаментальную причину уменьшения объема 4K-изображений.

Основные моменты формата вывода изображений API Nano Banana 2
Давайте проясним ключевой факт: данные изображения, возвращаемые API Nano Banana 2, закодированы в base64, но base64 — это лишь способ передачи данных, а реальный формат изображения определяется байтовыми данными.
| Пункт | Описание | Влияние |
|---|---|---|
| Формат по умолчанию | Base64, заявлен как image/png, но байты могут быть JPEG |
Прямое сохранение может привести к ошибке формата |
| Управление в AI Studio | Параметр outputMimeType не поддерживается |
Требуется конвертация на стороне клиента |
| Управление в Vertex AI | Поддерживается выбор PNG/JPEG через imageOutputOptions |
Управляется на стороне сервера |
| Изменение объема 4K | Снижение с ~30 МБ до ~8 МБ | Результат оптимизации вычислительных мощностей сервера |
| Известный баг | API заявляет PNG, но байты могут быть JPEG | Необходимо проверять сигнатуру файла (magic bytes) |
Механизм вывода изображений API Nano Banana 2
Изображения в Nano Banana 2 (ID модели: gemini-3.1-flash-image-preview) возвращаются через объект inlineData, структура которого выглядит так:
{
"candidates": [{
"content": {
"parts": [{
"inlineData": {
"mime_type": "image/png",
"data": "<BASE64_IMAGE_DATA>"
}
}]
}
}]
}
Здесь есть баг, подтвержденный Google (GitHub Issue #1824): поле mime_type в ответе заявлено как image/png, но декодированные байты могут оказаться в формате JPEG. Это означает, что нельзя слепо доверять MIME-типу, возвращаемому API, и нужно проверять реальный формат по первым байтам файла (magic bytes).
Метод проверки прост: сигнатура файла JPEG — \xff\xd8, а PNG — \x89PNG\r\n\x1a\n.

3 способа получения изображений в формате PNG через API Nano Banana 2
Это главная тема статьи: как гарантированно получить изображение именно в формате PNG.
Способ 1: Конвертация на стороне клиента (рекомендуется для AI Studio)
Поскольку Gemini API в AI Studio не поддерживает управление форматом на стороне сервера, самый надежный способ — это конвертация на стороне клиента:
import base64
from PIL import Image
from io import BytesIO
# Вызов Nano Banana 2 для генерации изображения
from google import genai
from google.genai import types
client = genai.Client(api_key="YOUR_API_KEY")
response = client.models.generate_content(
model="gemini-3.1-flash-image-preview",
contents=["рыжий кот дремлет на солнце"],
config=types.GenerateContentConfig(
response_modalities=["TEXT", "IMAGE"],
image_config=types.ImageConfig(
image_size="4K",
aspect_ratio="1:1"
),
)
)
# Сохраняем в формате PNG (независимо от того, что реально вернуло API)
for part in response.parts:
if image := part.as_image():
image.save("output.png", format="PNG") # Принудительное сохранение без потерь
Ключевой момент — явное указание format="PNG" в методе image.save("output.png", format="PNG"). Если не указать параметр format, библиотека Pillow определит его по расширению файла — в большинстве случаев это сработает, но явное объявление надежнее.
Посмотреть полный код с ручным определением формата и конвертацией
import base64
from PIL import Image
from io import BytesIO
def detect_and_save(base64_data: str, output_path: str, target_format: str = "PNG"):
"""
Определение реального формата изображения из base64 и его конвертация
Args:
base64_data: данные изображения в формате base64
output_path: путь для сохранения
target_format: целевой формат (PNG/JPEG/WEBP)
"""
image_bytes = base64.b64decode(base64_data)
# Определение реального формата через magic bytes
if image_bytes[:2] == b'\xff\xd8':
actual_format = "JPEG"
elif image_bytes[:8] == b'\x89PNG\r\n\x1a\n':
actual_format = "PNG"
elif image_bytes[:4] == b'RIFF':
actual_format = "WEBP"
else:
actual_format = "неизвестно"
print(f"Реальный формат от API: {actual_format}")
print(f"Размер исходных данных: {len(image_bytes) / 1024 / 1024:.2f} МБ")
# Открываем через Pillow и конвертируем в целевой формат
img = Image.open(BytesIO(image_bytes))
print(f"Размер изображения: {img.size[0]}x{img.size[1]}")
if target_format == "PNG":
img.save(output_path, format="PNG", optimize=True)
elif target_format == "JPEG":
img.save(output_path, format="JPEG", quality=95)
elif target_format == "WEBP":
img.save(output_path, format="WEBP", quality=90)
import os
saved_size = os.path.getsize(output_path) / 1024 / 1024
print(f"Размер после сохранения: {saved_size:.2f} МБ ({target_format})")
Способ 2: Управление форматом через Vertex AI
Если вы используете Vertex AI для вызова Nano Banana 2, вы можете указать выходной формат прямо в запросе. Это единственный способ управления форматом на стороне сервера:
import os
from google import genai
from google.genai import types
from google.genai.types import HttpOptions
os.environ["GOOGLE_CLOUD_PROJECT"] = "your-project-id"
os.environ["GOOGLE_CLOUD_LOCATION"] = "global"
os.environ["GOOGLE_GENAI_USE_VERTEXAI"] = "True"
client = genai.Client(http_options=HttpOptions(api_version="v1"))
response = client.models.generate_content(
model="gemini-3.1-flash-image-preview",
contents=["рыжий кот дремлет на солнце"],
config=types.GenerateContentConfig(
response_modalities=["TEXT", "IMAGE"],
image_config=types.ImageConfig(
image_size="4K",
aspect_ratio="1:1",
output_mime_type="image/png", # Указываем вывод в PNG
# compression_quality=75, # Работает только для JPEG, 0-100
),
)
)
Способ 3: Универсальная обработка через сервис-прокси APIYI
При использовании сервиса-прокси APIYI платформа автоматически решает вопросы совместимости форматов:
import openai
client = openai.OpenAI(
api_key="YOUR_API_KEY",
base_url="https://vip.apiyi.com/v1"
)
response = client.chat.completions.create(
model="gemini-3.1-flash-image-preview",
messages=[
{"role": "user", "content": "рыжий кот дремлет на солнце"}
]
)
🎯 Совет по выбору формата: выбирайте PNG для максимального качества, и JPEG (quality=95 почти неотличим от оригинала) для экономии места.
Мы рекомендуем тестировать через платформу APIYI (apiyi.com), так как она берет на себя все вопросы совместимости, избавляя вас от ручного декодирования base64 и определения форматов.
Сравнение возможностей управления форматом API Nano Banana 2
Это момент, который часто сбивает разработчиков с толку: возможности AI Studio и Vertex AI в плане управления форматами кардинально различаются.
Сравнение поддержки параметров формата API Nano Banana 2
| Параметр | AI Studio (Gemini API) | Vertex AI | Imagen API |
|---|---|---|---|
| outputMimeType | Не поддерживается | Поддерживается (image/png, image/jpeg) | Поддерживается |
| compressionQuality | Не поддерживается | Поддерживается (0-100, только JPEG) | Поддерживается |
| imageSize | Поддерживается (512/1K/2K/4K) | Поддерживается | Поддерживается |
| aspectRatio | Поддерживается | Поддерживается | Поддерживается |
Это означает, что при вызове Nano Banana 2 через AI Studio вы не можете на стороне сервера контролировать, будет ли это PNG или JPEG. Формат, который возвращает API, зависит от поведения серверов Google по умолчанию — и в этом поведении сейчас есть баг (заявлен PNG, а по факту может прийти JPEG).
Сравнение объема файлов разных форматов в API Nano Banana 2
Разница в объеме одного и того же изображения 4K (4096×4096), сгенерированного ИИ, колоссальна:
| Формат | Метод сжатия | Типичный объем 4K | Прозрачность | Потеря качества |
|---|---|---|---|---|
| PNG | Без потерь | 15-30 МБ | Да | Нет |
| JPEG quality=95 | С потерями | 3-8 МБ | Нет | Минимальная |
| JPEG quality=75 | С потерями | 1-3 МБ | Нет | Незначительная |
| WebP quality=90 | С потерями | 2-5 МБ | Да | Минимальная |
PNG — это формат без потерь, объем файла напрямую зависит от сложности информации (энтропии) изображения. Чем больше деталей и сложнее текстуры, тем больше размер PNG-файла. Это база для понимания того, почему меняется объем 4K-изображений.
Подсказка: если вашему сценарию не нужен канал прозрачности, JPEG quality=95 визуально почти не отличим от PNG, но весит в 3-4 раза меньше. Через APIYI (apiyi.com) можно быстро сравнить разницу в качестве между форматами в реальных задачах.

Вся правда об уменьшении размера 4K-изображений в API Nano Banana 2
Это вопрос, который волнует многих пользователей: почему при том же разрешении 4K размер изображений Nano Banana 2, созданных в AI Studio, резко упал с 30+ МБ до примерно 8 МБ?
Уменьшение размера изображений API Nano Banana 2 — это не проблема формата
Сначала развеем распространенное заблуждение: дело не в том, что PNG превратился в JPEG. Если вы проверите сигнатуры файлов (magic bytes), то увидите, что формат возвращаемых данных не изменился.
Истинная причина заключается в том, что Google скорректировала параметры вычислений модели на стороне сервера, что привело к снижению информационной сложности (энтропии) генерируемых изображений. Есть три основных механизма:
Причина 1: Сокращение количества шагов вывода (основная причина)
При генерации изображений диффузионная модель проходит через несколько циклов итеративного удаления шума. Количество шагов удаления шума напрямую определяет детализацию изображения:
- Раньше: использовалось, вероятно, 50–100 итераций, что давало богатые текстуры и высокую детализацию.
- Сейчас: количество шагов, скорее всего, снижено до 20–40, поэтому изображение в целом выглядит четким, но локальные детали и текстуры стали проще.
Меньше шагов удаления шума → меньше текстурных деталей → ниже информационная энтропия → меньший размер после сжатия PNG без потерь.
Это не просто «ухудшение качества» — при обычном просмотре композиция и цвета могут почти не отличаться, но при увеличении до уровня пикселей заметно, что микротекстуры и цветовые градиенты стали менее проработанными.
Причина 2: Оптимизация предварительной обработки на сервере
После генерации и перед кодированием в PNG, Google, вероятно, добавила легкую фильтрацию шума и упрощение цветов:
- Слабое подавление шума уменьшает высокочастотные детали.
- Уменьшение количества уровней цветовых градиентов снижает плавность переходов.
- Эти меры делают сжатие PNG более эффективным (больше похожих пикселей — выше коэффициент сжатия).
Причина 3: Корректировка точности чисел с плавающей запятой
Вывод модели мог быть переключен с FP32 (32-битная точность) на FP16 (16-битная точность):
- Вычисления в FP16 в два раза быстрее, чем в FP32, а нагрузка на GPU значительно снижается.
- Снижение точности приводит к тому, что цветовые градиенты становятся менее плавными, что в конечном итоге отражается на уменьшении размера PNG.
Хронология изменений размера изображений API Nano Banana 2
| Время | Событие | Влияние |
|---|---|---|
| Ноябрь 2025 | Запуск Nano Banana Pro, полная мощность | 4K PNG около 25–35 МБ |
| Декабрь 2025 | Бесплатная квота снижена с 3 до 2 изображений/день | Начало ограничения ресурсов |
| Январь 2026 | Пользователи сообщают о снижении качества | Деталей меньше, разрешение прежнее |
| Февраль 2026 | Релиз Nano Banana 2 | 4K PNG около 6–10 МБ |
| Середина 2026 (ожидается) | Достижение целевой мощности Google TPU v7 | Возможно восстановление полной мощности |
Ключевой вывод: это компромисс, на который пошла Google, чтобы сбалансировать количество пользователей и качество обслуживания в условиях нехватки мощностей TPU. Разрешение (количество пикселей) осталось прежним, но плотность информации (уникальный объем данных на каждый пиксель) снизилась. Пользователи не могут вернуть прежнее качество в 30 МБ через параметры API.
🎯 Советы: Если вам критически важно качество деталей, попробуйте: 1) использовать параметр
compressionQuality=100в Vertex AI; 2) подчеркивать требования к деталям и текстурам в промпте; 3) генерировать 2K и увеличивать до 4K с помощью модели апскейлинга.
Через APIYI (apiyi.com) можно протестировать комбинации разных параметров, чтобы найти оптимальный баланс между качеством и размером.
Часто задаваемые вопросы
Q1: Является ли файл PNG, если просто сохранить base64-данные как .png?
Не обязательно. Расширение файла не определяет его реальный формат. Сначала нужно декодировать данные через base64.b64decode(), затем открыть их с помощью Image.open() из библиотеки Pillow и явно сохранить как img.save("output.png", format="PNG"). Если просто записать байты после декодирования base64 в файл .png, реальный формат будет зависеть от того, что прислал API — а у API сейчас есть известный баг, когда он заявляет формат PNG, но фактически возвращает JPEG.
Q2: Почему AI Studio не поддерживает outputMimeType, а Vertex AI поддерживает?
AI Studio (Gemini API) позиционируется как инструмент для быстрого прототипирования, поэтому его функционал ограничен. Vertex AI ориентирован на корпоративную среду и предлагает более полный контроль параметров. В описании типов JS SDK от Google четко указано: outputMimeType "Not supported in Gemini API". Если вам нужно управлять форматом на стороне сервера, переходите на Vertex AI или используйте единый интерфейс APIYI (apiyi.com).
Q3: Стоит ли использовать разрешение 4K после того, как размер файлов уменьшился?
Зависит от целей. Хотя размер 4K-вывода уменьшился, разрешение по-прежнему составляет 4096×4096 пикселей, что остается актуальным для печати или демонстрации на больших экранах. Если же вы используете изображения для соцсетей или веб-сайтов, 2K (2048px) может быть более выгодным выбором — размер меньше, а стоимость вызова модели ниже ($0.101/изображение против $0.151/изображение).
Q4: Есть ли способ вернуть прежнее высокое качество в 30 МБ?
На данный момент — нет. Уменьшение размера связано с настройками параметров вычислений на стороне сервера Google, и пользователи не могут на это повлиять через API. Возможно, после того как мощности TPU v7 достигнут целевых показателей в середине 2026 года, полная мощность будет восстановлена. Текущее решение: используйте более детальные промпты для генерации текстур или используйте модели апскейлинга (например, Real-ESRGAN) для увеличения 2K-изображений до 4K.
Резюме
Ключевые моменты управления форматом вывода изображений в API Nano Banana 2:
- AI Studio не поддерживает управление форматом на стороне сервера: вам придется самостоятельно декодировать base64 на стороне клиента и сохранять результат в PNG с помощью Pillow. Обязательно проверяйте «магические байты» (magic bytes), чтобы убедиться в реальном формате файла.
- Vertex AI поддерживает
outputMimeType: вы можете напрямую указатьimage/pngилиimage/jpegв запросе, а также настроить качество сжатия JPEG. - Уменьшение размера 4K-изображений связано с оптимизацией вычислений: снижение веса с 30 МБ до 8 МБ — это не просто смена формата, а результат того, что Google сокращает количество шагов инференса и точность чисел с плавающей запятой, что снижает энтропию данных. Вернуть исходное качество через параметры, к сожалению, невозможно.
Понимая эти механизмы, вы сможете выбрать оптимальную стратегию сохранения изображений для своих задач.
Рекомендуем использовать APIYI (apiyi.com) для быстрой проверки различных форматов и параметров. Платформа предоставляет бесплатные лимиты, унифицированный интерфейс и поддерживает различные способы вызова Nano Banana 2.
📚 Справочные материалы
-
Документация по генерации изображений Gemini: официальный API-справочник, включающий описание параметров
ImageConfig.- Ссылка:
ai.google.dev/gemini-api/docs/image-generation - Описание: разбор параметров и ограничений при вызове через AI Studio.
- Ссылка:
-
Справочник Vertex AI ImageOutputOptions: полная документация по параметрам управления форматом в Vertex AI.
- Ссылка:
docs.cloud.google.com/vertex-ai/generative-ai/docs/reference/rest/Shared.Types/ImageOutputOptions - Описание: подробная информация о
mimeTypeиcompressionQuality.
- Ссылка:
-
GitHub Issue #1824 — Несоответствие MIME-типа: отчет об ошибке, когда API заявляет PNG, но фактически возвращает JPEG.
- Ссылка:
github.com/googleapis/python-genai/issues/1824 - Описание: технические детали известной проблемы и временные решения.
- Ссылка:
-
Центр документации APIYI: руководство по управлению форматами при вызове Nano Banana 2 через единый интерфейс.
- Ссылка:
docs.apiyi.com - Описание: полезно для разработчиков, желающих упростить процесс обработки форматов.
- Ссылка:
Автор: Техническая команда APIYI
Техническое обсуждение: Приглашаем к дискуссии в комментариях. Дополнительные материалы доступны в центре документации APIYI: docs.apiyi.com
