|

3 способа решения проблемы вывода PNG-изображений через API Nano Banana 2: как уменьшить размер 4K-изображения с 30 МБ до 8 МБ

Авторское примечание: подробный разбор того, почему 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-изображений.

nano-banana-2-api-png-output-format-4k-image-size-guide-ru 图示


Основные моменты формата вывода изображений 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.

nano-banana-2-api-png-output-format-4k-image-size-guide-ru 图示

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) можно быстро сравнить разницу в качестве между форматами в реальных задачах.

nano-banana-2-api-png-output-format-4k-image-size-guide-ru 图示

Вся правда об уменьшении размера 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:

  1. AI Studio не поддерживает управление форматом на стороне сервера: вам придется самостоятельно декодировать base64 на стороне клиента и сохранять результат в PNG с помощью Pillow. Обязательно проверяйте «магические байты» (magic bytes), чтобы убедиться в реальном формате файла.
  2. Vertex AI поддерживает outputMimeType: вы можете напрямую указать image/png или image/jpeg в запросе, а также настроить качество сжатия JPEG.
  3. Уменьшение размера 4K-изображений связано с оптимизацией вычислений: снижение веса с 30 МБ до 8 МБ — это не просто смена формата, а результат того, что Google сокращает количество шагов инференса и точность чисел с плавающей запятой, что снижает энтропию данных. Вернуть исходное качество через параметры, к сожалению, невозможно.

Понимая эти механизмы, вы сможете выбрать оптимальную стратегию сохранения изображений для своих задач.

Рекомендуем использовать APIYI (apiyi.com) для быстрой проверки различных форматов и параметров. Платформа предоставляет бесплатные лимиты, унифицированный интерфейс и поддерживает различные способы вызова Nano Banana 2.


📚 Справочные материалы

  1. Документация по генерации изображений Gemini: официальный API-справочник, включающий описание параметров ImageConfig.

    • Ссылка: ai.google.dev/gemini-api/docs/image-generation
    • Описание: разбор параметров и ограничений при вызове через AI Studio.
  2. Справочник Vertex AI ImageOutputOptions: полная документация по параметрам управления форматом в Vertex AI.

    • Ссылка: docs.cloud.google.com/vertex-ai/generative-ai/docs/reference/rest/Shared.Types/ImageOutputOptions
    • Описание: подробная информация о mimeType и compressionQuality.
  3. GitHub Issue #1824 — Несоответствие MIME-типа: отчет об ошибке, когда API заявляет PNG, но фактически возвращает JPEG.

    • Ссылка: github.com/googleapis/python-genai/issues/1824
    • Описание: технические детали известной проблемы и временные решения.
  4. Центр документации APIYI: руководство по управлению форматами при вызове Nano Banana 2 через единый интерфейс.

    • Ссылка: docs.apiyi.com
    • Описание: полезно для разработчиков, желающих упростить процесс обработки форматов.

Автор: Техническая команда APIYI
Техническое обсуждение: Приглашаем к дискуссии в комментариях. Дополнительные материалы доступны в центре документации APIYI: docs.apiyi.com

Похожие записи