Перейти к содержанию

GPT Image 2 и 2.5: прозрачный фон в PNG и WebP

Ошибка «not supported» обычно приходит от шлюза, белый фон — от просмотрщика или формулировки промпта. Прозрачность доказывает только альфа-канал в файле.

•••9 мин чтения•Руководства по API
Эмалевый значок-маяк на шахматной сетке прозрачности и тот же значок на светлой и тёмной плитках, заголовок GPT Image 2 и подпись Прозрачный фон PNG / WebP

Короткий ответ: где прозрачный фон работает сейчас

Модели OpenAI умеют отдавать картинку с настоящим прозрачным фоном. В API для этого нужны два параметра: background: "transparent" и output_format: "png" или "webp". JPEG альфа-канала не хранит, поэтому для прозрачности не подходит. Значение по умолчанию auto — это не просьба о прозрачности, а разрешение модели решить самой.

По состоянию на 25 сентября 2026 года картина такая:

Где создаётся изображениеПрозрачный фонЧто учесть
API, gpt-image-2.5-flare и gpt-image-2.5-sunburstПоддерживаетсяOpenAI советует модели 2.5 для новых интеграций
API, gpt-image-2 (снапшот gpt-image-2-2026-04-21)В статусе preview (предварительный доступ)Подходит, если интеграция уже построена на этой модели или нужен Batch
Приложение ChatGPTOpenAI пишет, что ChatGPT Images может выполнить просьбу сделать фон прозрачнымФормат и альфа-канал скачанного файла в справке не описаны, файл нужно проверить
Сторонний шлюз или облачная платформа с моделями OpenAIЗависит от сервисаСервис может отклонить параметр, даже если сам OpenAI его поддерживает

Статусы взяты из справочника Images API: для обеих моделей 2.5 прозрачный фон указан как поддерживаемый, для gpt-image-2 — как preview. Preview означает, что функция доступна, но OpenAI не даёт по ней обещаний качества или стабильности. В руководстве по генерации изображений gpt-image-2 уже отнесена к предыдущим моделям, но не снята с поддержки.

Готовый файл нужно проверять в любом случае: расширение .png ещё не означает прозрачность, а белый фон в окне просмотра не означает её отсутствие. Скрипт проверки приведён ниже.

«Not supported»: откуда утверждения, что прозрачности нет

Противоречивые утверждения относятся к трём разным периодам. До августа 2026 года gpt-image-2 действительно не умела делать прозрачный фон. В августе OpenAI открыла эту возможность в статусе preview. 8 сентября 2026 года вышли снапшоты GPT Image 2.5 Flare и Sunburst, у которых прозрачность уже без пометки preview; на той же неделе вышли ChatGPT Images 2.5. Поэтому материал, написанный летом, может честно сообщать «не поддерживается» и при этом давно устареть.

Отдельный случай — сообщение Transparent background is not supported for this model в ответе на свежий запрос. Его может выдать не OpenAI, а сервис-посредник, который ещё не научился передавать параметр. Примеры по состоянию на 25 сентября 2026 года: в описании модели openai/gpt-image-2 на Cloudflare Workers AI прямо сказано, что прозрачный фон не поддерживается, а в трекере open-source-шлюза sub2api есть открытая заявка о том, что этот же текст ошибки приходит для gpt-image-2 и обеих моделей 2.5.

Если вы видите такую ошибку, проверьте адрес, на который уходит запрос. Запрос на api.openai.com и запрос через совместимый сервис с тем же именем модели — разные маршруты: совпадение имён не гарантирует одинаковую обработку параметров.

Какую модель выбрать: GPT Image 2.5, gpt-image-2 или ChatGPT

  • Новый проект — одна из моделей 2.5. OpenAI описывает Flare как быструю модель для повседневной генерации, а Sunburst — как вариант для задач, где важнее всего точность правки. Отличаются ли их контуры на прозрачном фоне, OpenAI не сообщает; если края критичны, сгенерируйте один и тот же объект обеими моделями и сравните.
  • Существующая интеграция на gpt-image-2 — можно остаться на ней, помня о статусе preview. Batch есть только у gpt-image-2; у моделей 2.5 он не поддерживается.
  • Разовая картинка без кода — ChatGPT, с проверкой скачанного файла. Когда хватает ChatGPT, а когда нужен API, подробнее разобрано в материале «Генератор изображений ChatGPT: официальный вход, бесплатные инструменты и граница API».

Отдельной платы за прозрачный фон в прайсе OpenAI нет; стоимость определяется токенами, то есть размером и качеством. Ставки у трёх моделей одинаковые, но расход токенов разный. По официальному калькулятору, только выход, 1024×1024: у моделей 2.5 medium стоит около $0,01317, high — около $0,05268; у gpt-image-2 medium — около $0,05268, high — около $0,21072. Названия уровней качества у двух поколений не равнозначны, так что сравнивать нужно результат, а не слово high. Расчёт для других размеров — в статье «Сколько стоит изображение в OpenAI API: GPT Image 2.5 и GPT Image 2», различия Flare и Sunburst — в «GPT Image 2.5: Flare или Sunburst, стоимость и работа с API».

Если вы находитесь в России: её нет в списке стран, где доступен OpenAI API, и OpenAI предупреждает, что доступ из стран вне списка может привести к блокировке или приостановке аккаунта. Параметры и проверки ниже от этого не меняются, но выбор маршрута в таком случае определяется правилами сервиса, а не настройками запроса.

Запрос: background: "transparent" и формулировка промпта

Одного параметра background: "transparent" может не хватить. В примере OpenAI Cookbook о прозрачных изображениях отдельно предупреждают: указания в промпте важнее параметра. Если в тексте описаны сцена, цвет фона, стол или студийный задник, модель может нарисовать этот фон вместо прозрачности.

Поэтому фон в промпте упоминать нужно, но только как требование прозрачности. В руководстве OpenAI Cookbook по промптам советуют прямо просить изолированный объект на полностью прозрачном фоне и исключать сцену, сплошную подложку, нарисованную шахматную сетку и лишние тени.

Запрос через cURL (нужен ключ в переменной OPENAI_API_KEY; флаг --fail-with-body появился в cURL 7.76.0):

bash
curl --fail-with-body --silent --show-error \
  https://api.openai.com/v1/images/generations \
  -H "Authorization: Bearer $OPENAI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gpt-image-2.5-flare",
    "prompt": "Эмалевый значок в виде маяка на скале, синие и белые полосы, золотой кант. Изолированный объект на полностью прозрачном фоне. Без сцены, без сплошной подложки, без нарисованной шахматной сетки, без падающей тени.",
    "background": "transparent",
    "output_format": "png",
    "size": "1024x1024",
    "quality": "medium"
  }' \
  --output response.json

Что можно менять:

  • для gpt-image-2 замените только значение model, остальное работает так же;
  • для WebP укажите "output_format": "webp" и при желании добавьте "output_compression" от 0 до 100 (по умолчанию 100); для PNG этот параметр не передают;
  • size и quality выбирайте под задачу: у моделей 2.5 есть ещё xhigh и max, у gpt-image-2 верхний уровень — high. Ошибки размера разобраны в статье «GPT Image 2: почему size 1024x576 недопустим и как получить нужный файл».

Если в ответ приходит Your organization must be verified, прозрачность ни при чём — см. «GPT Image 2: что делать с ошибкой Your organization must be verified».

Сохраните ответ без перекодирования

Images API возвращает изображение в base64 в поле data[0].b64_json; ссылку на файл модели GPT Image не отдают, параметр response_format для них не поддерживается. В том же JSON есть поле background со значением transparent или opaque и поле output_format. Их стоит прочитать до декодирования: opaque сразу показывает, что прозрачность не применилась. При этом transparent говорит лишь о применённой настройке, а не о качестве контура.

Скрипт save_image.py читает ответ, проверяет эти поля, декодирует байты и записывает их как есть — без открытия и пересохранения через графическую библиотеку. Нужны Python 3 и Pillow (python3 -m pip install Pillow).

python
import base64
import io
import json
import sys
from pathlib import Path

from PIL import Image

response_path, output_path = Path(sys.argv[1]), Path(sys.argv[2])
payload = json.loads(response_path.read_text(encoding="utf-8"))

if payload.get("error"):
    sys.exit(f"Сервис вернул ошибку: {payload['error']}")

background = payload.get("background")
print("background:", background, "| output_format:", payload.get("output_format"))
if background is None:
    print("Поля background в ответе нет: решает только проверка файла")
elif background != "transparent":
    sys.exit("Фон применён как непрозрачный: проверьте параметры запроса")

try:
    encoded = payload["data"][0]["b64_json"]
except (KeyError, IndexError, TypeError):
    sys.exit("В ответе нет data[0].b64_json")

raw = base64.b64decode(encoded, validate=True)
with Image.open(io.BytesIO(raw)) as image:
    actual = image.format

expected = {".png": "PNG", ".webp": "WEBP"}.get(output_path.suffix.lower())
if actual != expected:
    sys.exit(f"Внутри {actual}, а расширение {output_path.suffix}: исправьте имя файла")

output_path.write_bytes(raw)
print(f"Сохранено {len(raw)} байт: {output_path}")
bash
python3 save_image.py response.json lighthouse.png

Расширение должно совпадать с тем, что лежит внутри: файл icon.webp с байтами PNG остаётся PNG, и часть сервисов обработает его неправильно. Поэтому скрипт сверяет реальный формат и не переименовывает файл за вас.

Проверьте альфа-канал в самом файле

В восьмибитном альфа-канале 0 — полностью прозрачный пиксель, 255 — полностью непрозрачный, всё между ними — полупрозрачность (мягкие края, стекло, дым). Файл прозрачен, если в нём есть пиксели с альфой меньше 255 там, где должен быть фон. Режим RGBA сам по себе этого не доказывает: при переводе в RGBA Pillow добавляет полностью непрозрачный канал, но белый фон никуда не девается.

Скрипт check_alpha.py считает пиксели по значению альфы (так же файлы проверяют в примерах OpenAI Cookbook) и собирает две копии на светлой и тёмной подложке:

python
import sys
from pathlib import Path

from PIL import Image

path = Path(sys.argv[1])
with Image.open(path) as source:
    print("Формат:", source.format, "| режим:", source.mode, "| размер:", source.size)
    rgba = source.convert("RGBA")

histogram = rgba.getchannel("A").histogram()
total = rgba.width * rgba.height
clear, solid = histogram[0], histogram[255]
partial = total - clear - solid
print(f"Прозрачных: {clear} ({100 * clear / total:.1f} %), "
      f"полупрозрачных: {partial}, непрозрачных: {solid}")

if solid == total:
    sys.exit("Все пиксели непрозрачны: прозрачного фона в файле нет")
if clear == total:
    sys.exit("Все пиксели прозрачны: объекта в файле нет")

for label, color in (("light", (255, 255, 255, 255)), ("dark", (24, 24, 24, 255))):
    backdrop = Image.new("RGBA", rgba.size, color)
    preview = Image.alpha_composite(backdrop, rgba).convert("RGB")
    preview.save(path.with_name(f"{path.stem}-{label}.png"))
print("Альфа-канал есть. Откройте копии -light и -dark и осмотрите контур.")
bash
python3 check_alpha.py lighthouse.png

Преобразование в RGB здесь стоит намеренно: так собираются непрозрачные копии для осмотра, исходник не меняется. Что смотреть на копиях:

  • светлый ореол вокруг объекта заметнее на тёмной копии, тёмная кайма — на светлой;
  • шахматная сетка, видимая на обеих копиях, нарисована в пикселях: модель изобразила «прозрачность» картинкой;
  • отверстия внутри объекта (ручка кружки, окна маяка) должны принимать цвет подложки;
  • у стекла, волос и свечения полупрозрачные пиксели — это нормально, универсальной «правильной доли» прозрачных пикселей нет.

Если в просмотрщике картинка на белом или чёрном фоне, а на обеих копиях фон вокруг объекта меняет цвет, фон подставлял просмотрщик — генерировать заново не нужно. Скриншот окна для проверки не годится: в нём всегда уже есть фон интерфейса.

Как сделать прозрачный фон в ChatGPT

В справке OpenAI об изображениях в ChatGPT сказано, что ChatGPT Images может выполнить просьбу добавить текст, детали или сделать фон прозрачным, а также отредактировать загруженную картинку. ChatGPT Images доступен на всех тарифах, в вебе, на iOS и Android. Сохранить картинку можно кнопкой Save в элементах управления изображением.

Чего в справке нет: в каком формате сохраняется файл, есть ли отдельный переключатель прозрачности и сохраняется ли настоящий альфа-канал. Поэтому порядок такой:

  1. Попросите явно: «изолированный объект на полностью прозрачном фоне, без подложки, без шахматной сетки, без тени».
  2. Скачайте файл через Save, а не делайте скриншот и не копируйте картинку из окна.
  3. Проверьте файл скриптом check_alpha.py или хотя бы положите его на тёмный слайд в редакторе презентаций.

Если файл непрозрачный или сетка нарисована в пикселях, для этой задачи нужен API.

PNG или WebP

Две папки: PNG с керамической кружкой на шахматной сетке и подписью «исходник для работы» и WebP с той же кружкой в макете интернет-магазина и подписью «изображение для сайта»

Оба формата хранят прозрачность, выбор зависит от того, куда файл пойдёт дальше.

ЗадачаФормат запросаПочему
Исходник для правки, вёрстки, печатиpng, без output_compressionФормат по умолчанию, без потерь, понятен любому редактору
Картинка для сайта, который принимает WebPwebp, сжатие по необходимостиWebP хранит прозрачность и при сжатии с потерями, и без потерь
Нужны оба вариантаpng, затем локальная конвертацияВторой запрос к модели не нужен и даст другую картинку

Не рассчитывайте, что output_compression: 50 уменьшит файл ровно вдвое: в справочнике это описано как уровень сжатия от 0 до 100 для WebP и JPEG, конкретный размер файла документация не гарантирует. Если исходник уже в PNG, WebP проще сделать локально, указав режим явно:

python
from PIL import Image

with Image.open("lighthouse.png") as source:
    source.convert("RGBA").save("lighthouse.webp", "WEBP", lossless=True, exact=True)

lossless=True включает сжатие без потерь, exact=True сохраняет цветовые значения полностью прозрачных пикселей — это настройки записи WebP в Pillow, а не аналог параметров API. Для сжатия с потерями вместо них укажите, например, quality=80: альфа-канал сохранится, его качество задаёт alpha_quality (по умолчанию 100). WebP без потерь не обязательно окажется меньше PNG для конкретной картинки. После конвертации снова запустите check_alpha.py.

Главная ошибка в обработке — вызов convert("RGB") или сохранение в JPEG где-то по пути: оба действия уничтожают прозрачность безвозвратно.

Где прозрачность теряется после генерации

Четыре карточки с листом папоротника на шахматной сетке по этапам: исходник PNG, конвертация WebP, загрузка, скачанный файл; лупа над последним листом и две миниатюры на светлом и тёмном фоне

Исправный исходник ещё не гарантирует прозрачную картинку на сайте. Альфа-канал могут выбросить конвертер, CMS при создании миниатюр, оптимизатор изображений или CDN с автоматическим преобразованием форматов. Проверяйте не загруженный файл, а скачанный с сайта: тем же скриптом, по очереди после каждого этапа, пока не найдёте первый, где непрозрачных пикселей стало 100 %.

Если нужно разложить прозрачные элементы по слоям для дальнейшей работы в Photoshop или Photopea, следующий шаг описан в статье «Как сделать редактируемый PSD из изображения GPT Image 2».

Если есть исходное фото: правка вместо генерации

Убрать фон у существующей фотографии можно через /v1/images/edits: этот эндпоинт принимает те же background и output_format. Пример с моделью Sunburst, которую OpenAI советует там, где важна точность правки:

bash
curl --fail-with-body --silent --show-error \
  https://api.openai.com/v1/images/edits \
  -H "Authorization: Bearer $OPENAI_API_KEY" \
  -F 'model=gpt-image-2.5-sunburst' \
  -F 'image=@product.png' \
  -F 'prompt=Убери фон вокруг товара. Сохрани форму, пропорции, цвета и надпись на этикетке. Полностью прозрачный фон, без подложки, без шахматной сетки, без тени.' \
  -F 'background=transparent' \
  -F 'output_format=png' \
  --output edit-response.json

python3 save_image.py edit-response.json product-cutout.png
python3 check_alpha.py product-cutout.png

Важная оговорка: результат правки — заново сгенерированное изображение, а не вырезанный фрагмент исходника. Маска служит подсказкой, попиксельного совпадения никто не обещает, а по собственным ограничениям OpenAI точное расположение текста и соблюдение фирменного стиля всё ещё могут сбиваться. Для каталога, где этикетка и форма товара должны совпадать с оригиналом, надёжнее обтравка: специализированный инструмент удаления фона или ручная маска. При каждой следующей правке повторяйте в промпте требование прозрачного фона — иначе модель может вернуть подложку. Как передавать файлы и маску, разобрано в статье «OpenAI Image Editing API: правка изображений через images.edit».

Фон не прозрачный: симптом, причина, действие

Что вы видитеВероятная причинаЧто сделать
Transparent background is not supported for this modelЗапрос ушёл на сервис, который не передаёт параметрПроверить базовый URL; сравнить с запросом на api.openai.com с теми же параметрами
Ошибка при output_format: "jpeg" или непрозрачный JPEGJPEG не хранит альфа-каналЗапросить png или webp
В ответе background: "opaque"Прозрачность не запрошена или не применилась; auto не равно transparentПроверить, что в теле запроса стоит "transparent"
В ответе transparent, но на картинке сцена или цветной фонПромпт описывает фонУбрать из промпта описание окружения, прямо попросить полностью прозрачный фон
Скрипт: все пиксели непрозрачныФайл без прозрачности (или был пересохранён без альфы)Проверить ответ API и все шаги обработки после него
Скрипт: все пиксели прозрачныПустое изображениеПовторить генерацию, уточнив объект
Шахматная сетка видна на обеих копияхСетка нарисована в пикселяхДобавить в промпт запрет на шахматную сетку
Белый или чёрный фон только в просмотрщикеПросмотрщик подставляет свой фонНичего не менять: смотреть копии -light и -dark
Светлый ореол или грязный крайПроблема контура, а не альфа-каналаСравнить на обеих копиях; попробовать другой уровень качества или другую модель 2.5
После следующей правки появился фонВ новом промпте не повторили требование прозрачностиПовторить background=transparent и требование в тексте
Исходник прозрачный, на сайте — нетАльфу выбросили конвертер, CMS или CDNПроверять файл после каждого этапа, найти первый с потерей

Частые вопросы

Поддерживает ли GPT Image 2 прозрачный фон?

Да, в API — в статусе preview, с background: "transparent" и форматом PNG или WebP. Модели GPT Image 2.5 Flare и Sunburst поддерживают прозрачность без этой пометки, и для новых проектов OpenAI советует именно их.

Почему мой PNG с белым фоном?

PNG может хранить прозрачность, но не обязан. Если картинку сгенерировали без прозрачного фона, конвертировали из JPEG или пересохранили в RGB, белый фон записан в пикселях. Скрипт check_alpha.py покажет, есть ли в файле прозрачные пиксели; если их нет, файл нужно сгенерировать заново с background: "transparent".

Стоит ли прозрачный фон дороже?

В прайсе OpenAI отдельной платы за background: "transparent" нет. Цена зависит от модели, размера и качества.

Можно ли просто не упоминать фон в промпте?

Надёжнее упомянуть, но только как требование: «изолированный объект на полностью прозрачном фоне, без сцены, подложки, шахматной сетки и тени». OpenAI рекомендует именно такую формулировку; описание окружения, напротив, может перебить параметр.

Нашли ошибку или столкнулись с проблемой, которой нет в статье? Отправьте адрес статьи и описание на hi@laozhang.ai. Мы проверим и обновим текст.