Ich habe eine Bildgenerierungs-App mit Next.js und OpenAI API-DALL · E 3 (Tailwind CSS kompatibel) erstellt.

Ich habe eine Bildgenerierungs-App mit Next.js und OpenAI API-DALL · E 3 (Tailwind CSS kompatibel) erstellt.

Wollten Sie schon immer die kürzlich gesprochene KI der Bildgenerierung

In diesem Artikel zeigen wir Ihnen, wie Sie eine einfache App -App -App mit Next.js (App -Router) , Tailwind CSS und OpenAIs Bildgenerierungs -API (Dall · E 3)

diejenigen, die es ein bisschen mühsam finden, selbst Code zu schreiben oder
eine Vorlage mit einer Benutzeroberfläche zu wünschen, die schnell funktioniert, verkaufen wir auch Vorlagen auf den folgenden Plattformen .

Die in diesem Artikel eingeführten Vorlagen sind jetzt im Verkauf!

Diese Chatbot UI -Vorlage steht auf mehreren Plattformen zum Verkauf.

Die Struktur ist perfekt für diejenigen, die etwas ausprobieren möchten, das zuerst funktioniert: "Ich möchte es sofort verwenden, ohne eine Umgebung zu erstellen" oder "Ich möchte den gesamten Code überprüfen".

Sie können auch andere Vorlagen von jeder meiner Seite überprüfen:

Inhaltsverzeichnis

Über die verwendete Technologie

Diese App -App -App basiert auf den folgenden Technologien:

Next.js (App Router -Konfiguration)

Mit einem React-basierten Framework können Sie einheitliche Seiten und API-Routen erstellen. Ich verwende eine App -Router -Konfiguration ab SRC/App

Rückenwind -CSS

Ein Utility-First CSS-Framework, mit dem Sie Ihre Designs effizient mit Klassen organisieren können. Erstellen Sie schnell eine reaktionsschnelle und einfache Benutzeroberfläche

OpenAI -API (Bildgenerierung)

Verwenden Sie
von OpenAI /V1/Images/Generations, Das Modell (z. B. Dall-E-3 ), Bildgröße, Bildqualität usw. kann mit .Env

API -Routen + abrufen

Der Client und die OpenAI -API -Kommunikation werden auf der Serverseite über
/API /Image in Next.js. Die Client -Seite verfügt über eine einfache Konfiguration, die einfach mit Fetch ("/api/Bild")

Erstellen Sie einen OpenAI -API -Schlüssel

Dieses Mal werden wir die OpenAI -API verwenden, daher müssen wir einen OpenAI -API -Schlüssel erstellen.
Sie werden im OpenAI -API -Dashboard zu API -Schlüssel weitergeleitet. Wählen Sie "neue geheime Schlüssel erstellen".

Sie können das Projekt ausgewählt haben, wie Sie es mögen, und Berechtigungen für das Modell, das Sie verwenden möchten, oder alle auszuwählen, um es zu generieren.

Sobald die Erstellung abgeschlossen ist, wird eine Zeichenfolge, die mit "SK" beginnt, erstellt, sodass wir sie danach verwenden.
Bitte achten Sie darauf, dass dieser Schlüssel nicht gehen.

Umweltkonstruktion

Erstellen Sie zunächst eine Entwicklungsumgebung für Next.js.

Ein Projekt erstellen

Ich werde ein Projekt erstellen.
Grundsätzlich denke ich, dass es in Ordnung ist, alles bei den Standardeinstellungen zu lassen, aber es ist in Ordnung, solange Sie es bei Bedarf ändern können.
(In diesem Projekt wird Tailwind -CSS verwendet. Es ist daher am besten, es auf Ja einzustellen. Der Standard ist ja.)

$ npx create-next-App@neueste Bild-Generator-Starter-TypePescript ✔ Möchten Sie Eslint verwenden? … Nein / Ja ✔ Möchten Sie Rückenwind -CSS verwenden? … Nein / Ja ✔ Möchten Sie Ihren Code in einem SRC / ` -Verzeichnis? … Nein / Ja ✔ Möchten Sie App -Router verwenden? (Empfohlen)… Nein / Ja ✔ Möchten Sie Turbopack für `Next Dev` verwenden? … Nein / Ja ✔ möchten Sie den Import -Alias (`@ /*` standardmäßig) anpassen? … Nein / Ja Erstellen einer neuen nächsten.js-App in / bildgeneratorstarter. Verwenden von NPM. Initializing project with template: app-tw Installing dependencies: - react - react-dom - next Installing devDependencies: - typescript - @types/node - @types/react - @types/react - @types/react-dom - @tailwindcss/postcss - tailwindcss - eslint - eslint-config-next - @eslint/eslintrc added 336 packages, and audited 337 Pakete in 16S 137 Pakete suchen nach Finanzmitteln, die "NPM Fund" für Details gefunden haben. Erfolg! Erstellte Bildgenerator-Starter bei /Bild-Generator-Starter

Wenn "Erfolg! Image-Generator-Starter AT /Image-Generator-Starter erstellt" erscheint, erscheint die Projekterstellung ab.
Wenn Sie das Projekt erstellt haben, verschieben Sie das Verzeichnis.

CD-Bild-Generator-Starter

Stellen Sie die OpenAI -API -Schlüssel ein

Erstellen Sie eine .env im Stamm

Openai_api_key = sk -... openai_model = dall-e-3 openai_image_size = 1024x1024 openai_image_quality = Standard

Kurzbeschreibung:

  • OpenAI_API_KEY : Private Schlüssel zum Zugriff auf die OpenAI -Bildgenerierungs -API (erhalten vom OpenAI -Management -Bildschirm)
  • OpenAI_Model : Bildgenerierungsmodell zu verwenden. Derzeit Dall-E-3 angegeben (zukünftige Updates werden ebenfalls unterstützt)
  • OpenAI_IMAGE_SIZE : Die zu erzeugende Größe des Bildes (z. B. 1024x1024 ). Kann nach Bedarf geändert werden
  • OpenAI_IMAGE_QUALITY : Bildqualität. Standard oder HD auswählen HD ist eine hohe Qualität, kann jedoch lange dauern)

Starten Sie den Entwicklungsserver

Durch das Ausführen des folgenden Befehls wird die Vorlage gestartet:

NPM Run Dev

Implementierung der Benutzeroberfläche (Bildschirmgenerierungsbildschirm)

Die Benutzeroberfläche für Bildgeneration SRC/App/Seite.tsx organisiert
Die Gesamtmenge des Quellcodes lautet wie folgt:

"Client verwenden"; importieren {usestate} aus "react"; Bild von "Next/Bild" importieren; Standardfunktion exportieren home () {// Status für Benutzereingaben (Bildaufforderung) // Die Eingabeaufforderung zur Bildgenerierung, die von der Benutzer const [Eingabeaufforderung, setPrompt] = usustate ("") eingegeben wurde; // Geben Sie generierte Bild -URL // URL der generierten Bild const [imageurl, setImageurl] = usestate (""); // Ladeantriebszustand // Ladeflag -const [Laden, Setloading] = Usestate (false); // Fehlermeldungszustand // zum Speichern von Fehlermeldungen const [Fehler, setError] = usustate (""); // Bildgenerierungsanforderung verwandeln // Bildgenerierungsanforderung const GenerateImage = async () => {if (! Prompt.trim ()) return; // Status vor Anfrage zurücksetzen // Status vor der Anforderung SETLOADING (TRUE) initialisieren; setError (""); setImageurl (""); Versuchen Sie {// Anforderung an interne API // Anforderung an interne API senden (/api/bild) const res = act fetch ("/api/bild", {methode: "post", header: {"content-type": "application/json"}, body: json.stringify ({{prompt}),}); const data = warte res.json (); if (res.ok && data.imageurl) {setImageUrl (data.imageurl); } else {setError (data.Error || "Image nicht generiert."); }} catch (e) {console.Error ("Fehler:", e); setError ("Ein unerwarteter Fehler ist aufgetreten"); } endlich {setloading (false); }}; zurückkehren (<main className="min-h-screen bg-gray-900 text-gray-100 flex items-center justify-center px-4 py-8"><div className="w-full max-w-xl bg-gray-800 rounded-xl shadow-lg p-6 space-y-6"> {/ * Title */}<h1 className="text-2xl font-bold text-center text-white"> AI -Bildgenerator</h1> {/ * Eingabeaufforderung/Eingabeaufforderung Eingabefeld */}<div className="space-y-2"> <label htmlFor="prompt" className="block text-sm font-medium text-gray-300" >Geben Sie Ihre Bildaufforderung ein</label><textarea id="prompt" rows={3} value={prompt} onChange={(e) => setPrompt (e.target.Value)} className = "W-Full P-3 Round-Lg Bg-Gray-700 Border-Gray-600 Text-White Focus: Umriss-2-Fokus: Ring-2 Fokus: Ring-Green-400-Größen-None" Placeholder = ", z. onclick = {generateImage} deaktiviert = {laden} className = "w-full py-3 gerundet-lg bg-Green-500 schweben: bg-green-600 text-schwarz-font-semibold deaktiviert: Deckkraft-50-Übergang"> {laden? "Generieren ...": "Bild generieren"} </button> {/ * Fehlermeldung/Fehleranzeige */} {error && (<div className = "text-red-400 text-sm text-center"> {error} </div>)} {/ * Bildanzeige/Bild-Anzeige */{ImageRl && (<Div-Classname h- [512px] "> <image src = {imageurl} alt =" generiertes result "fill unoptimierte className =" gerundet-lg-Objekt-Contain-Bordergrad-700 "/> </div>)} </div> </Main>); }

Nachrichtenstatusverwaltung

const [prompt, setprompt] = usustate (""); const [imageurl, setImageurl] = usustate (""); const [laden, setloading] = usustate (false); const [Fehler, setError] = usustate ("");

Kurzbeschreibung:

  • Eingabeaufforderung : Hält die vom Benutzer eingegebene Beschreibung der Bildgenerierung (Eingabeaufforderung)
  • Imageurl : Halten Sie die URL des generierten Bildes
  • Laden : Zeigt den Status des Wartens auf die API -Antwort an
  • Fehler : Halten Sie Nachrichten, die angezeigt werden sollen, wenn ein Fehler auftritt

Übertragungsverarbeitung und API -Aufruf der Bildgenerierung

const generateImage = async () => {if (! prompt.trim ()) return; setloading (true); setError (""); setImageurl (""); try {const res = warte fetch ("/api/image", {methode: "post", header: {"content-type": "application/json"}, body: json.stringify ({prompt}),}); const data = warte res.json (); if (res.ok && data.imageurl) {setImageUrl (data.imageurl); } else {setError (data.Error || "Image nicht generiert."); }} catch (e) {console.Error ("Fehler:", e); setError ("Ein unerwarteter Fehler ist aufgetreten"); } endlich {setloading (false); }};

Kurzbeschreibung:

  • Senden Sie die eingegebene Eingabeaufforderung /api /Bild
  • Wenn das Bild von der OpenAI -API zurückgegeben wird, stellen Sie die URL ein und es wird auf dem Bildschirm angezeigt.
  • Wenn ein Fehler auftritt, wird eine Nachricht angezeigt

Eingangsformular und Tasten (Rückenwind -CSS)

<textarea id="prompt" rows={3} value={prompt} onChange={(e) =>setPrompt(e.target.value)} className="w-full p-3 rounded-lg bg-gray-700 border border-gray-600 text-white focus:outline-none focus:ring-2 focus:ring-green-400 resize-none" placeholder="eg A cat surfing on waves, digital art" /> <button onClick={generateImage} disabled={loading} className = "W-Ful Py-3 Round-LG BG-Green-500 Schwebe: BG-Green-600 Text-schwarz-Schrift-Semibold Deaktiviert: Opazität-50-Übergang"> {Laden? "Generieren ...": "Bild generieren"} </button>

Kurzbeschreibung:

  • Geben Sie die Bildbeschreibung im Textbereich ein
  • Klicken Sie auf die Schaltfläche, um die Bildgenerierung zu starten ( die Schaltfläche ist beim Laden
  • Rückenwind -CSS macht es einfach und einfach zu bedienen

Bildanzeige, Fehler, Ladenanzeige

{Fehler && (<div className="text-red-400 text-sm text-center"> {Fehler}</div> )} {imageUrl && (( <div className="mt-4 relative w-full h-[512px]"><Image src={imageUrl} alt="Generated result" layout="fill" className="rounded-lg object-contain border border-gray-700" /></div> )}

Kurzbeschreibung:

  • ein Fehler vorliegt
  • Wenn ein Bild generiert wird, wird es auf dem Bildschirm reaktionsmäßig angezeigt ( optimiert mit dem nächsten/im Bild

Serverseitige Implementierung (OpenAI-API-Integration)

Der Prozess der Bildgenerierung ist, dass der Client eine Anfrage an
/api /Bild dann Relais und Antworten an die Chat -API von OpenAI auf dem Server zurückgegeben werden.

Die Gesamtmenge des serverseitigen Quellcodes lautet wie folgt:

// src/app/api/image/Route.ts importieren {nexTrequest, nexTesponse} aus "next/server"; // HANDLER für die Bildgenerierung mithilfe von OpenAI -API // Bilder mit OpenAI -API -Post -Handler -Exportieren von Async -Funktionspost (req: nexTrequest) {// Die Eingabeaufforderung aus der Anforderungsgremium analysieren // die Eingabeaufforderung aus der Anforderungskörper -Konstant {Eingabeaufforderung} = uaait req.json () abrufen; // Eingabe validieren // Überprüfen Sie, ob die Eingabeaufforderung angegeben ist, wenn (! Eingabeaufforderung) {return nexTesponse.json ({Fehler: "Eingabeaufforderung ist erforderlich"}, {Status: 400}); } try {// Konfiguration aus Umgebungsvariablen (mit Fallback -Werten) // Einstellungen aus Umgebungsvariablen (wenn nicht der Standardwert) const model = process.env.openai_model || "Dall-e-3"; const size = process.env.openai_image_size || "1024x1024"; const quality = process.env.openai_image_Quality || "Standard"; // Anfrage an OpenAIs Bildgenerierungendpunkt senden // Anforderung an OpenAIs Bildgenerierung Endpunkt const response = warte fetch ("https://api.openai.com/v1/images/generations", {methode: "post", headers: {Autorisierung: `Bearer $ {{{Antrag. Körper: json.stringify ({modell, // EG, "Dall-e-3" Eingabeaufforderung, Eingabeaufforderung des Benutzers für die Größe der Bildgenerierung, // z. const data = warte auf response.json (); // API -Fehlerantwort verwalten // Was tun, wenn ein API -Fehler zurückgegeben wird, wenn (data.Error) {console.Error ("OpenAI -API -Fehler:", Data.Error); return nexTesponse.json ({Fehler: "Bildgenerierung fehlgeschlagen"}, {Status: 500}); } // Die generierte Bild -URL extrahieren // die URL des generierten Bilds const imageurl = data.data?.[0?.url abrufen; // Die Bild -URL an den Client zurückgeben // Die Bild -URL an den Client zurückgeben. } catch (error) {// Unerwartete Serverfehler verwandeln // Unerwartete Serverfehler Console.Error ("Server -Fehler:", Fehler); return nexTesponse.json ({error: "Internal Server error"}, {Status: 500}); }}

Grundlegende Konfiguration der Route.ts

importieren {nexTrequest, nexTesponse} aus "next/server"; Exportieren Sie die asynchronisierende Funktion post (req: nexTrequest) {const {prompt} = warte req.json ();

Kurzbeschreibung:

  • Post beschränkt ist
  • Sie erhalten Eingabeaufforderung , die von der Client -Seite gesendet wurde

Anfragen nach OpenAI -API

const response = actait fetch ("https://api.openai.com/v1/images/generations", {methode: "post", Header: {Autorisierung: `Bearer $ {process.env.openai_api_key}`, "Inhalt-type": "Anwendung/JSON,},}, Body: Json: JON. process.env.openai_model ||. const data = warte auf response.json ();

Kurzbeschreibung:

  • API -Schlüssel , Modellnamen , Bildgrößen und Bildqualität dynamisch aus Umgebungsvariablen
  • die OpenAI -Bildgenerierungs -API ( /v1/Bilder/Generationen ) und senden Sie eine Bildgenerierungsanforderung.
  • N: 1 ist die Spezifikation, dass "nur ein Blatt generiert wird".

Antwortverarbeitung und Fehlerbehandlung

  if (data.Error) {console.Error (data.Error); return nexTesponse.json ({Fehler: "Bildgenerierung fehlgeschlagen"}, {Status: 500}); } const imageurl = data.data?.[0?.url; return nexTesponse.json ({imageurl}); }

Kurzbeschreibung:

  • Wenn die OpenAI -API fehlschlägt, wird der Fehler an die Konsole ausgegeben und kehrt mit einem Fehler von 500 zurück.
  • Wenn die Bild -URL erfolgreich zurückgegeben wird, wird sie an den Client ( ImageRl ) zurückgegeben.

[Bonus] Dinge zu beachten

  • Bitte verwalten Sie
    mit .Env , damit Sie sie nie veröffentlichen Wenn das Problem auftritt, deaktivieren Sie es oder stellen Sie es auf dem OpenAI -Management -Bildschirm
  • Der Modellname, die Bildgröße und die Bildqualität sind so konzipiert
    , dass sie dynamisch mit .EnV Bitte passen Sie nach Zweck und Kosten an (z. B. HD höhere Qualität und höhere Kosten als Standard
  • Die Zeitspeicherzeit und die Verfügbarkeitszeiten können begrenzt sein . Wenn dies erforderlich ist, sollten Sie bei Bedarf die Speicherverarbeitung unmittelbar nach dem Erwerb durchführen.

Betriebsprüfung

Lassen Sie uns den Betrieb kurz überprüfen!

Wenn Sie "Localhost: 3000" in Ihrem Browser öffnen, wird der folgende Bildschirm angezeigt.

Versuchen Sie, "eine süße Katze" einzugeben.

Nach einer Weile wurde ein süßes Katzenbild erzeugt und angezeigt!
Es wird auch ohne Probleme auf Japanisch angezeigt!

Informationen zum Vorlagenverkauf

Die in diesem Artikel eingeführte Chatbot -Benutzeroberfläche wird auch als Vorlage verkauft, die für kommerzielle Zwecke verwendet werden kann

Warum Vorlagen verkaufen?

Wir haben dies für diejenigen vorbereitet, die die folgenden Bedürfnisse erleben:

  • "Auch wenn Sie den Schritten befolgen, funktioniert die Umgebung nicht ..."
  • "Ich möchte nur mit einem bewegenden Beispiel beginnen."
  • "Ich habe mir meinen Blog angesehen und fand ihn nützlich, also möchte ich ihn mit dem Ziel kaufen, zu unterstützen und zu spenden."

Sogar diejenigen, die es nicht gewohnt sind, das Spiel zu entwickeln, können mit minimalem Aufwand schnell starten und es schnell ausprobieren

Beispiele für die Verwendung von Vorlagen (Anpassungsideen)

Diese Vorlage ist perfekt für die persönliche Entwicklung und Lernzwecke.
Zum Beispiel empfehlen wir, Folgendes zu ändern und zu erweitern:

  • Preprozessor hinzugefügt, um die Eingänge zu übersetzen, fordert Englisch auf
  • Erweitert, um das Download zu ermöglichen und die generierten Bilder auf SNS zu speichern und zu teilen und freizugeben
  • Fügen Sie die Funktion des Verlaufsmanagements (aktuelles Eingabeaufforderung + -Abbild) lokal hinzu
  • Passen Sie die Themenfarben und -Designs an, um Ihre eigenen Spezifikationen zu erstellen
  • Fügen Sie die Verarbeitung hinzu, um Bilder automatisch auf S3 usw. auf der Serverseite zu speichern

Es ist auch eine gute Praxis, es auf "serieller Basis" für Programmieranfänger auszuprobieren.

Was ist in der Vorlage enthalten

enthält
den gesamten Quellcode für das hier eingeführte Projekt Daher müssen Sie Ihr eigenes Projekt nicht von Grund auf neu erstellen oder konfigurieren, und Sie können es sofort starten .

  • UI -Implementierung mit Next.js (App -Router)
  • Serverseitige Implementierung mit API-Integration
  • Clean Code Struktur mit Kommentaren
  • Einfach und einfach zu verbessern, um das Design mithilfe von Rückenwind -CSS zu verbessern
  • Docker Startup-Konfigurationsdateien ( DockerFile , Docker-compose.yml )

*Um auszuführen, ist eine grundlegende Ausführungsumgebung wie Node.js und Docker erforderlich.

Die in diesem Artikel eingeführten Vorlagen sind jetzt im Verkauf!

Diese Chatbot UI -Vorlage steht auf mehreren Plattformen zum Verkauf.

Die Struktur ist perfekt für diejenigen, die etwas ausprobieren möchten, das zuerst funktioniert: "Ich möchte es sofort verwenden, ohne eine Umgebung zu erstellen" oder "Ich möchte den gesamten Code überprüfen".

Sie können auch andere Vorlagen von jeder meiner Seite überprüfen:

Zusammenfassung

Dieses Mal haben wir vorgestellt, App -App mit OpenAI API X Next.js. erstellt

Die wichtigsten Punkte in diesem Artikel sind wie folgt:

  • Mit der Bild -API von OpenAI können Sie Bildgenerierungsfunktionen mit nur ein wenig Code erstellen
  • Next.js App Router + Tailwind CSS erleichtert die Erweiterung und Anpassung der Benutzeroberfläche
  • Mit Vorlagen die Umgebungskonstruktion und die Einrichtung des Umgebungskonstruktions überspringen und den Vorgang sofort überprüfen.

Diese Vorlage eignet sich perfekt für
Prototyping und Starter -Starter -Kits für persönliche Entwicklung Es wird auch für diejenigen empfohlen, die ihre Ideen schnell in die Realität umwandeln oder die OpenAI -API lernten und überprüfen möchten.

Teilen Sie, wenn Sie möchten!

Wer hat diesen Artikel geschrieben

Dies ist ein Blog, in dem ich angefangen habe, Informationssicherheit zu studieren. Als neuer Angestellter würde ich mich freuen, wenn Sie mit einem breiten Herzen schauen könnten.
Es gibt auch Teech Lab, das eine Gelegenheit ist, Programmierspaß zu studieren. Wenn Sie also an der Softwareentwicklung interessiert sind, sollten Sie sich unbedingt ansehen!

Inhaltsverzeichnis