|

Nano Banana Pro: как принудительно выводить формат PNG: 3 способа решения проблем с форматом изображений

Заметка автора: Подробный разбор того, как управлять форматом вывода изображений в Nano Banana Pro API, сохранять их в PNG через декодирование base64, с примерами готового кода.

При генерации изображений через Nano Banana Pro API многие разработчики сталкиваются с вопросом: как заставить систему выдавать PNG вместо JPG? В этой статье мы подробно разберем этот момент и предложим несколько вариантов решения.

Главная ценность: прочитав этот материал, вы поймете принцип контроля форматов в Nano Banana Pro и научитесь сохранять изображения в любом нужном формате через декодирование base64.

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


Ключевые особенности вывода изображений в Nano Banana Pro

Пункт Описание Ценность
API возвращает base64 В inlineData передается кодировка изображения в формате base64 Нейтральный формат исходных данных
Выбор формата при сохранении После декодирования base64 можно сохранить файл как PNG, JPG или WebP Полный контроль со стороны разработчика
Нет официальных параметров формата У Nano Banana Pro отсутствует параметр output_mime_type Обработка выполняется на стороне клиента
PNG сохраняет прозрачность Идеально для дизайна, где нужен прозрачный фон Сжатие без потери качества
JPG весит меньше Оптимально для фотографий и передачи по сети Высокая степень сжатия

Почему в API нет параметров для выбора формата?

Если заглянуть в официальную документацию Google AI по адресу ai.google.dev/gemini-api/docs/image-generation, можно заметить, что Nano Banana Pro (генерация изображений на базе Gemini) не предлагает параметр output_mime_type, в отличие от Imagen 3.

Это связано с тем, что архитектура ответа Nano Banana Pro отличается от традиционных специализированных 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-ru 图示


Быстрый старт: управление форматами изображений в 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:
        """
        Генерирует изображение и сохраняет его в указанном формате

        Args:
            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
    )

Совет: Получите доступ к Nano Banana Pro API через APIYI (apiyi.com). Платформа обеспечивает стабильное подключение, цены в 5 раз ниже официальных, доступна работа с пакетными запросами.


Сравнение форматов изображений Nano Banana Pro

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

Формат Тип сжатия Прозрачность Размер файла Применение
PNG Без потерь ✅ Есть Большой Дизайн, иконки, прозрачный фон
JPEG С потерями ❌ Нет Маленький Фото, пейзажи, передача в сети
WebP На выбор ✅ Есть Минимальный Современные сайты, мобильные приложения

Подробное описание форматов

Когда использовать PNG:

  • Вам нужны элементы дизайна с прозрачным фоном.
  • Критически важно максимальное качество изображения.
  • Это промежуточный материал, который вы будете еще не раз редактировать.
  • Иконки и логотипы, где нужны четкие границы.

Когда использовать JPEG:

  • Фотореалистичные изображения (пейзажи, портреты, фото товаров).
  • Нужно минимизировать вес файла для быстрой загрузки.
  • Делитесь картинками в соцсетях.
  • Обычные изображения, где не нужна прозрачность.

Когда использовать WebP:

  • Современные веб-приложения (поддерживается всеми актуальными браузерами).
  • Внутри мобильных приложений.
  • Когда нужен идеальный баланс между качеством и весом файла.
  • Вместо GIF, так как WebP поддерживает анимацию при гораздо меньшем размере.

Продвинутые методы конвертации форматов изображений в 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. Файл записывается в бинарном режиме ("wb", а не "w").

Если проблема сохраняется, проверьте поле mimeType в ответе API, чтобы подтвердить тип изображения.

Q2: Что лучше подходит для изображений, созданных ИИ: PNG или JPEG?

Все зависит от ваших целей:

  • PNG: подходит, если нужна последующая обработка, прозрачный фон или максимально высокое качество.
  • JPEG: идеален для прямой публикации, передачи по сети или когда нужно контролировать размер файла.

Если вы не уверены, рекомендуем сначала сохранять в PNG (без потерь), а при необходимости конвертировать в другие форматы.

Q3: Как быстро начать тестирование Nano Banana Pro?

Для тестирования рекомендуем использовать платформу APIYI:

  1. Зайдите на сайт APIYI (apiyi.com) и зарегистрируйте аккаунт.
  2. Получите API-ключ для Nano Banana Pro.
  3. Используйте примеры кода из этой статьи. Цена составляет всего 20% от стоимости на официальном сайте.
  4. Попробовать онлайн: на imagen.apiyi.com можно сразу проверить результат генерации.

Итоги

Основные моменты по управлению форматом изображений в Nano Banana Pro:

  1. API возвращает base64: inlineData.data — это сырые данные в формате base64, не привязанные к конкретному расширению. Вы вольны выбирать любой формат при сохранении.
  2. Отсутствие официальных параметров формата: В отличие от Imagen 3, Nano Banana Pro не поддерживает параметр output_mime_type.
  3. Контроль формата на стороне клиента: После декодирования base64 используйте такие инструменты, как PIL (Python) или sharp (Node.js), чтобы сохранить файл в PNG, JPEG или WebP.
  4. Выбор формата под задачу: PNG отлично подходит для дизайнерских исходников, JPEG — для фотографий, а WebP — для современных веб-интерфейсов.

Разобравшись с принципом декодирования base64, вы получите полный контроль над выходным форматом изображений от Nano Banana Pro.

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


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

⚠️ Примечание по ссылкам: Все внешние ссылки указаны в формате Название: 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. Раздел Nano Banana Pro на APIYI: Документация по интеграции.

    • Ссылка: apiyi.com
    • Описание: Русскоязычная документация, примеры кода и тарифные планы.

Автор: Техническая команда
Общение: Делитесь своими лайфхаками по использованию Nano Banana Pro в комментариях. Больше полезных материалов — в техническом сообществе APIYI apiyi.com.

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