Заметка автора: Подробный разбор того, как управлять форматом вывода изображений в Nano Banana Pro API, сохранять их в PNG через декодирование base64, с примерами готового кода.
При генерации изображений через 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 весит меньше | Оптимально для фотографий и передачи по сети | Высокая степень сжатия |
Почему в 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
Способ 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

| Формат | Тип сжатия | Прозрачность | Размер файла | Применение |
|---|---|---|---|---|
| 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. Убедитесь, что:
- Вы извлекаете полное содержимое поля
inline_data.data. - Используете правильный метод декодирования base64.
- Файл записывается в бинарном режиме (
"wb", а не"w").
Если проблема сохраняется, проверьте поле mimeType в ответе API, чтобы подтвердить тип изображения.
Q2: Что лучше подходит для изображений, созданных ИИ: PNG или JPEG?
Все зависит от ваших целей:
- PNG: подходит, если нужна последующая обработка, прозрачный фон или максимально высокое качество.
- JPEG: идеален для прямой публикации, передачи по сети или когда нужно контролировать размер файла.
Если вы не уверены, рекомендуем сначала сохранять в PNG (без потерь), а при необходимости конвертировать в другие форматы.
Q3: Как быстро начать тестирование Nano Banana Pro?
Для тестирования рекомендуем использовать платформу APIYI:
- Зайдите на сайт APIYI (apiyi.com) и зарегистрируйте аккаунт.
- Получите API-ключ для Nano Banana Pro.
- Используйте примеры кода из этой статьи. Цена составляет всего 20% от стоимости на официальном сайте.
- Попробовать онлайн: на imagen.apiyi.com можно сразу проверить результат генерации.
Итоги
Основные моменты по управлению форматом изображений в Nano Banana Pro:
- API возвращает base64:
inlineData.data— это сырые данные в формате base64, не привязанные к конкретному расширению. Вы вольны выбирать любой формат при сохранении. - Отсутствие официальных параметров формата: В отличие от Imagen 3, Nano Banana Pro не поддерживает параметр
output_mime_type. - Контроль формата на стороне клиента: После декодирования base64 используйте такие инструменты, как PIL (Python) или sharp (Node.js), чтобы сохранить файл в PNG, JPEG или WebP.
- Выбор формата под задачу: PNG отлично подходит для дизайнерских исходников, JPEG — для фотографий, а WebP — для современных веб-интерфейсов.
Разобравшись с принципом декодирования base64, вы получите полный контроль над выходным форматом изображений от Nano Banana Pro.
Для доступа к Nano Banana Pro рекомендуем использовать APIYI (apiyi.com). Платформа предоставляет стабильный сервис, цены в 5 раз ниже официальных, а также поддерживает массовую генерацию.
📚 Справочные материалы
⚠️ Примечание по ссылкам: Все внешние ссылки указаны в формате
Название: 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 и обладает отличной производительностью.
- Ссылка:
-
Раздел Nano Banana Pro на APIYI: Документация по интеграции.
- Ссылка:
apiyi.com - Описание: Русскоязычная документация, примеры кода и тарифные планы.
- Ссылка:
Автор: Техническая команда
Общение: Делитесь своими лайфхаками по использованию Nano Banana Pro в комментариях. Больше полезных материалов — в техническом сообществе APIYI apiyi.com.
