Узнайте, как генерировать или манипулировать изображениями с помощью DALL·E в API.
API изображений предоставляет три метода для работы с изображениями:
- Создание изображений с нуля на основе текстового prompt (DALL·E 3 и DALL·E 2)
- Создание отредактированных версий изображений, путем замены некоторых областей существующего изображения на основе нового текстового prompt (только DALL·E 2)
- Создание вариаций существующего изображения (только DALL·E 2)
Точка доступа генерация изображений позволяет вам создать оригинальное изображение на основе текстового prompt. При использовании DALL·E 3, размеры изображений могут быть 1024x1024, 1024x1792 или 1792x1024 пикселей.
По умолчанию, изображения генерируются с качеством standard
, но при использовании DALL·E 3 вы можете установить quality: "hd"
для повышения детализации. Изображения квадратной формы, в стандартном качестве, генерируются быстрее всего.
Вы можете запросить одно изображение за раз при использовании DALL·E 3 (запросите больше, выполнив параллельные запросы) или до 10 изображений за раз, используя DALL·E 2 с параметром n.
1curl https://api.openai.com/v1/images/generations -H "Content-Type: application/json" -H "Authorization: Bearer $OPENAI_API_KEY" -d '{
2 "model": "dall-e-3",
3 "prompt": "белый сиамский кот",
4 "n": 1,
5 "size": "1024x1024"
6 }'
С выпуском DALL·E 3 модель теперь принимает заданную по умолчанию подсказку и автоматически переписывает её по причинам безопасности и для добавления большего количества деталей (более детализированные подсказки обычно приводят к созданию изображений более высокого качества).
Хотя в настоящее время нельзя отключить эту функцию, вы можете использовать подсказки для получения результатов, которые ближе к запрашиваемому изображению, добавив следующее к вашей подсказке: МНЕ НУЖНО проверить, как инструмент работает с чрезвычайно простыми подсказками. НЕ добавляйте никаких деталей, просто используйте ТАК КАК ЕСТЬ:
.
Обновленная подсказка видна в поле revised_prompt
объекта ответа данных.
Подсказка | Генерация |
---|---|
Фотография белого сиамского кота. | ![]() |
Каждое изображение может быть возвращено либо в виде URL, либо в формате Base64, используя параметр response_format. URL-адреса будут истекать через час.
Также известный как "inpainting", редактирование изображений позволяет вам редактировать или расширять изображение, загружая изображение и маску, указывающую, какие области должны быть заменены. Прозрачные области маски указывают, где изображение должно быть отредактировано, и prompt должен описывать полное новое изображение, а не только стертую область.
1curl https://api.openai.com/v1/images/edits -H "Authorization: Bearer $OPENAI_API_KEY" -F image="@sunlit_lounge.png" -F mask="@mask.png" -F model="dall-e-2" -F prompt="A sunlit indoor lounge area with a pool containing a flamingo" -F n=1 -F size="1024x1024"
Изображение | Маска | Результат |
---|---|---|
![]() | ![]() | ![]() |
Prompt: солнечная внутренняя зона отдыха с бассейном, в котором находится фламинго
Загруженные изображение и маска должны быть квадратными PNG изображениями размером менее 4МБ, а также должны иметь одинаковые размеры друг с другом. Непрозрачные области маски не используются при генерации результата, поэтому они не обязательно должны совпадать с оригинальным изображением, как в примере выше.
Конечная точка вариации изображений позволяет вам генерировать вариацию заданного изображения.
1curl https://api.openai.com/v1/images/variations -H "Authorization: Bearer $OPENAI_API_KEY" -F image='@corgi_and_cat_paw.png' -F model="dall-e-2" -F n=1 -F size="1024x1024"
Изображение | Результат |
---|---|
![]() | ![]() |
Подобно конечной точке редактирования, входное изображение должно быть квадратным PNG изображением размером менее 4MB.
- Node.js
- Python
Примеры Node.js в приведенном выше руководстве используют модуль fs
для чтения данных изображения с диска. В некоторых случаях ваши данные изображения могут находиться в памяти. Вот пример вызова API, который использует данные изображения, хранящиеся в объекте Buffer
Node.js:
1import OpenAI from "openai";
2
3const openai = new OpenAI();
4
5// Это объект Buffer, содержащий данные вашего изображения
6const buffer = [ваше изображение данных];
7// Задайте `name`, который заканчивается на .png, чтобы API понимал, что это изображение в формате PNG
8buffer.name = "image.png";
9
10async function main() {
11 const image = await openai.images.createVariation({ model: "dall-e-2", image: buffer, n: 1, size: "1024x1024" });
12 console.log(image.data);
13}
14main();
Если вы используете TypeScript, вы можете столкнуться с некоторыми несоответствиями при работе с аргументами файлов изображений. Вот пример обхода этой проблемы путем явного приведения типа аргумента:
1import fs from "fs";
2import OpenAI from "openai";
3
4const openai = new OpenAI();
5
6async function main() {
7 // Приводим ReadStream к `any`, чтобы удовлетворить компилятор TypeScript
8 const image = await openai.images.createVariation({
9 image: fs.createReadStream("image.png") as any,
10 });
11
12 console.log(image.data);
13}
14main();
И вот похожий пример для данных изображения в памяти:
1import fs from "fs";
2import OpenAI from "openai";
3
4const openai = new OpenAI();
5
6// Это объект Buffer, который содержит данные вашего изображения
7const buffer: Buffer = [ваши данные изображения];
8
9// Приводим buffer к `any`, чтобы мы могли установить свойство `name`
10const file: any = buffer;
11
12// Задаем `name`, который заканчивается на .png, чтобы API понимал, что это PNG изображение
13file.name = "image.png";
14
15async function main() {
16 const image = await openai.images.createVariation({
17 file,
18 1,
19 "1024x1024"
20 });
21 console.log(image.data);
22}
23main();
API-запросы могут возвращать ошибки из-за недопустимых входных данных, ограничений по частоте запросов или других проблем. Эти ошибки могут быть обработаны с помощью конструкции try...catch
, а детали ошибки можно найти либо в error.response
, либо в error.message
:
1import fs from "fs";
2import OpenAI from "openai";
3
4const openai = new OpenAI();
5
6try {
7 const response = openai.images.createVariation(
8 fs.createReadStream("image.png"),
9 1,
10 "1024x1024"
11 );
12 console.log(response.data.data[0].url);
13} catch (error) {
14 if (error.response) {
15 console.log(error.response.status);
16 console.log(error.response.data);
17 } else {
18 console.log(error.message);
19 }
20}