Гид по технологиям

Генерация изображений DALL·E в React

7 min read Web‑разработка Обновлено 17 Dec 2025
Генерация изображений DALL·E в React
Генерация изображений DALL·E в React

Логотип OpenAI на стилизованном фоне

Искусственный интеллект стремительно развивается и теперь умеет строить впечатляющие изображения. Один из вирусных примеров показал известных людей в изношенной одежде на фоне трущоб — поражает уровень детализации как людей, так и окружения.

Модели вроде DALL·E и Midjourney отвечают за генерацию подобных изображений: они принимают текстовое описание и возвращают картинку, соответствующую запросу.

В этом материале вы найдёте пошаговую инструкцию по интеграции OpenAI DALL·E API в React-приложение, рекомендации по безопасности, шаблоны для сервера-прокси и практики для улучшения качества изображений.

Что такое DALL·E и как он генерирует изображения

Кратко: DALL·E — это модель, которая на основе текстового описания создает изображение. Технически процесс можно упростить так: модель анализирует текст (NLP), кодирует смысл в представления, затем по этим представлениям создаётся изображение через механизмы генерации (например, диффузионные процессы или трансформеры, применяемые к визуальным данным).

Важное упрощение: вы не обязаны знать внутреннюю математику. Для практической интеграции достаточно понимать вход (prompt), параметры (размер, количество вариантов) и результат (URL или бинарные данные изображения).

Домашняя страница DALL-E Playground

Оптимизация промптов и обработка ошибок — ключевые задачи при работе с API.

Начало работы с DALL·E API

Чтобы использовать OpenAI DALL·E API в проекте React, нужен API-ключ OpenAI. Зайдите в личный кабинет OpenAI, откройте настройки API и создайте секретный ключ.

Страница консоли разработчика OpenAI

Важно: не храните секретные ключи в клиентском коде, доступном в браузере — ключи надо держать на сервере или использовать прокси. Ниже показаны безопасные архитектуры и пример прокси.

Страница настроек аккаунта OpenAI

На странице API Keys нажмите Create New Secret Key, дайте имя ключу и сохраните значение. После закрытия модального окна ключ показать больше нельзя — скопируйте его безопасно.

Создание React проекта

Запустите команды в терминале (нужен Node.js):

mkdir React-project
cd React-project
npx create-react-app image-generator-app
cd image-generator-app
npm start

Альтернатива: Vite — быстрее на старте и рекомендуем для новых проектов.

Примечание: инструкции по установке Node.js доступны для Windows и Ubuntu на официальных ресурсах.

Установка библиотеки OpenAI и файл окружения

В каталоге проекта установите клиент OpenAI для Node.js:

npm install openai

Создайте файл .env (в корне проекта) для локальных переменных среды. Пример для локальной разработки (но не добавляйте .env в публичный репозиторий):

REACT_APP_OPENAI_API_KEY="ВАШ_API_КЛЮЧ"

Важно: в чистом клиентском приложении React этот ключ будет встроен в бандл и доступен в браузере. Это небезопасно для продакшена. Рекомендация — выносить вызовы к OpenAI API на сервер или на сервер-прокси.

Архитектура: клиент и безопасный сервер-прокси

Рекомендуемая архитектура для продакшена:

  • Клиент (React) отправляет короткий запрос (prompt) на ваш бэкенд.
  • Бэкенд (например, Node/Express) содержит SECRET_KEY и вызывает OpenAI API.
  • Бэкенд возвращает клиенту уже готовый URL изображения или бинарные данные.

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

Пример простого прокси на Node.js (Express). Сохраните как server.js и запустите на бэкенде:

const express = require('express');
const bodyParser = require('body-parser');
const fetch = require('node-fetch');
const app = express();
app.use(bodyParser.json());

const OPENAI_KEY = process.env.OPENAI_API_KEY; // храните это в переменных окружения сервера

app.post('/api/generate-image', async (req, res) => {
  const { prompt, size = '512x512' } = req.body;
  try {
    const response = await fetch('https://api.openai.com/v1/images/generations', {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json',
        'Authorization': `Bearer ${OPENAI_KEY}`
      },
      body: JSON.stringify({ prompt, n: 1, size })
    });
    const data = await response.json();
    res.json(data);
  } catch (err) {
    console.error(err);
    res.status(500).json({ error: 'Внутренняя ошибка сервера' });
  }
});

app.listen(4000, () => console.log('Proxy server listening on port 4000'));

Клиентский React будет обращаться к /api/generate-image, и вам не нужно раскрывать OPENAI_API_KEY в браузере.

Важно: если вы тестируете локально и используете REACT_APP_OPENAI_API_KEY в клиенте, делайте это только для ознакомления.

Создание компонента ImageGenerator в React

Создайте папку src/components и файл ImageGenerator.js. Ниже — пример компонента, адаптированный для вызова вашего сервер-прокси (без прямого использования ключа в браузере).

import '../App.css';
import { useState } from 'react';

function ImageGenerator() {
  const [prompt, setPrompt] = useState('');
  const [result, setResult] = useState('');
  const [loading, setLoading] = useState(false);
  const [placeholder, setPlaceholder] = useState('Опишите изображение подробно, например: "кот в шляпе, акварель, дневной свет"');

  const generateImage = async () => {
    if (!prompt.trim()) return;
    setPlaceholder(`Поиск ${prompt}...`);
    setLoading(true);

    try {
      const res = await fetch('/api/generate-image', {
        method: 'POST',
        headers: { 'Content-Type': 'application/json' },
        body: JSON.stringify({ prompt })
      });
      const data = await res.json();
      setLoading(false);
      // структура ответа может отличаться в зависимости от версии API
      setResult(data.data && data.data[0] ? data.data[0].url : '');
    } catch (error) {
      setLoading(false);
      console.error('Error generating image:', error);
      setResult('');
    }
  };

  return (
    
{loading ? ( <>

Генерация изображения... Пожалуйста, подождите...

) : ( <>

Сгенерировать изображение через OpenAI