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".
Ü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 mitFetch ("/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
oderHD
auswählenHD
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 BildesLaden
: Zeigt den Status des Wartens auf die API -Antwort anFehler
: 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
undBildqualitä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 alsStandard
- 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
)
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".
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.