{"id":65988,"date":"2023-10-02T13:10:56","date_gmt":"2023-10-02T12:10:56","guid":{"rendered":"https:\/\/kinsta.com\/de\/?p=65988&#038;preview=true&#038;preview_id=65988"},"modified":"2023-10-05T07:10:52","modified_gmt":"2023-10-05T06:10:52","slug":"ai-bild-generator","status":"publish","type":"post","link":"https:\/\/kinsta.com\/de\/blog\/ai-bild-generator\/","title":{"rendered":"Erstellen einer React-Anwendung f\u00fcr KI-gest\u00fctzte Bilderzeugung mit der OpenAI DALL-E API"},"content":{"rendered":"<p>In der dynamischen Technologielandschaft, in der Innovationen die Grenzen des M\u00f6glichen immer weiter verschieben, h\u00f6rt die k\u00fcnstliche Intelligenz (KI) nicht auf, unsere Fantasie zu befl\u00fcgeln.<\/p>\n<p>Unter KI versteht man die Simulation menschlicher Intelligenzprozesse durch Computersysteme. Zu diesen Prozessen geh\u00f6ren Aufgaben wie Lernen, Denken, Probleml\u00f6sung, Wahrnehmung, <a href=\"https:\/\/kinsta.com\/de\/blog\/ki-inhalt-erkennung\/\">Sprachverst\u00e4ndnis<\/a> und Entscheidungsfindung.<\/p>\n<p>Heute haben Einzelpersonen und Unternehmen verschiedene KI-Modelle entwickelt und trainiert, um bestimmte Aufgaben besser als Menschen in Echtzeit zu erledigen. Unter den unz\u00e4hligen Anwendungen von KI ist ein besonders faszinierender Bereich die KI-gest\u00fctzte Bilderzeugung.<\/p>\n<div><\/div><kinsta-auto-toc heading=\"Table of Contents\" exclude=\"last\" list-style=\"arrow\" selector=\"h2\" count-number=\"-1\"><\/kinsta-auto-toc>\n<h2>Was du bauen wirst<\/h2>\n<p>In diesem Leitfaden wird erkl\u00e4rt, wie du eine React-Anwendung erstellst, die sich \u00fcber ein <a href=\"https:\/\/kinsta.com\/de\/blog\/was-ist-node-js\/\">Node.js-Backend<\/a> nahtlos in die <a href=\"https:\/\/labs.openai.com\/\" target=\"_blank\" rel=\"noopener noreferrer\">OpenAI DALL-E<\/a> API integriert und auf der Grundlage von Textaufforderungen fesselnde Bilder erzeugt.<\/p>\n<figure style=\"width: 1600px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/09\/ai-image-generator-demo.gif\" alt=\"KI-Bildgenerator in Aktion, der mithilfe der DALL-E API lebendige und kreative Bilder erzeugt\" width=\"1600\" height=\"877\"><figcaption class=\"wp-caption-text\">KI-Bildgenerator in Aktion, der mithilfe der DALL-E API lebendige und kreative Bilder erzeugt<\/figcaption><\/figure>\n<h3>Voraussetzungen<\/h3>\n<p>Um an diesem Projekt mitzuarbeiten, solltest du Folgendes mitbringen:<\/p>\n<ul>\n<li>Grundlegendes Verst\u00e4ndnis von <a href=\"https:\/\/kinsta.com\/de\/blog\/was-ist-html\/\">HTML<\/a>, <a href=\"https:\/\/kinsta.com\/de\/blog\/css-best-practices\/\">CSS<\/a> und <a href=\"https:\/\/kinsta.com\/javascript\/\">JavaScript<\/a><\/li>\n<li>Grundkenntnisse in <a href=\"https:\/\/kinsta.com\/de\/blog\/was-ist-react-js\/\">React<\/a> und <a href=\"https:\/\/kinsta.com\/de\/blog\/deno-vs-node-js\/\">Node.js<\/a><\/li>\n<li>Node.js und npm (<a href=\"https:\/\/kinsta.com\/de\/blog\/was-ist-npm\/\">Node Package Manager<\/a>) oder yarn auf deinem Computer installiert haben<\/li>\n<\/ul>\n<h2>Was ist die OpenAI DALL-E API?<\/h2>\n<p>Die OpenAI API ist eine Cloud-basierte Plattform, die <a href=\"https:\/\/kinsta.com\/de\/blog\/arten-von-entwicklern\/\">Entwicklern<\/a> Zugang zu den vortrainierten KI-Modellen von OpenAI wie DALL-E und GPT-3 gew\u00e4hrt (wir haben dieses Modell verwendet, um <a href=\"https:\/\/kinsta.com\/de\/blog\/chatgpt-klon\/\">einen ChatGPT-Klon<\/a> mit dem Code in <a href=\"https:\/\/kinsta.com\/de\/blog\/chatgpt-klon\/\">diesem Git-Repository zu erstellen<\/a>). Damit k\u00f6nnen Entwickler KI-Funktionen wie Zusammenfassungen, \u00dcbersetzungen, Bilderzeugung und Modifikationen in ihre Programme einbauen, ohne ihre Modelle entwickeln und trainieren zu m\u00fcssen.<\/p>\n<p>Um die OpenAI API zu nutzen, musst du ein Konto mit deinem Google-Konto oder deiner E-Mail-Adresse auf der <a href=\"https:\/\/platform.openai.com\/\" target=\"_blank\" rel=\"noopener noreferrer\">OpenAI-Website<\/a> erstellen und einen API-Schl\u00fcssel anfordern. Um einen API-Schl\u00fcssel zu erhalten, klickst du oben rechts auf der Website auf <strong>Personal<\/strong> und w\u00e4hlst dann <strong>API-Schl\u00fcssel anzeigen<\/strong>.<\/p>\n<figure style=\"width: 1600px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/09\/create-openai-api-secret-key.jpg\" alt=\"Der Prozess der Erstellung eines geheimen OpenAI-API-Schl\u00fcssels\" width=\"1600\" height=\"877\"><figcaption class=\"wp-caption-text\">Der Prozess der Erstellung eines geheimen OpenAI-API-Schl\u00fcssels<\/figcaption><\/figure>\n<p>Klicke auf die Schaltfl\u00e4che <strong>Neuen geheimen Schl\u00fcssel erstellen<\/strong> und <a href=\"https:\/\/kinsta.com\/de\/blog\/passwort-manager\/\">speichere den Schl\u00fcssel<\/a> irgendwo. Du wirst ihn in dieser Anwendung verwenden, um mit der DALL-E API von OpenAI zu interagieren.<\/p>\n<h2>Einrichten der Entwicklungsumgebung<\/h2>\n<p>Du kannst eine React-Anwendung von Grund auf neu erstellen und deine eigene Schnittstelle entwickeln oder du kannst dir unsere <a href=\"https:\/\/kinsta.com\/de\/thema\/git\/\">Git-Starter-Vorlage<\/a> schnappen, indem du diese Schritte befolgst:<\/p>\n<ol start=\"1\">\n<li>Besuche das <a href=\"https:\/\/github.com\/kinsta\/ai-img-generator\" target=\"_blank\" rel=\"noopener noreferrer\">GitHub-Repository<\/a> f\u00fcr dieses Projekt.<\/li>\n<li>W\u00e4hle <strong>Diese Vorlage verwenden<\/strong> &gt; <strong>Neues Repository erstellen<\/strong>, um den Startcode in ein Repository in deinem GitHub-Konto zu kopieren (aktiviere das Kontrollk\u00e4stchen, um <strong>alle Zweige einzuschlie\u00dfen<\/strong>).<\/li>\n<li>Ziehe das Repository auf deinen lokalen Computer und wechsle mit dem Befehl in den <a href=\"https:\/\/github.com\/kinsta\/ai-img-generator\/tree\/starter-files\" target=\"_blank\" rel=\"noopener noreferrer\">starter-files-Zweig<\/a>: <code>git checkout starter-files<\/code>.<\/li>\n<\/ol>\n<ol start=\"4\">\n<li>Installiere die notwendigen Abh\u00e4ngigkeiten, indem du den Befehl <code>npm install<\/code> ausf\u00fchrst.<\/li>\n<\/ol>\n<p>Sobald die Installation abgeschlossen ist, kannst du das Projekt auf deinem lokalen Computer mit <code>npm run start<\/code> starten. Dadurch wird das Projekt unter <a href=\"http:\/\/localhost:3000\/\" target=\"_blank\" rel=\"noopener noreferrer\">http:\/\/localhost:3000\/<\/a> verf\u00fcgbar.<\/p>\n<figure style=\"width: 1600px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/09\/ai-image-generator-ui.jpg\" alt=\"Benutzeroberfl\u00e4che einer KI-Bildgenerator-Anwendung, die die Leistungsf\u00e4higkeit der k\u00fcnstlichen Intelligenz bei der Bilderstellung zeigt\" width=\"1600\" height=\"877\"><figcaption class=\"wp-caption-text\">Benutzeroberfl\u00e4che einer KI-Bildgenerator-Anwendung, die die Leistungsf\u00e4higkeit der k\u00fcnstlichen Intelligenz bei der Bilderstellung zeigt<\/figcaption><\/figure>\n<h3>Das Verst\u00e4ndnis der Projektdateien<\/h3>\n<p>In diesem Projekt haben wir alle notwendigen Abh\u00e4ngigkeiten f\u00fcr deine React-Anwendung hinzugef\u00fcgt. Hier ist eine \u00dcbersicht \u00fcber die installierten Dateien:<\/p>\n<ul>\n<li><a href=\"https:\/\/www.npmjs.com\/package\/file-server\" target=\"_blank\" rel=\"noopener noreferrer\">file-server<\/a>: Diese Hilfsbibliothek vereinfacht das Herunterladen der erzeugten Bilder. Sie ist mit dem Download-Button verkn\u00fcpft und sorgt f\u00fcr ein reibungsloses Nutzererlebnis.<\/li>\n<li><a href=\"https:\/\/www.npmjs.com\/package\/uuid\" target=\"_blank\" rel=\"noopener noreferrer\">uuid<\/a>: Diese Bibliothek weist jedem Bild eine eindeutige Kennung zu. Dadurch wird verhindert, dass Bilder denselben Standard-Dateinamen haben, und die Ordnung und \u00dcbersichtlichkeit bleibt erhalten.<\/li>\n<li><a href=\"https:\/\/www.npmjs.com\/package\/react-icons\" target=\"_blank\" rel=\"noopener noreferrer\">react-icons<\/a>: Diese Bibliothek ist in das Projekt integriert und bindet m\u00fchelos Icons ein, um die visuelle Attraktivit\u00e4t deiner Anwendung zu verbessern.<\/li>\n<\/ul>\n<p>Das Herzst\u00fcck deiner React-Anwendung ist der Ordner <strong>src<\/strong>. Hier befindet sich der wesentliche JavaScript-Code f\u00fcr Webpack. Wir wollen die Dateien und Ordner im <strong>src<\/strong>-Ordner kennenlernen:<\/p>\n<ul>\n<li><strong>assets:<\/strong> In diesem Verzeichnis findest du die Bilder und das Loader-GIF, die im gesamten Projekt verwendet werden.<\/li>\n<li><strong>data:<\/strong> Dieser Ordner enth\u00e4lt eine <strong>index.js<\/strong>-Datei, die eine Reihe von 30 Prompts exportiert. Diese Prompts k\u00f6nnen verwendet werden, um verschiedene und zuf\u00e4llige Bilder zu erzeugen. Du kannst sie gerne bearbeiten.<\/li>\n<li><strong>index.css:<\/strong> Hier werden die Stile, die in diesem Projekt verwendet werden, gespeichert.<\/li>\n<\/ul>\n<h4>Den Utils-Ordner verstehen<\/h4>\n<p>In diesem Ordner definiert die Datei <strong>index.js<\/strong> zwei wiederverwendbare Funktionen. Die erste Funktion w\u00e4hlt nach dem Zufallsprinzip die Prompts aus, die verschiedene Bilder beschreiben, die erzeugt werden k\u00f6nnen.<\/p>\n<pre><code class=\"language-js\">import { randomPrompts } from '..\/data';\n\nexport const getRandomPrompt = () =&gt; {\n    const randomIndex = Math.floor(Math.random() * randomPrompts.length);\n    const randomPrompt = randomPrompts[randomIndex];\n\n    return randomPrompt;\n}<\/code><\/pre>\n<p>Die zweite Funktion k\u00fcmmert sich um den Download der erzeugten Bilder, indem sie die Abh\u00e4ngigkeit von <strong>file-saver<\/strong> nutzt. Beide Funktionen sind modular und effizient aufgebaut und k\u00f6nnen bei Bedarf bequem in Komponenten importiert werden.<\/p>\n<pre><code class=\"language-js\">import FileSaver from 'file-saver';\nimport { v4 as uuidv4 } from 'uuid';\n\nexport async function downloadImage(photo) {\n    const _id = uuidv4();\n    FileSaver.saveAs(photo, `download-${_id}.jpg`);\n}<\/code><\/pre>\n<p>Im obigen Code gibt die <strong>uuid<\/strong>-Abh\u00e4ngigkeit jeder erzeugten Bilddatei eine eindeutige ID, damit sie nicht denselben Dateinamen haben.<\/p>\n<h4>Zum Verst\u00e4ndnis der Komponenten<\/h4>\n<p>Das sind kleine Codebl\u00f6cke, die voneinander getrennt sind, damit dein Code einfach zu pflegen und zu verstehen ist. F\u00fcr dieses Projekt wurden drei Komponenten erstellt: <strong>Header.jsx<\/strong>, <strong>Footer.jsx<\/strong> und <strong>Form.jsx<\/strong>. Die Hauptkomponente ist die Komponente Form, in der die Eingaben empfangen und an die Datei <strong>App.jsx<\/strong> weitergegeben werden. Die Funktion <code>generateImage<\/code> wurde als <code>onClick<\/code> -Ereignis zur Schaltfl\u00e4che <strong>Generate Image<\/strong> hinzugef\u00fcgt.<\/p>\n<p>In der Formularkomponente wird ein Status erstellt, um die Eingabeaufforderung zu speichern und zu aktualisieren. Au\u00dferdem gibt es eine Funktion, mit der du auf ein zuf\u00e4lliges Symbol klicken kannst, um die zuf\u00e4lligen Prompts zu generieren. Dies ist mit der Funktion <code>handleRandomPrompt<\/code> m\u00f6glich, die die Funktion <code>getRandomPrompt<\/code> verwendet, die du bereits eingerichtet hast. Wenn du auf das Symbol klickst, wird ein zuf\u00e4lliger Prompt abgerufen und der Status damit aktualisiert:<\/p>\n<pre><code class=\"language-jsx\">const handleRandomPrompt = () =&gt; {\n    const randomPrompt = getRandomPrompt();\n    setPrompt(randomPrompt)\n}<\/code><\/pre>\n<h4>Die Datei App.jsx verstehen<\/h4>\n<p>Hier befindet sich der gr\u00f6\u00dfte Teil des Codes. Alle Komponenten werden hier zusammengef\u00fchrt. Es gibt auch einen Bereich, in dem das erzeugte Bild angezeigt wird. Wenn noch kein Bild erstellt wurde, wird ein Platzhalterbild (Vorschaubild) angezeigt.<\/p>\n<p>In dieser Datei werden zwei Zust\u00e4nde verwaltet:<\/p>\n<ul>\n<li><code>isGenerating<\/code>: Hier wird festgehalten, ob gerade ein Bild erstellt wird. In der Standardeinstellung ist er auf false gesetzt.<\/li>\n<li><code>generatedImage<\/code>: Dieser Status speichert Informationen \u00fcber das Bild, das erstellt wurde.<\/li>\n<\/ul>\n<p>Au\u00dferdem wird die Funktion <code>downloadImage<\/code> importiert, mit der du den Download des erzeugten Bildes ausl\u00f6sen kannst, wenn du auf die Schaltfl\u00e4che <strong>Download<\/strong> klickst:<\/p>\n<pre><code class=\"language-jsx\">&lt;button\n    className=\"btn\"\n    onClick={() =&gt; downloadImage(generatedImage.photo)}\n&gt;<\/code><\/pre>\n<p>Jetzt, wo du die Startdateien verstanden und dein Projekt eingerichtet hast, kannst du mit der Logik der Anwendung beginnen. Beginnen wir nun mit der Logik dieser Anwendung.<\/p>\n<h2>Bilder mit der DALL-E API von OpenAI generieren<\/h2>\n<p>Um die M\u00f6glichkeiten von OpenAIs DALL-E API zu nutzen, musst du mit Node.js einen Server einrichten. Innerhalb dieses Servers erstellst du eine POST-Route. Diese Route ist daf\u00fcr zust\u00e4ndig, den von deiner React-Anwendung gesendeten Prompt-Text zu empfangen und daraus ein Bild zu erzeugen.<\/p>\n<p>Um loszulegen, installierst du die notwendigen Abh\u00e4ngigkeiten in deinem Projektverzeichnis, indem du den folgenden Befehl ausf\u00fchrst:<\/p>\n<pre><code class=\"language-bash\">npm i express cors openai<\/code><\/pre>\n<p>Installiere au\u00dferdem die folgenden Abh\u00e4ngigkeiten als Dev-Abh\u00e4ngigkeiten. Diese Tools helfen dir beim Einrichten deines <a href=\"https:\/\/kinsta.com\/de\/blog\/erstelle-slackbot-website-management\/\">Node.js-Servers<\/a>:<\/p>\n<pre><code class=\"language-bash\">npm i -D dotenv nodemon<\/code><\/pre>\n<p>Die installierten Abh\u00e4ngigkeiten werden im Folgenden erkl\u00e4rt:<\/p>\n<ul>\n<li><a href=\"https:\/\/www.npmjs.com\/package\/express\" target=\"_blank\" rel=\"noopener noreferrer\">express<\/a>: Diese Bibliothek hilft beim Erstellen eines Servers in Node.js.<\/li>\n<li><a href=\"https:\/\/www.npmjs.com\/package\/cors\" target=\"_blank\" rel=\"noopener noreferrer\">cors<\/a>: CORS erm\u00f6glicht eine sichere Kommunikation zwischen verschiedenen Domains.<\/li>\n<li><a href=\"https:\/\/www.npmjs.com\/package\/openai\" target=\"_blank\" rel=\"noopener noreferrer\">openai<\/a>: Diese Abh\u00e4ngigkeit erm\u00f6glicht dir den Zugriff auf die DALL-E API von OpenAI.<\/li>\n<li><a href=\"https:\/\/www.npmjs.com\/package\/dotenv\" target=\"_blank\" rel=\"noopener noreferrer\">dotenv<\/a>: dotenv hilft dir bei der Verwaltung von Umgebungsvariablen.<\/li>\n<li><a href=\"https:\/\/www.npmjs.com\/package\/nodemon\" target=\"_blank\" rel=\"noopener noreferrer\">nodemon<\/a>: nodemon ist ein Entwicklungswerkzeug, das \u00c4nderungen an deinen Dateien \u00fcberwacht und den Server automatisch neu startet.<\/li>\n<\/ul>\n<p>Wenn die Installation erfolgreich war, erstelle eine <strong>server.js<\/strong>-Datei im Stammverzeichnis deines Projekts. Hier wird dein gesamter Servercode gespeichert.<\/p>\n<p>Importiere in der Datei <strong>server.js<\/strong> die <a href=\"https:\/\/kinsta.com\/de\/blog\/node-js-bibliotheken\/\">Bibliotheken<\/a>, die du gerade installiert hast, und instanziere sie:<\/p>\n<pre><code class=\"language-js\">\/\/ Import the necessary libraries\nconst express = require('express');\nconst cors = require('cors');\nrequire('dotenv').config();\nconst OpenAI = require('openai');\n\n\/\/ Create an instance of the Express application\nconst app = express();\n\n\/\/ Enable Cross-Origin Resource Sharing (CORS)\napp.use(cors());\n\n\/\/ Configure Express to parse JSON data and set a data limit\napp.use(express.json({ limit: '50mb' }));\n\n\/\/ Create an instance of the OpenAI class and provide your API key\nconst openai = new OpenAI({\n    apiKey: process.env.OPENAI_API_KEY,\n});\n\n\/\/ Define a function to start the server\nconst startServer = async () =&gt; {\n    app.listen(8080, () =&gt; console.log('Server started on port 8080'));\n};\n\n\/\/ Call the startServer function to begin listening on the specified port\nstartServer();<\/code><\/pre>\n<p>Im obigen Code importierst du die notwendigen Bibliotheken. Dann richtest du mit <code>const app = express();<\/code> eine Instanz der Express-Anwendung ein. Danach aktivierst du CORS. Als N\u00e4chstes wird Express so konfiguriert, dass es eingehende JSON-Daten verarbeitet, wobei eine Datengr\u00f6\u00dfenbeschr\u00e4nkung von <code>50mb<\/code> festgelegt wird.<\/p>\n<p>Anschlie\u00dfend wird eine Instanz der OpenAI-Klasse unter Verwendung deines OpenAI-API-Schl\u00fcssels erstellt. Erstelle eine <strong>.env<\/strong>-Datei im Stammverzeichnis deines Projekts und f\u00fcge deinen API-Schl\u00fcssel \u00fcber die Variable <code>OPENAI_API_KEY<\/code> hinzu. Schlie\u00dflich definierst du eine asynchrone <code>startServer<\/code> Funktion und rufst sie auf, um den Server in Gang zu setzen.<\/p>\n<p>Jetzt hast du deine <strong>server.js<\/strong>-Datei konfiguriert. Erstellen wir nun eine POST-Route, die du in deiner React-Anwendung verwenden kannst, um mit diesem Server zu interagieren:<\/p>\n<pre><code class=\"language-js\">app.post('\/api', async (req, res) =&gt; {\n    try {\n        const { prompt } = req.body;\n        const response = await openai.images.generate({\n            prompt,\n            n: 1,\n            size: '1024x1024',\n            response_format: 'b64_json',\n        });\n        const image = response.data[0].b64_json;\n        res.status(200).json({ photo: image });\n    } catch (error) {\n        console.error(error);\n    }\n});<\/code><\/pre>\n<p>In diesem Code ist die Route auf <code>\/api<\/code> eingestellt und soll eingehende POST-Anfragen bearbeiten. In der Callback-Funktion der Route erh\u00e4ltst du die von deiner React-Anwendung gesendeten Daten \u00fcber <code>req.body<\/code> &#8211; genauer gesagt \u00fcber den Wert <code>prompt<\/code>.<\/p>\n<p>Anschlie\u00dfend wird die Methode <code>images.generate<\/code> der OpenAI-Bibliothek aufgerufen. Diese Methode nimmt die angegebene Eingabeaufforderung entgegen und erzeugt als Antwort ein Bild. Parameter wie <code>n<\/code> bestimmen die Anzahl der zu erzeugenden Bilder (hier nur eines), <code>size<\/code> gibt die Abmessungen des Bildes an und <code>response_format<\/code> gibt das Format an, in dem die Antwort geliefert werden soll (in diesem Fall<code>b64_json<\/code> ).<\/p>\n<p>Nachdem du das Bild erzeugt hast, extrahierst du die Bilddaten aus der Antwort und speicherst sie in der Variablen <code>image<\/code>. Dann schickst du eine JSON-Antwort mit den erzeugten Bilddaten zur\u00fcck an die React-Anwendung und setzt den HTTP-Status mit <code>res.status(200).json({ photo: image })<\/code> auf <code>200<\/code> (was einen Erfolg anzeigt).<\/p>\n<p>Wenn w\u00e4hrend dieses Prozesses ein Fehler auftritt, wird der Code im <code>catch<\/code> Block ausgef\u00fchrt und der Fehler zum Debuggen auf der Konsole protokolliert.<\/p>\n<p>Jetzt ist der Server bereit! Legen wir den Befehl, mit dem unser Server ausgef\u00fchrt werden soll, in der Datei package.json <code>scripts<\/code> Objekt fest:<\/p>\n<pre><code class=\"language-bash\">\"scripts\": {\n  \"dev:frontend\": \"react-scripts start\",\n  \"dev:backend\": \"nodemon server.js\",\n  \"build\": \"react-scripts build\",\n},<\/code><\/pre>\n<p>Wenn du <code>npm run dev:backend<\/code> aufrufst, wird dein Server auf <a href=\"http:\/\/localhost:8080\/\" target=\"_blank\" rel=\"noopener noreferrer\">http:\/\/localhost:8080\/<\/a> gestartet, und wenn du <code>npm run dev:frontend<\/code> aufrufst, wird deine React-Anwendung auf http:\/\/localhost:3000\/ gestartet. Stelle sicher, dass beide in verschiedenen Terminals laufen.<\/p>\n<h2>HTTP-Anfragen von React an den Node.js Server stellen<\/h2>\n<p>In der Datei <strong>App.jsx<\/strong> erstellst du eine Funktion <code>generateImage<\/code>, die ausgel\u00f6st wird, wenn du in der Komponente <strong>Form.jsx<\/strong> auf die Schaltfl\u00e4che <strong>Bild generieren<\/strong> klickst. Diese Funktion nimmt zwei Parameter entgegen: <code>prompt<\/code> und <code>setPrompt<\/code> aus der Komponente <strong>Form.jsx<\/strong>.<\/p>\n<p>In der Funktion <code>generateImage<\/code> stellst du eine HTTP-POST-Anfrage an den Node.js-Server:<\/p>\n<pre><code class=\"language-jsx\">const generateImage = async (prompt, setPrompt) =&gt; {\n    if (prompt) {\n        try {\n            setIsGenerating(true);\n            const response = await fetch(\n                'http:\/\/localhost:8080\/api',\n                {\n                    method: 'POST',\n                    headers: {\n                        'Content-Type': 'application\/json',\n                    },\n                    body: JSON.stringify({\n                        prompt,\n                    }),\n                }\n            );\n            const data = await response.json();\n            setGeneratedImage({\n                photo: `data:image\/jpeg;base64,${data.photo}`,\n                altText: prompt,\n            });\n        } catch (err) {\n            alert(err);\n        } finally {\n            setPrompt('');\n            setIsGenerating(false);\n        }\n    } else {\n        alert('Please provide proper prompt');\n    }\n};<\/code><\/pre>\n<p>Im obigen Code \u00fcberpr\u00fcfst du, ob der Parameter <code>prompt<\/code> einen Wert hat, und setzt dann den Status von <code>isGenerating<\/code> auf <code>true<\/code>, da der Vorgang gestartet wird. Dadurch wird der Lader auf dem Bildschirm angezeigt, denn in der Datei <strong>App.jsx<\/strong> haben wir diesen Code, der die Anzeige des Laders steuert:<\/p>\n<pre><code class=\"language-jsx\">{isGenerating && (\n    &lt;div&gt; className=\"loader-comp\"&gt;\n        &lt;img src={Loader} alt=\"\" className='loader-img' \/&gt;\n    &lt;\/div&gt;\n)}<\/code><\/pre>\n<p>Als N\u00e4chstes verwenden wir die Methode <code>fetch()<\/code>, um mit <a href=\"http:\/\/localhost:8080\/api\" target=\"_blank\" rel=\"noopener noreferrer\">http:\/\/localhost:8080\/api<\/a> eine POST-Anfrage an den Server zu stellen &#8211; aus diesem Grund haben wir CORS installiert, da wir mit einer API auf einer anderen URL interagieren. Wir verwenden die Eingabeaufforderung als Text der Nachricht. Dann extrahierst du die vom Node.js-Server zur\u00fcckgegebene Antwort und setzt sie in den Zustand <code>generatedImage<\/code>.<\/p>\n<p>Sobald der Status <code>generatedImage<\/code> einen Wert hat, wird das Bild angezeigt:<\/p>\n<pre><code class=\"language-jsx\">{generatedImage.photo ? (\n    &lt;img\n        src={generatedImage.photo}\n        alt={generatedImage.altText}\n        className=\"imgg ai-img\"\n    \/&gt;\n) : (\n    &lt;img\n        src={preview}\n        alt=\"preview\"\n        className=\"imgg preview-img\"\n    \/&gt;\n)}<\/code><\/pre>\n<p>So sieht deine vollst\u00e4ndige <strong>App.jsx<\/strong>-Datei aus:<\/p>\n<pre><code class=\"language-jsx\">import { Form, Footer, Header } from '.\/components';\nimport preview from '.\/assets\/preview.png';\nimport Loader from '.\/assets\/loader-3.gif'\nimport { downloadImage } from '.\/utils';\nimport { useState } from 'react';\n\nconst App = () =&gt; {\n    const [isGenerating, setIsGenerating] = useState(false);\n    const [generatedImage, setGeneratedImage] = useState({\n        photo: null,\n        altText: null,\n    });\n\n    const generateImage = async (prompt, setPrompt) =&gt; {\n        if (prompt) {\n            try {\n                setIsGenerating(true);\n                const response = await fetch(\n                    'http:\/\/localhost:8080\/api',\n                    {\n                        method: 'POST',\n                        headers: {\n                            'Content-Type': 'application\/json',\n                        },\n                        body: JSON.stringify({\n                            prompt,\n                        }),\n                    }\n                );\n                const data = await response.json();\n                setGeneratedImage({\n                    photo: `data:image\/jpeg;base64,${data.photo}`,\n                    altText: prompt,\n                });\n            } catch (err) {\n                alert(err);\n            } finally {\n                setPrompt('');\n                setIsGenerating(false);\n            }\n        } else {\n            alert('Please provide proper prompt');\n        }\n    };\n\n    return (\n        &lt;div className='container'&gt;\n            &lt;Header \/&gt;\n            &lt;main className=\"flex-container\"&gt;\n                &lt;Form generateImage={generateImage} prompt={prompt} \/&gt;\n                &lt;div className=\"image-container\"&gt;\n                    {generatedImage.photo ? (\n                        &lt;img\n                            src={generatedImage.photo}\n                            alt={generatedImage.altText}\n                            className=\"imgg ai-img\"\n                        \/&gt;\n                    ) : (\n                        &lt;img\n                            src={preview}\n                            alt=\"preview\"\n                            className=\"imgg preview-img\"\n                        \/&gt;\n                    )}\n                    {isGenerating && (\n                        &lt;div className=\"loader-comp\"&gt;\n                            &lt;img src={Loader} alt=\"\" className='loader-img' \/&gt;\n                        &lt;\/div&gt;\n                    )}\n                    &lt;button\n                        className=\"btn\"\n                        onClick={() =&gt; downloadImage(generatedImage.photo)}\n                    &gt;\n                        Download\n                    &lt;\/button&gt;\n                &lt;\/div&gt;\n            &lt;\/main&gt;\n            &lt;Footer \/&gt;\n        &lt;\/div&gt;\n    );\n};\n\nexport default App;<\/code><\/pre>\n<h2>Bereitstellen deiner Full-Stack-Anwendung auf Kinsta<\/h2>\n<p>Bis jetzt hast du erfolgreich eine React-Anwendung erstellt, die mit Node.js interagiert und somit eine Full-Stack-Anwendung ist. Jetzt k\u00f6nnen wir diese Anwendung auf Kinsta bereitstellen.<\/p>\n<p>Konfiguriere den Server zun\u00e4chst so, dass er die statischen Dateien bereitstellt, die w\u00e4hrend des Build-Prozesses der React-Anwendung erzeugt wurden. Dazu importierst du das Modul <code>path<\/code> und verwendest es zum Bereitstellen der statischen Dateien:<\/p>\n<pre><code class=\"language-js\">const path = require('path');\n\napp.use(express.static(path.resolve(__dirname, '.\/build')));<\/code><\/pre>\n<p>Wenn du den Befehl <code>npm run build && npm run dev:backend<\/code> ausf\u00fchrst, wird deine Full-Stack-React-Anwendung unter http:\/\/localhost:8080\/ geladen. Das liegt daran, dass die React-Anwendung im <strong>Build<\/strong>-Ordner in <a href=\"https:\/\/docs.sevalla.com\/static-sites\/overview\">statische Dateien<\/a> kompiliert wird. Diese Dateien werden dann als statisches Verzeichnis in deinen Node.js-Server eingebunden. Wenn du deinen Node.js-Server startest, ist die Anwendung also zug\u00e4nglich.<\/p>\n<p>Bevor du deinen Code bei dem von dir gew\u00e4hlten Git-Anbieter (<a href=\"https:\/\/docs.sevalla.com\/applications\/git\/bitbucket#grant-access-to-the-kinsta-bitbucket-application\">Bitbucket<\/a>, <a href=\"https:\/\/docs.sevalla.com\/applications\/git\/github#authenticate-and-authorize\">GitHub<\/a> oder <a href=\"https:\/\/docs.sevalla.com\/applications\/git\/gitlab#authorize-the-kinsta-gitlab-application\">GitLab<\/a>) bereitstellst, musst du die HTTP-Request-URL in deiner <strong>App.jsx<\/strong>-Datei \u00e4ndern. \u00c4ndere <code>http:\/\/localhost:8080\/api<\/code> in <code>\/api<\/code>, da die URL vorangestellt werden soll.<\/p>\n<p>Schlie\u00dflich f\u00fcgst du in deiner <strong>package.json<\/strong>-Datei einen Skriptbefehl f\u00fcr den Node.js-Server hinzu, der f\u00fcr die Bereitstellung verwendet werden soll:<\/p>\n<pre><code class=\"language-bash\">\"scripts\": {\n  \/\/ \u2026\n  \"start\": \"node server.js\",\n},<\/code><\/pre>\n<p>Als N\u00e4chstes pusht du deinen Code zu deinem bevorzugten Git-Provider und stellst dein Repository auf Kinsta bereit, indem du diese Schritte befolgst:<\/p>\n<ol start=\"1\">\n<li>Melde dich in deinem Kinsta-Konto auf dem <a href=\"https:\/\/my.kinsta.com\/?lang=de\">MyKinsta<\/a>-Dashboard an.<\/li>\n<li>W\u00e4hle in der linken Seitenleiste <strong>Anwendung<\/strong> aus und klicke auf die Schaltfl\u00e4che <strong>Anwendung hinzuf\u00fcgen<\/strong>.<\/li>\n<li>W\u00e4hle in dem daraufhin angezeigten Modal das Repository aus, das du bereitstellen m\u00f6chtest. Wenn du mehrere Zweige hast, kannst du den gew\u00fcnschten Zweig ausw\u00e4hlen und einen Namen f\u00fcr deine Anwendung vergeben.<\/li>\n<li>W\u00e4hle einen der verf\u00fcgbaren Rechenzentrumsstandorte.<\/li>\n<li>F\u00fcge die <code>OPENAI_API_KEY<\/code> als Umgebungsvariable hinzu. Kinsta wird automatisch ein Dockerfile f\u00fcr dich einrichten.<\/li>\n<li>Zum Schluss f\u00fcgst du im Feld f\u00fcr den Startbefehl <code>npm run build && npm run start<\/code> hinzu. Kinsta installiert die Abh\u00e4ngigkeiten deiner Anwendung aus der <strong>package.json<\/strong> und baut sie dann auf und stellt sie bereit.<\/li>\n<\/ol>\n<h2>Zusammenfassung<\/h2>\n<p>In dieser Anleitung hast du gelernt, wie du die DALL-E API von OpenAI f\u00fcr die Bilderzeugung nutzen kannst. Au\u00dferdem hast du gelernt, wie du mit React und Node.js arbeitest, um eine einfache Full-Stack-Anwendung zu erstellen.<\/p>\n<p>Die M\u00f6glichkeiten von KI sind endlos, da t\u00e4glich neue Modelle eingef\u00fchrt werden und du erstaunliche Projekte erstellen kannst, die auf dem <a href=\"https:\/\/sevalla.com\/application-hosting\/\">Anwendungs-Hosting von Kinsta<\/a> bereitgestellt werden k\u00f6nnen.<\/p>\n<p><em>Welches Modell w\u00fcrdest du gerne erforschen und \u00fcber welches Projekt w\u00fcrden wir gerne als n\u00e4chstes schreiben? Teile es uns in den Kommentaren unten mit.<\/em><\/p>\n","protected":false},"excerpt":{"rendered":"<p>In der dynamischen Technologielandschaft, in der Innovationen die Grenzen des M\u00f6glichen immer weiter verschieben, h\u00f6rt die k\u00fcnstliche Intelligenz (KI) nicht auf, unsere Fantasie zu befl\u00fcgeln. Unter &#8230;<\/p>\n","protected":false},"author":287,"featured_media":65989,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_kinsta_gated_content":false,"_kinsta_gated_content_redirect":"","footnotes":""},"tags":[],"topic":[965,975],"class_list":["post-65988","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","topic-node-js","topic-react"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v24.6 (Yoast SEO v24.6) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Erstellen einer React-Anwendung f\u00fcr KI-gest\u00fctzte Bilderzeugung mit der OpenAI DALL-E API - Kinsta\u00ae<\/title>\n<meta name=\"description\" content=\"In diesem umfassenden Leitfaden erf\u00e4hrst du Schritt f\u00fcr Schritt, wie du die Macht der k\u00fcnstlichen Intelligenz nutzen kannst, um beeindruckende Bilder zu erzeugen.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/kinsta.com\/de\/blog\/ai-bild-generator\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Erstellen einer React-Anwendung f\u00fcr KI-gest\u00fctzte Bilderzeugung mit der OpenAI DALL-E API\" \/>\n<meta property=\"og:description\" content=\"In diesem umfassenden Leitfaden erf\u00e4hrst du Schritt f\u00fcr Schritt, wie du die Macht der k\u00fcnstlichen Intelligenz nutzen kannst, um beeindruckende Bilder zu erzeugen.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/kinsta.com\/de\/blog\/ai-bild-generator\/\" \/>\n<meta property=\"og:site_name\" content=\"Kinsta\u00ae\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/Kinsta-Deutschland-207459890108303\/\" \/>\n<meta property=\"article:published_time\" content=\"2023-10-02T12:10:56+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-10-05T06:10:52+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/10\/ai-powered-image-generator-app-with-react-dall-e-1.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1460\" \/>\n\t<meta property=\"og:image:height\" content=\"730\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Joel Olawanle\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:description\" content=\"In diesem umfassenden Leitfaden erf\u00e4hrst du Schritt f\u00fcr Schritt, wie du die Macht der k\u00fcnstlichen Intelligenz nutzen kannst, um beeindruckende Bilder zu erzeugen.\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/10\/ai-powered-image-generator-app-with-react-dall-e-1.jpg\" \/>\n<meta name=\"twitter:creator\" content=\"@olawanle_joel\" \/>\n<meta name=\"twitter:site\" content=\"@Kinsta_DE\" \/>\n<meta name=\"twitter:label1\" content=\"Verfasst von\" \/>\n\t<meta name=\"twitter:data1\" content=\"Joel Olawanle\" \/>\n\t<meta name=\"twitter:label2\" content=\"Gesch\u00e4tzte Lesezeit\" \/>\n\t<meta name=\"twitter:data2\" content=\"12\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/kinsta.com\/de\/blog\/ai-bild-generator\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/de\/blog\/ai-bild-generator\/\"},\"author\":{\"name\":\"Joel Olawanle\",\"@id\":\"https:\/\/kinsta.com\/de\/#\/schema\/person\/efa7de30245ca15be5ce1dcacff89c07\"},\"headline\":\"Erstellen einer React-Anwendung f\u00fcr KI-gest\u00fctzte Bilderzeugung mit der OpenAI DALL-E API\",\"datePublished\":\"2023-10-02T12:10:56+00:00\",\"dateModified\":\"2023-10-05T06:10:52+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/kinsta.com\/de\/blog\/ai-bild-generator\/\"},\"wordCount\":2164,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/de\/#organization\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/de\/blog\/ai-bild-generator\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/10\/ai-powered-image-generator-app-with-react-dall-e-1.jpg\",\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/kinsta.com\/de\/blog\/ai-bild-generator\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/kinsta.com\/de\/blog\/ai-bild-generator\/\",\"url\":\"https:\/\/kinsta.com\/de\/blog\/ai-bild-generator\/\",\"name\":\"Erstellen einer React-Anwendung f\u00fcr KI-gest\u00fctzte Bilderzeugung mit der OpenAI DALL-E API - Kinsta\u00ae\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/de\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/kinsta.com\/de\/blog\/ai-bild-generator\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/de\/blog\/ai-bild-generator\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/10\/ai-powered-image-generator-app-with-react-dall-e-1.jpg\",\"datePublished\":\"2023-10-02T12:10:56+00:00\",\"dateModified\":\"2023-10-05T06:10:52+00:00\",\"description\":\"In diesem umfassenden Leitfaden erf\u00e4hrst du Schritt f\u00fcr Schritt, wie du die Macht der k\u00fcnstlichen Intelligenz nutzen kannst, um beeindruckende Bilder zu erzeugen.\",\"breadcrumb\":{\"@id\":\"https:\/\/kinsta.com\/de\/blog\/ai-bild-generator\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/kinsta.com\/de\/blog\/ai-bild-generator\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\/\/kinsta.com\/de\/blog\/ai-bild-generator\/#primaryimage\",\"url\":\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/10\/ai-powered-image-generator-app-with-react-dall-e-1.jpg\",\"contentUrl\":\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/10\/ai-powered-image-generator-app-with-react-dall-e-1.jpg\",\"width\":1460,\"height\":730},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/kinsta.com\/de\/blog\/ai-bild-generator\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/kinsta.com\/de\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"React\",\"item\":\"https:\/\/kinsta.com\/de\/thema\/react\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Erstellen einer React-Anwendung f\u00fcr KI-gest\u00fctzte Bilderzeugung mit der OpenAI DALL-E API\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/kinsta.com\/de\/#website\",\"url\":\"https:\/\/kinsta.com\/de\/\",\"name\":\"Kinsta\u00ae\",\"description\":\"Schnelle, sichere und hochwertige Hosting-L\u00f6sungen\",\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/de\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/kinsta.com\/de\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"de\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/kinsta.com\/de\/#organization\",\"name\":\"Kinsta\",\"url\":\"https:\/\/kinsta.com\/de\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\/\/kinsta.com\/de\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/12\/kinsta-logo.jpeg\",\"contentUrl\":\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/12\/kinsta-logo.jpeg\",\"width\":500,\"height\":500,\"caption\":\"Kinsta\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/de\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/Kinsta-Deutschland-207459890108303\/\",\"https:\/\/x.com\/Kinsta_DE\",\"https:\/\/www.instagram.com\/kinstahosting\/\",\"https:\/\/www.linkedin.com\/company\/kinsta\/\",\"https:\/\/www.pinterest.com\/kinstahosting\/\",\"https:\/\/www.youtube.com\/c\/Kinsta\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/kinsta.com\/de\/#\/schema\/person\/efa7de30245ca15be5ce1dcacff89c07\",\"name\":\"Joel Olawanle\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\/\/kinsta.com\/de\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/051bf577ce2c837846a1db9eef184758?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/051bf577ce2c837846a1db9eef184758?s=96&d=mm&r=g\",\"caption\":\"Joel Olawanle\"},\"description\":\"Joel is a Frontend developer working at Kinsta as a Technical Editor. He is a passionate teacher with love for open source and has written over 300 technical articles majorly around JavaScript and it's frameworks.\",\"sameAs\":[\"https:\/\/joelolawanle.com\/\",\"https:\/\/www.linkedin.com\/in\/olawanlejoel\/\",\"https:\/\/x.com\/olawanle_joel\",\"https:\/\/www.youtube.com\/@joelolawanle\"],\"gender\":\"male\",\"knowsAbout\":[\"JavaScript\",\"React\",\"Next.js\"],\"knowsLanguage\":[\"English\"],\"jobTitle\":\"Technical Editor\",\"worksFor\":\"Kinsta\",\"url\":\"https:\/\/kinsta.com\/de\/blog\/author\/joelolawanle\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Erstellen einer React-Anwendung f\u00fcr KI-gest\u00fctzte Bilderzeugung mit der OpenAI DALL-E API - Kinsta\u00ae","description":"In diesem umfassenden Leitfaden erf\u00e4hrst du Schritt f\u00fcr Schritt, wie du die Macht der k\u00fcnstlichen Intelligenz nutzen kannst, um beeindruckende Bilder zu erzeugen.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/kinsta.com\/de\/blog\/ai-bild-generator\/","og_locale":"de_DE","og_type":"article","og_title":"Erstellen einer React-Anwendung f\u00fcr KI-gest\u00fctzte Bilderzeugung mit der OpenAI DALL-E API","og_description":"In diesem umfassenden Leitfaden erf\u00e4hrst du Schritt f\u00fcr Schritt, wie du die Macht der k\u00fcnstlichen Intelligenz nutzen kannst, um beeindruckende Bilder zu erzeugen.","og_url":"https:\/\/kinsta.com\/de\/blog\/ai-bild-generator\/","og_site_name":"Kinsta\u00ae","article_publisher":"https:\/\/www.facebook.com\/Kinsta-Deutschland-207459890108303\/","article_published_time":"2023-10-02T12:10:56+00:00","article_modified_time":"2023-10-05T06:10:52+00:00","og_image":[{"width":1460,"height":730,"url":"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/10\/ai-powered-image-generator-app-with-react-dall-e-1.jpg","type":"image\/jpeg"}],"author":"Joel Olawanle","twitter_card":"summary_large_image","twitter_description":"In diesem umfassenden Leitfaden erf\u00e4hrst du Schritt f\u00fcr Schritt, wie du die Macht der k\u00fcnstlichen Intelligenz nutzen kannst, um beeindruckende Bilder zu erzeugen.","twitter_image":"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/10\/ai-powered-image-generator-app-with-react-dall-e-1.jpg","twitter_creator":"@olawanle_joel","twitter_site":"@Kinsta_DE","twitter_misc":{"Verfasst von":"Joel Olawanle","Gesch\u00e4tzte Lesezeit":"12\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/kinsta.com\/de\/blog\/ai-bild-generator\/#article","isPartOf":{"@id":"https:\/\/kinsta.com\/de\/blog\/ai-bild-generator\/"},"author":{"name":"Joel Olawanle","@id":"https:\/\/kinsta.com\/de\/#\/schema\/person\/efa7de30245ca15be5ce1dcacff89c07"},"headline":"Erstellen einer React-Anwendung f\u00fcr KI-gest\u00fctzte Bilderzeugung mit der OpenAI DALL-E API","datePublished":"2023-10-02T12:10:56+00:00","dateModified":"2023-10-05T06:10:52+00:00","mainEntityOfPage":{"@id":"https:\/\/kinsta.com\/de\/blog\/ai-bild-generator\/"},"wordCount":2164,"commentCount":0,"publisher":{"@id":"https:\/\/kinsta.com\/de\/#organization"},"image":{"@id":"https:\/\/kinsta.com\/de\/blog\/ai-bild-generator\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/10\/ai-powered-image-generator-app-with-react-dall-e-1.jpg","inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/kinsta.com\/de\/blog\/ai-bild-generator\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/kinsta.com\/de\/blog\/ai-bild-generator\/","url":"https:\/\/kinsta.com\/de\/blog\/ai-bild-generator\/","name":"Erstellen einer React-Anwendung f\u00fcr KI-gest\u00fctzte Bilderzeugung mit der OpenAI DALL-E API - Kinsta\u00ae","isPartOf":{"@id":"https:\/\/kinsta.com\/de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/kinsta.com\/de\/blog\/ai-bild-generator\/#primaryimage"},"image":{"@id":"https:\/\/kinsta.com\/de\/blog\/ai-bild-generator\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/10\/ai-powered-image-generator-app-with-react-dall-e-1.jpg","datePublished":"2023-10-02T12:10:56+00:00","dateModified":"2023-10-05T06:10:52+00:00","description":"In diesem umfassenden Leitfaden erf\u00e4hrst du Schritt f\u00fcr Schritt, wie du die Macht der k\u00fcnstlichen Intelligenz nutzen kannst, um beeindruckende Bilder zu erzeugen.","breadcrumb":{"@id":"https:\/\/kinsta.com\/de\/blog\/ai-bild-generator\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/kinsta.com\/de\/blog\/ai-bild-generator\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/kinsta.com\/de\/blog\/ai-bild-generator\/#primaryimage","url":"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/10\/ai-powered-image-generator-app-with-react-dall-e-1.jpg","contentUrl":"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/10\/ai-powered-image-generator-app-with-react-dall-e-1.jpg","width":1460,"height":730},{"@type":"BreadcrumbList","@id":"https:\/\/kinsta.com\/de\/blog\/ai-bild-generator\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/kinsta.com\/de\/"},{"@type":"ListItem","position":2,"name":"React","item":"https:\/\/kinsta.com\/de\/thema\/react\/"},{"@type":"ListItem","position":3,"name":"Erstellen einer React-Anwendung f\u00fcr KI-gest\u00fctzte Bilderzeugung mit der OpenAI DALL-E API"}]},{"@type":"WebSite","@id":"https:\/\/kinsta.com\/de\/#website","url":"https:\/\/kinsta.com\/de\/","name":"Kinsta\u00ae","description":"Schnelle, sichere und hochwertige Hosting-L\u00f6sungen","publisher":{"@id":"https:\/\/kinsta.com\/de\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/kinsta.com\/de\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"de"},{"@type":"Organization","@id":"https:\/\/kinsta.com\/de\/#organization","name":"Kinsta","url":"https:\/\/kinsta.com\/de\/","logo":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/kinsta.com\/de\/#\/schema\/logo\/image\/","url":"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/12\/kinsta-logo.jpeg","contentUrl":"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/12\/kinsta-logo.jpeg","width":500,"height":500,"caption":"Kinsta"},"image":{"@id":"https:\/\/kinsta.com\/de\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/Kinsta-Deutschland-207459890108303\/","https:\/\/x.com\/Kinsta_DE","https:\/\/www.instagram.com\/kinstahosting\/","https:\/\/www.linkedin.com\/company\/kinsta\/","https:\/\/www.pinterest.com\/kinstahosting\/","https:\/\/www.youtube.com\/c\/Kinsta"]},{"@type":"Person","@id":"https:\/\/kinsta.com\/de\/#\/schema\/person\/efa7de30245ca15be5ce1dcacff89c07","name":"Joel Olawanle","image":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/kinsta.com\/de\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/051bf577ce2c837846a1db9eef184758?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/051bf577ce2c837846a1db9eef184758?s=96&d=mm&r=g","caption":"Joel Olawanle"},"description":"Joel is a Frontend developer working at Kinsta as a Technical Editor. He is a passionate teacher with love for open source and has written over 300 technical articles majorly around JavaScript and it's frameworks.","sameAs":["https:\/\/joelolawanle.com\/","https:\/\/www.linkedin.com\/in\/olawanlejoel\/","https:\/\/x.com\/olawanle_joel","https:\/\/www.youtube.com\/@joelolawanle"],"gender":"male","knowsAbout":["JavaScript","React","Next.js"],"knowsLanguage":["English"],"jobTitle":"Technical Editor","worksFor":"Kinsta","url":"https:\/\/kinsta.com\/de\/blog\/author\/joelolawanle\/"}]}},"acf":[],"_links":{"self":[{"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/posts\/65988","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/users\/287"}],"replies":[{"embeddable":true,"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/comments?post=65988"}],"version-history":[{"count":6,"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/posts\/65988\/revisions"}],"predecessor-version":[{"id":66137,"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/posts\/65988\/revisions\/66137"}],"alternate":[{"embeddable":true,"hreflang":"en","title":"English","href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/65988\/translations\/en"},{"embeddable":true,"hreflang":"pt","title":"Portuguese","href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/65988\/translations\/pt"},{"embeddable":true,"hreflang":"fr","title":"French","href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/65988\/translations\/fr"},{"embeddable":true,"hreflang":"de","title":"German","href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/65988\/translations\/de"},{"embeddable":true,"hreflang":"ja","title":"Japanese","href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/65988\/translations\/jp"},{"embeddable":true,"hreflang":"es","title":"Spanish","href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/65988\/translations\/es"},{"embeddable":true,"hreflang":"it","title":"Italian","href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/65988\/translations\/it"},{"href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/65988\/tree"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/media\/65989"}],"wp:attachment":[{"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/media?parent=65988"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/tags?post=65988"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/topic?post=65988"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}