{"id":73406,"date":"2023-10-02T13:12:56","date_gmt":"2023-10-02T12:12:56","guid":{"rendered":"https:\/\/kinsta.com\/it\/?p=73406&#038;preview=true&#038;preview_id=73406"},"modified":"2023-10-06T06:55:07","modified_gmt":"2023-10-06T05:55:07","slug":"generazione-immagini-ai","status":"publish","type":"post","link":"https:\/\/kinsta.com\/it\/blog\/generazione-immagini-ai\/","title":{"rendered":"Come costruire un&#8217;applicazione React per la generazione di immagini con l&#8217;AI usando l&#8217;API OpenAI DALL-E"},"content":{"rendered":"<p>Nel dinamico panorama della tecnologia, dove l&#8217;innovazione modella continuamente i confini del possibile, l&#8217;intelligenza artificiale (AI, Artificial Intelligence) non smette mai di affascinare.<\/p>\n<p>L&#8217;AI si riferisce alla simulazione dei processi di intelligenza umana da parte dei sistemi informatici. Questi processi includono compiti come l&#8217;apprendimento, il ragionamento, la risoluzione di problemi, la percezione, la <a href=\"https:\/\/kinsta.com\/it\/blog\/rilevamento-contenuti-ai\/\">comprensione del linguaggio<\/a> e il processo decisionale.<\/p>\n<p>Oggi, persone e aziende hanno sviluppato e addestrato diversi modelli di AI per svolgere determinati compiti meglio degli esseri umani in tempo reale. Tra la miriade di applicazioni dell&#8217;AI, un&#8217;area particolarmente interessante \u00e8 quella della generazione di immagini tramite l&#8217;AI.<\/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>Cosa costruiremo<\/h2>\n<p>Questa guida spiega come costruire un&#8217;applicazione React che si integri perfettamente con l&#8217;API <a href=\"https:\/\/labs.openai.com\/\" target=\"_blank\" rel=\"noopener noreferrer\">OpenAI DALL-E<\/a> tramite un backend <a href=\"https:\/\/kinsta.com\/it\/blog\/node-js\/\">Node.js<\/a> e che generi immagini accattivanti sulla base di richieste testuali.<\/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=\"Animazione di un generatore di immagini con intelligenza artificiale, che pu\u00f2 produrre immagini vivide e creative grazie all\u2019API di DALL-E\" width=\"1600\" height=\"877\"><figcaption class=\"wp-caption-text\">Generatore di immagini AI in azione, che produce immagini vivaci e creative utilizzando l&#8217;API DALL-E.<\/figcaption><\/figure>\n<h3>Prerequisiti<\/h3>\n<p>Per seguire questo progetto, \u00e8 necessario avere:<\/p>\n<ul>\n<li>Conoscenza di base di <a href=\"https:\/\/kinsta.com\/it\/blog\/html\/\">HTML<\/a>, <a href=\"https:\/\/kinsta.com\/it\/blog\/best-practice-css\/\">CSS<\/a> e <a href=\"https:\/\/kinsta.com\/javascript\/\">JavaScript<\/a><\/li>\n<li>Conoscenza di base di <a href=\"https:\/\/kinsta.com\/it\/blog\/react-js\/\">React<\/a> e <a href=\"https:\/\/kinsta.com\/it\/blog\/deno-vs-node-js\/\">Node.js<\/a><\/li>\n<li>Node.js e npm (<a href=\"https:\/\/kinsta.com\/it\/blog\/cos-e-npm\/\">Node Package Manager<\/a>) o yarn installati sul computer<\/li>\n<\/ul>\n<h2>Cos&#8217;\u00e8 l\u2019API OpenAI DALL-E?<\/h2>\n<p>L\u2019API di OpenAI \u00e8 una piattaforma basata sul cloud che consente <a href=\"https:\/\/kinsta.com\/it\/blog\/tipi-di-developer\/\">a chi sviluppa<\/a> di accedere ai modelli di intelligenza artificiale pre-addestrati di OpenAI, come DALL-E e GPT-3 (abbiamo usato questo modello per <a href=\"https:\/\/kinsta.com\/it\/blog\/clone-di-chatgpt\/\">costruire un clone di ChatGPT<\/a> con il codice presente in <a href=\"https:\/\/github.com\/kinsta\/chatgpt-clone\" target=\"_blank\" rel=\"noopener noreferrer\">questo repository Git<\/a>). Permette di aggiungere ai programmi funzioni di intelligenza artificiale come la sintesi, la traduzione, la generazione di immagini e la modifica senza dover sviluppare e addestrare i propri modelli.<\/p>\n<p>Per usare OpenAI API, create un account usando il vostro account Google o la vostra email sul <a href=\"https:\/\/platform.openai.com\/\" target=\"_blank\" rel=\"noopener noreferrer\">sito web di OpenAI<\/a> e ottenete una chiave API. Per generare una chiave API, fate clic su <strong>Personal<\/strong> nell&#8217;angolo in alto a destra del sito web, quindi selezionate <strong>View API keys<\/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=\"Schermata dell\u2019API OpenAI da cui creare una chiave segreta\" width=\"1600\" height=\"877\"><figcaption class=\"wp-caption-text\">Il processo di creazione di una chiave segreta con l\u2019API OpenAI.<\/figcaption><\/figure>\n<p>Fate clic sul pulsante <strong>Create new secret key<\/strong> e <a href=\"https:\/\/kinsta.com\/it\/blog\/password-manager\/\">salvate la chiave<\/a> da qualche parte. La userete in questa applicazione per interagire con l&#8217;API OpenAI DALL-E.<\/p>\n<h2>Impostazione dell&#8217;ambiente di sviluppo<\/h2>\n<p>Potete creare un&#8217;applicazione React da zero e sviluppare la vostra interfaccia, oppure potete prendere il nostro modello di partenza <a href=\"https:\/\/kinsta.com\/it\/argomenti\/git\/\">Git<\/a> seguendo questi passaggi:<\/p>\n<ol start=\"1\">\n<li>Visitate il <a href=\"https:\/\/github.com\/kinsta\/ai-img-generator\" target=\"_blank\" rel=\"noopener noreferrer\">repository GitHub<\/a> di questo progetto.<\/li>\n<li>Selezionate <strong>Use this template<\/strong> &gt; <strong>Create a new repository<\/strong> per copiare il codice di partenza in un repository del vostro account GitHub (selezionate la casella per <strong>includere tutti i branch<\/strong>).<\/li>\n<li>Estraete il repository sul vostro computer locale e passate al branch <a href=\"https:\/\/github.com\/kinsta\/ai-img-generator\/tree\/starter-files\" target=\"_blank\" rel=\"noopener noreferrer\">starter-files<\/a> usando il comando: <code>git checkout starter-files<\/code>.<\/li>\n<\/ol>\n<ol start=\"4\">\n<li>Installate le dipendenze necessarie eseguendo il comando <code>npm install<\/code>.<\/li>\n<\/ol>\n<p>Una volta completata l&#8217;installazione, potete lanciare il progetto sul vostro computer locale con <code>npm run start<\/code>. In questo modo il progetto sar\u00e0 disponibile all&#8217;indirizzo <a href=\"http:\/\/localhost:3000\/\" target=\"_blank\" rel=\"noopener noreferrer\">http:\/\/localhost:3000\/<\/a>.<\/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=\"Interfaccia utente di un'applicazione di generazione di immagini AI\" width=\"1600\" height=\"877\"><figcaption class=\"wp-caption-text\">Interfaccia utente di un&#8217;applicazione di generazione di immagini AI che mostra la potenza dell&#8217;intelligenza artificiale nella creazione di immagini.<\/figcaption><\/figure>\n<h3>I file del progetto<\/h3>\n<p>In questo progetto abbiamo aggiunto tutte le dipendenze necessarie per la vostra applicazione React. Ecco una panoramica di ci\u00f2 che \u00e8 stato installato:<\/p>\n<ul>\n<li><a href=\"https:\/\/www.npmjs.com\/package\/file-server\" target=\"_blank\" rel=\"noopener noreferrer\">file-server<\/a>: questa libreria di utility semplifica il processo di download delle immagini generate. \u00c8 collegata al pulsante di download per garantire un&#8217;esperienza d&#8217;uso fluida.<\/li>\n<li><a href=\"https:\/\/www.npmjs.com\/package\/uuid\" target=\"_blank\" rel=\"noopener noreferrer\">uuid<\/a>: questa libreria assegna un&#8217;identificazione unica a ogni immagine. In questo modo si evita che le immagini condividano lo stesso nome di file predefinito, mantenendo ordine e chiarezza.<\/li>\n<li><a href=\"https:\/\/www.npmjs.com\/package\/react-icons\" target=\"_blank\" rel=\"noopener noreferrer\">react-icons<\/a>: integrata nel progetto, questa libreria incorpora senza sforzo le icone, migliorando l&#8217;aspetto visivo della vostra applicazione.<\/li>\n<\/ul>\n<p>Al centro della vostra applicazione React si trova la cartella <strong>src<\/strong>. \u00c8 qui che si trova il codice JavaScript essenziale per Webpack. Vediamo quali sono i file e le cartelle della cartella <strong>src<\/strong>:<\/p>\n<ul>\n<li><strong>assets:<\/strong> all&#8217;interno di questa cartella si trovano le immagini e le gif del loader che vengono utilizzate in tutto il progetto.<\/li>\n<li><strong>data:<\/strong> questa cartella contiene un file <strong>index.js<\/strong> che esporta un array di 30 prompt. Questi prompt possono essere utilizzati per generare immagini diverse e casuali. Potete modificarli liberamente.<\/li>\n<li><strong>index.css:<\/strong> qui sono memorizzati gli stili utilizzati in questo progetto.<\/li>\n<\/ul>\n<h4>La cartella Utils<\/h4>\n<p>All&#8217;interno di questa cartella, il file <strong>index.js<\/strong> definisce due funzioni riutilizzabili. La prima funzione randomizza la selezione dei messaggi che descrivono le varie immagini che possono essere generate.<\/p>\n<pre><code class=\"language-js\">import { randomPrompts } from '..\/data';\n\nexport const getRandomPrompt = () =&gt; {\n\tconst randomIndex = Math.floor(Math.random() * randomPrompts.length);\n\tconst randomPrompt = randomPrompts[randomIndex];\n\n\treturn randomPrompt;\n}<\/code><\/pre>\n<p>La seconda funzione gestisce il download delle immagini generate sfruttando la dipendenza dal <strong>file-saver<\/strong>. Entrambe le funzioni sono state create per offrire modularit\u00e0 ed efficienza e possono essere importate comodamente nei componenti quando necessario.<\/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\tconst _id = uuidv4();\n\tFileSaver.saveAs(photo, `download-${_id}.jpg`);\n}<\/code><\/pre>\n<p>Nel codice qui sopra, la dipendenza <strong>uuid<\/strong> d\u00e0 a ogni file immagine generato un ID unico, in modo che non abbiano lo stesso nome di file.<\/p>\n<h4>I componenti<\/h4>\n<p>Si tratta di piccoli blocchi di codice separati per facilitare la manutenzione e la comprensione del codice. Per questo progetto sono stati creati tre componenti: <strong>Header.jsx<\/strong>, <strong>Footer.jsx<\/strong> e <strong>Form.jsx<\/strong>. Il componente principale \u00e8 il componente Form, dove l&#8217;input viene ricevuto e passato al file <strong>App.jsx<\/strong> con la funzione <code>generateImage<\/code> aggiunta come evento <code>onClick<\/code> al pulsante <strong>Generate Image<\/strong>.<\/p>\n<p>Nel componente Form viene creato uno stato per memorizzare e aggiornare il prompt. Inoltre, una funzione vi permette di fare clic su un&#8217;icona casuale per generare i messaggi casuali. Questo \u00e8 possibile grazie alla funzione <code>handleRandomPrompt<\/code>, che usa la funzione <code>getRandomPrompt<\/code> gi\u00e0 impostata. Quando fate clic sull&#8217;icona, viene recuperato un messaggio casuale e lo stato viene aggiornato:<\/p>\n<pre><code class=\"language-jsx\">const handleRandomPrompt = () =&gt; {\n\tconst randomPrompt = getRandomPrompt();\n\tsetPrompt(randomPrompt)\n}<\/code><\/pre>\n<h4>Il file App.jsx<\/h4>\n<p>\u00c8 qui che risiede la maggior parte del codice. Tutti i componenti sono riuniti qui. C&#8217;\u00e8 anche un&#8217;area designata per visualizzare l&#8217;immagine generata. Se non \u00e8 stata generata alcuna immagine, viene visualizzata un&#8217;immagine segnaposto (immagine di anteprima).<\/p>\n<p>All&#8217;interno di questo file vengono gestiti due stati:<\/p>\n<ul>\n<li><code>isGenerating<\/code>: tiene traccia del fatto che sia in corso la generazione di un&#8217;immagine. Per impostazione predefinita, \u00e8 impostato su false.<\/li>\n<li><code>generatedImage<\/code>: questo stato memorizza le informazioni sull&#8217;immagine che \u00e8 stata generata.<\/li>\n<\/ul>\n<p>Inoltre, viene importata la funzione di utilit\u00e0 <code>downloadImage<\/code> che vi permette di attivare il download dell&#8217;immagine generata quando fate clic sul pulsante <strong>Download<\/strong>:<\/p>\n<pre><code class=\"language-jsx\">&lt;button\n\tclassName=\"btn\"\n\tonClick={() =&gt; downloadImage(generatedImage.photo)}\n&gt;<\/code><\/pre>\n<p>Ora che abbiamo analizzato i file di partenza e abbiamo configurato il progetto, iniziamo a gestire la logica di questa applicazione.<\/p>\n<h2>Generare immagini con l&#8217;API OpenAI DALL-E<\/h2>\n<p>Per sfruttare le funzionalit\u00e0 dell&#8217;API OpenAI DALL-E, userete Node.js per creare un server. All&#8217;interno di questo server, create una route POST. Questa route sar\u00e0 responsabile di ricevere il testo di richiesta inviato dalla vostra applicazione React e di utilizzarlo per generare un&#8217;immagine.<\/p>\n<p>Per iniziare, installate le dipendenze necessarie nella cartella del progetto eseguendo il seguente comando:<\/p>\n<pre><code class=\"language-bash\">npm i express cors openai<\/code><\/pre>\n<p>Inoltre, installate le seguenti dipendenze come dipendenze dev. Questi strumenti vi aiuteranno a configurare il vostro server <a href=\"https:\/\/kinsta.com\/it\/blog\/creare-slackbot-gestire-sito\/\">Node.js<\/a>:<\/p>\n<pre><code class=\"language-bash\">npm i -D dotenv nodemon<\/code><\/pre>\n<p>Le dipendenze installate sono spiegate di seguito:<\/p>\n<ul>\n<li><a href=\"https:\/\/www.npmjs.com\/package\/express\" target=\"_blank\" rel=\"noopener noreferrer\">express<\/a>: questa libreria aiuta a creare un server in Node.js.<\/li>\n<li><a href=\"https:\/\/www.npmjs.com\/package\/cors\" target=\"_blank\" rel=\"noopener noreferrer\">cors<\/a>: CORS facilita la comunicazione sicura tra domini diversi.<\/li>\n<li><a href=\"https:\/\/www.npmjs.com\/package\/openai\" target=\"_blank\" rel=\"noopener noreferrer\">openai<\/a>: questa dipendenza vi permette di accedere all&#8217;API OpenAI DALL-E.<\/li>\n<li><a href=\"https:\/\/www.npmjs.com\/package\/dotenv\" target=\"_blank\" rel=\"noopener noreferrer\">dotenv<\/a>: dotenv aiuta a gestire le variabili d&#8217;ambiente.<\/li>\n<li><a href=\"https:\/\/www.npmjs.com\/package\/nodemon\" target=\"_blank\" rel=\"noopener noreferrer\">nodemon<\/a>: nodemon \u00e8 uno strumento di sviluppo che monitora le modifiche ai file e riavvia automaticamente il server.<\/li>\n<\/ul>\n<p>Una volta che le installazioni sono andate a buon fine, create un file <strong>server.js<\/strong> nella root del vostro progetto. Qui verr\u00e0 memorizzato tutto il codice del server.<\/p>\n<p>Nel file <strong>server.js<\/strong>, importate le <a href=\"https:\/\/kinsta.com\/it\/blog\/librerie-node-js\/\">librerie<\/a> appena installate e istanziatele:<\/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\tapiKey: process.env.OPENAI_API_KEY,\n});\n\n\/\/ Define a function to start the server\nconst startServer = async () =&gt; {\n\tapp.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>Nel codice sopra riportato, importate le librerie necessarie. Quindi, create un&#8217;istanza dell&#8217;applicazione Express usando <code>const app = express();<\/code>. Successivamente, abilitate CORS. Express viene configurato per elaborare i dati JSON in arrivo, specificando un limite di dimensione dei dati di <code>50mb<\/code>.<\/p>\n<p>In seguito, viene creata un&#8217;istanza della classe OpenAI usando la vostra chiave API OpenAI. Create un file <strong>.env<\/strong> nella root del vostro progetto e aggiungete la chiave API usando la variabile <code>OPENAI_API_KEY<\/code>. Infine, definite una funzione asincrona <code>startServer<\/code> e chiamatela per mettere in moto il server.<\/p>\n<p>Ora avete configurato il vostro file <strong>server.js<\/strong>. Creiamo una route POST da utilizzare nella vostra applicazione React per interagire con il server:<\/p>\n<pre><code class=\"language-js\">app.post('\/api', async (req, res) =&gt; {\n\ttry {\n    \tconst { prompt } = req.body;\n    \tconst response = await openai.images.generate({\n        \tprompt,\n        \tn: 1,\n        \tsize: '1024x1024',\n        \tresponse_format: 'b64_json',\n    \t});\n    \tconst image = response.data[0].b64_json;\n    \tres.status(200).json({ photo: image });\n\t} catch (error) {\n    \tconsole.error(error);\n\t}\n});<\/code><\/pre>\n<p>In questo codice, la route \u00e8 impostata su <code>\/api<\/code> ed \u00e8 progettata per gestire le richieste POST in arrivo. All&#8217;interno della funzione di callback della route, ricevete i dati inviati dalla vostra applicazione React usando <code>req.body<\/code>, in particolare il valore <code>prompt<\/code>.<\/p>\n<p>Successivamente, viene invocato il metodo <code>images.generate<\/code> della libreria OpenAI. Questo metodo prende il prompt fornito e genera un&#8217;immagine in risposta. Parametri come <code>n<\/code> determinano il numero di immagini da generare (in questo caso solo una), <code>size<\/code> specifica le dimensioni dell&#8217;immagine e <code>response_format<\/code> indica il formato in cui deve essere fornita la risposta (in questo caso<code>b64_json<\/code> ).<\/p>\n<p>Dopo aver generato l&#8217;immagine, estraete i dati dell&#8217;immagine dalla risposta e memorizzateli nella variabile <code>image<\/code>. Quindi, inviate una risposta JSON all&#8217;applicazione React con i dati dell&#8217;immagine generata, impostando lo stato HTTP a <code>200<\/code> (che indica il successo) utilizzando <code>res.status(200).json({ photo: image })<\/code>.<\/p>\n<p>In caso di errori durante questo processo, il codice all&#8217;interno del blocco <code>catch<\/code> viene eseguito, registrando l&#8217;errore nella console per il debug.<\/p>\n<p>Ora il server \u00e8 pronto! Specifichiamo il comando che verr\u00e0 utilizzato per eseguire il nostro server nel file package.json dell&#8217;oggetto <code>scripts<\/code>:<\/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>Ora, quando eseguirete <code>npm run dev:backend<\/code>, il vostro server si avvier\u00e0 su <a href=\"http:\/\/localhost:8080\/\" target=\"_blank\" rel=\"noopener noreferrer\">http:\/\/localhost:8080\/<\/a>, mentre se eseguirete <code>npm run dev:frontend<\/code>, la vostra applicazione React si avvier\u00e0 su http:\/\/localhost:3000\/. Verificate che entrambi siano in esecuzione in terminali diversi.<\/p>\n<h2>Effettuare richieste HTTP da React al server Node.js<\/h2>\n<p>Nel file <strong>App.jsx<\/strong>, creerete una funzione <code>generateImage<\/code> che viene attivata quando il pulsante <strong>Generate Image<\/strong> viene cliccato nel componente <strong>Form.jsx<\/strong>. Questa funzione accetta due parametri: <code>prompt<\/code> e <code>setPrompt<\/code> dal componente <strong>Form.jsx<\/strong>.<\/p>\n<p>Nella funzione <code>generateImage<\/code>, fate una richiesta HTTP POST al server Node.js:<\/p>\n<pre><code class=\"language-jsx\">const generateImage = async (prompt, setPrompt) =&gt; {\n\tif (prompt) {\n    \ttry {\n        \tsetIsGenerating(true);\n        \tconst response = await fetch(\n            \t'http:\/\/localhost:8080\/api',\n            \t{\n                \tmethod: 'POST',\n                \theaders: {\n                    \t'Content-Type': 'application\/json',\n                \t},\n                \tbody: JSON.stringify({\n                    \tprompt,\n                \t}),\n            \t}\n        \t);\n        \tconst data = await response.json();\n        \tsetGeneratedImage({\n            \tphoto: `data:image\/jpeg;base64,${data.photo}`,\n            \taltText: prompt,\n        \t});\n    \t} catch (err) {\n        \talert(err);\n    \t} finally {\n        \tsetPrompt('');\n        \tsetIsGenerating(false);\n    \t}\n\t} else {\n    \talert('Please provide proper prompt');\n\t}\n};<\/code><\/pre>\n<p>Nel codice precedente, si controlla se il parametro <code>prompt<\/code> ha un valore, quindi si imposta lo stato <code>isGenerating<\/code> su <code>true<\/code> poich\u00e9 l&#8217;operazione sta iniziando. In questo modo il loader apparir\u00e0 sullo schermo perch\u00e9 nel file <strong>App.jsx<\/strong> abbiamo questo codice che controlla la visualizzazione del loader:<\/p>\n<pre><code class=\"language-jsx\">{isGenerating && (\n\t&lt;div&gt; className=\"loader-comp\"&gt;\n    \t&lt;img src={Loader} alt=\"\" className='loader-img' \/&gt;\n\t&lt;\/div&gt;\n)}<\/code><\/pre>\n<p>Usiamo poi il metodo <code>fetch()<\/code> per fare una richiesta POST al server utilizzando <a href=\"http:\/\/localhost:8080\/api\" target=\"_blank\" rel=\"noopener noreferrer\">http:\/\/localhost:8080\/api<\/a>: questo \u00e8 il motivo per cui abbiamo installato CORS, dato che stiamo interagendo con un&#8217;API su un altro URL. Usiamo il prompt come corpo del messaggio. Quindi, estraete la risposta restituita dal server Node.js e impostatela sullo stato <code>generatedImage<\/code>.<\/p>\n<p>Quando lo stato <code>generatedImage<\/code> avr\u00e0 un valore, l&#8217;immagine verr\u00e0 visualizzata:<\/p>\n<pre><code class=\"language-jsx\">{generatedImage.photo ? (\n\t&lt;img\n    \tsrc={generatedImage.photo}\n    \talt={generatedImage.altText}\n    \tclassName=\"imgg ai-img\"\n\t\/&gt;\n) : (\n\t&lt;img\n    \tsrc={preview}\n    \talt=\"preview\"\n    \tclassName=\"imgg preview-img\"\n\t\/&gt;\n)}<\/code><\/pre>\n<p>Ecco come apparir\u00e0 il file <strong>App.jsx<\/strong> completo:<\/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\tconst [isGenerating, setIsGenerating] = useState(false);\n\tconst [generatedImage, setGeneratedImage] = useState({\n    \tphoto: null,\n    \taltText: null,\n\t});\n\n\tconst generateImage = async (prompt, setPrompt) =&gt; {\n    \tif (prompt) {\n        \ttry {\n            \tsetIsGenerating(true);\n            \tconst response = await fetch(\n                \t'http:\/\/localhost:8080\/api',\n                \t{\n                    \tmethod: 'POST',\n                    \theaders: {\n                        \t'Content-Type': 'application\/json',\n                    \t},\n                    \tbody: JSON.stringify({\n                        \tprompt,\n                    \t}),\n                \t}\n            \t);\n            \tconst data = await response.json();\n            \tsetGeneratedImage({\n                \tphoto: `data:image\/jpeg;base64,${data.photo}`,\n                \taltText: prompt,\n            \t});\n        \t} catch (err) {\n            \talert(err);\n        \t} finally {\n            \tsetPrompt('');\n            \tsetIsGenerating(false);\n        \t}\n    \t} else {\n        \talert('Please provide proper prompt');\n    \t}\n\t};\n\n\treturn (\n    \t&lt;div className='container'&gt;\n        \t&lt;Header \/&gt;\n        \t&lt;main className=\"flex-container\"&gt;\n            \t&lt;Form generateImage={generateImage} prompt={prompt} \/&gt;\n            \t&lt;div className=\"image-container\"&gt;\n                \t{generatedImage.photo ? (\n                    \t&lt;img\n                        \tsrc={generatedImage.photo}\n                        \talt={generatedImage.altText}\n                        \tclassName=\"imgg ai-img\"\n                    \t\/&gt;\n                \t) : (\n                    \t&lt;img\n                        \tsrc={preview}\n                        \talt=\"preview\"\n                        \tclassName=\"imgg preview-img\"\n                    \t\/&gt;\n                \t)}\n                \t{isGenerating && (\n                    \t&lt;div className=\"loader-comp\"&gt;\n                        \t&lt;img src={Loader} alt=\"\" className='loader-img' \/&gt;\n                    \t&lt;\/div&gt;\n                \t)}\n                \t&lt;button\n                    \tclassName=\"btn\"\n                    \tonClick={() =&gt; downloadImage(generatedImage.photo)}\n                \t&gt;\n                    \tDownload\n                \t&lt;\/button&gt;\n            \t&lt;\/div&gt;\n        \t&lt;\/main&gt;\n        \t&lt;Footer \/&gt;\n    \t&lt;\/div&gt;\n\t);\n};\n\nexport default App;<\/code><\/pre>\n<h2>Distribuire l\u2019applicazione full-stack su Kinsta<\/h2>\n<p>Finora avete realizzato con successo un&#8217;applicazione React che interagisce con Node.js, il che la rende un&#8217;applicazione full-stack. Ora distribuiamo questa applicazione su Kinsta.<\/p>\n<p>Innanzitutto, configurate il server per servire i file statici generati durante il processo di creazione dell&#8217;applicazione React. Questo si ottiene importando il modulo <code>path<\/code> e usandolo per servire i file statici:<\/p>\n<pre><code class=\"language-js\">const path = require('path');\n\napp.use(express.static(path.resolve(__dirname, '.\/build')));<\/code><\/pre>\n<p>Quando eseguite il comando <code>npm run build && npm run dev:backend<\/code>, la vostra applicazione React full stack verr\u00e0 caricata all&#8217;indirizzo http:\/\/localhost:8080\/. Questo perch\u00e9 l&#8217;applicazione React viene compilata in <a href=\"https:\/\/docs.sevalla.com\/static-sites\/overview\">file statici<\/a> all&#8217;interno della cartella <strong>build<\/strong>. Questi file vengono poi incorporati nel vostro server Node.js come directory statica. Di conseguenza, quando eseguite il vostro server Node, l&#8217;applicazione sar\u00e0 accessibile.<\/p>\n<p>Prima di distribuire il codice al provider Git scelto (<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> o <a href=\"https:\/\/docs.sevalla.com\/applications\/git\/gitlab#authorize-the-kinsta-gitlab-application\">GitLab<\/a>), ricordatevi di modificare l&#8217;URL di richiesta HTTP nel file <strong>App.jsx<\/strong>. Cambiate <code>http:\/\/localhost:8080\/api<\/code> in <code>\/api<\/code>, in quanto l&#8217;URL verr\u00e0 aggiunto.<\/p>\n<p>Infine, nel file <strong>package.json<\/strong>, aggiungete un comando di script per il server Node.js da usare per la distribuzione:<\/p>\n<pre><code class=\"language-bash\">\"scripts\": {\n  \/\/ \u2026\n  \"start\": \"node server.js\",\n},<\/code><\/pre>\n<p>Successivamente, inviate il codice al vostro provider Git preferito e distribuite il repository su Kinsta seguendo questi passaggi:<\/p>\n<ol start=\"1\">\n<li>Accedete al vostro account Kinsta nel cruscotto <a href=\"https:\/\/my.kinsta.com\/?lang=it\">MyKinsta<\/a>.<\/li>\n<li>Selezionate <strong>Applicazione<\/strong> nella barra laterale di sinistra e fate clic sul pulsante <strong>Aggiungi applicazione<\/strong>.<\/li>\n<li>Nella finestra di dialogo che appare, scegliete il repository che volete distribuire. Se avete pi\u00f9 branch, potete selezionare il branch desiderato e dare un nome alla vostra applicazione.<\/li>\n<li>Selezionate uno dei data center disponibili.<\/li>\n<li>Aggiungete il sito <code>OPENAI_API_KEY<\/code> come variabile d&#8217;ambiente. Kinsta imposter\u00e0 automaticamente un file Docker per voi.<\/li>\n<li>Infine, nel campo del comando di avvio, aggiungete <code>npm run build && npm run start<\/code>. Kinsta installer\u00e0 le dipendenze della vostra applicazione da <strong>package.json<\/strong>, quindi costruir\u00e0 e distribuir\u00e0 la vostra applicazione.<\/li>\n<\/ol>\n<h2>Riepilogo<\/h2>\n<p>In questa guida avete imparato a sfruttare la potenza dell&#8217;API OpenAI DALL-E per la generazione di immagini. Avete anche imparato a lavorare con React e Node.js per creare un&#8217;applicazione full-stack di base.<\/p>\n<p>Le possibilit\u00e0 sono infinite con l&#8217;intelligenza artificiale: ogni giorno vengono introdotti nuovi modelli e potete creare progetti straordinari che possono essere distribuiti sull&#8217;<a href=\"https:\/\/sevalla.com\/application-hosting\/\">Hosting di Applicazioni di Kinsta<\/a>.<\/p>\n<p><em>Quale modello vi piacerebbe esplorare e di quale progetto vorreste che scrivessimo prossimamente? Condividetelo nei commenti qui sotto.<\/em><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Nel dinamico panorama della tecnologia, dove l&#8217;innovazione modella continuamente i confini del possibile, l&#8217;intelligenza artificiale (AI, Artificial Intelligence) non smette mai di affascinare. L&#8217;AI si riferisce &#8230;<\/p>\n","protected":false},"author":287,"featured_media":73407,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_kinsta_gated_content":false,"_kinsta_gated_content_redirect":"","footnotes":""},"tags":[],"topic":[26203,26212],"class_list":["post-73406","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>Come costruire un&#039;applicazione React per la generazione di immagini con l&#039;AI usando l&#039;API OpenAI DALL-E- Kinsta\u00ae<\/title>\n<meta name=\"description\" content=\"Scopri con questa guida completa come sfruttare passo dopo passo la potenza dell&#039;intelligenza artificiale per generare immagini straordinarie.\" \/>\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\/it\/blog\/generazione-immagini-ai\/\" \/>\n<meta property=\"og:locale\" content=\"it_IT\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Come costruire un&#039;applicazione React per la generazione di immagini con l&#039;AI usando l&#039;API OpenAI DALL-E\" \/>\n<meta property=\"og:description\" content=\"Scopri con questa guida completa come sfruttare passo dopo passo la potenza dell&#039;intelligenza artificiale per generare immagini straordinarie.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/kinsta.com\/it\/blog\/generazione-immagini-ai\/\" \/>\n<meta property=\"og:site_name\" content=\"Kinsta\u00ae\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/kinstaitalia\/\" \/>\n<meta property=\"article:published_time\" content=\"2023-10-02T12:12:56+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-10-06T05:55:07+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/10\/ai-powered-image-generator-app-with-react-dall-e-1-4.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=\"Scopri con questa guida completa come sfruttare passo dopo passo la potenza dell&#039;intelligenza artificiale per generare immagini straordinarie.\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/10\/ai-powered-image-generator-app-with-react-dall-e-1-4.jpg\" \/>\n<meta name=\"twitter:creator\" content=\"@olawanle_joel\" \/>\n<meta name=\"twitter:site\" content=\"@Kinsta_IT\" \/>\n<meta name=\"twitter:label1\" content=\"Scritto da\" \/>\n\t<meta name=\"twitter:data1\" content=\"Joel Olawanle\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tempo di lettura stimato\" \/>\n\t<meta name=\"twitter:data2\" content=\"12 minuti\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/kinsta.com\/it\/blog\/generazione-immagini-ai\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/it\/blog\/generazione-immagini-ai\/\"},\"author\":{\"name\":\"Joel Olawanle\",\"@id\":\"https:\/\/kinsta.com\/it\/#\/schema\/person\/efa7de30245ca15be5ce1dcacff89c07\"},\"headline\":\"Come costruire un&#8217;applicazione React per la generazione di immagini con l&#8217;AI usando l&#8217;API OpenAI DALL-E\",\"datePublished\":\"2023-10-02T12:12:56+00:00\",\"dateModified\":\"2023-10-06T05:55:07+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/kinsta.com\/it\/blog\/generazione-immagini-ai\/\"},\"wordCount\":2093,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/it\/#organization\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/it\/blog\/generazione-immagini-ai\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/10\/ai-powered-image-generator-app-with-react-dall-e-1-4.jpg\",\"inLanguage\":\"it-IT\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/kinsta.com\/it\/blog\/generazione-immagini-ai\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/kinsta.com\/it\/blog\/generazione-immagini-ai\/\",\"url\":\"https:\/\/kinsta.com\/it\/blog\/generazione-immagini-ai\/\",\"name\":\"Come costruire un'applicazione React per la generazione di immagini con l'AI usando l'API OpenAI DALL-E- Kinsta\u00ae\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/it\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/kinsta.com\/it\/blog\/generazione-immagini-ai\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/it\/blog\/generazione-immagini-ai\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/10\/ai-powered-image-generator-app-with-react-dall-e-1-4.jpg\",\"datePublished\":\"2023-10-02T12:12:56+00:00\",\"dateModified\":\"2023-10-06T05:55:07+00:00\",\"description\":\"Scopri con questa guida completa come sfruttare passo dopo passo la potenza dell'intelligenza artificiale per generare immagini straordinarie.\",\"breadcrumb\":{\"@id\":\"https:\/\/kinsta.com\/it\/blog\/generazione-immagini-ai\/#breadcrumb\"},\"inLanguage\":\"it-IT\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/kinsta.com\/it\/blog\/generazione-immagini-ai\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"it-IT\",\"@id\":\"https:\/\/kinsta.com\/it\/blog\/generazione-immagini-ai\/#primaryimage\",\"url\":\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/10\/ai-powered-image-generator-app-with-react-dall-e-1-4.jpg\",\"contentUrl\":\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/10\/ai-powered-image-generator-app-with-react-dall-e-1-4.jpg\",\"width\":1460,\"height\":730},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/kinsta.com\/it\/blog\/generazione-immagini-ai\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/kinsta.com\/it\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"React\",\"item\":\"https:\/\/kinsta.com\/it\/argomenti\/react\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Come costruire un&#8217;applicazione React per la generazione di immagini con l&#8217;AI usando l&#8217;API OpenAI DALL-E\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/kinsta.com\/it\/#website\",\"url\":\"https:\/\/kinsta.com\/it\/\",\"name\":\"Kinsta\u00ae\",\"description\":\"Soluzioni di hosting premium, veloci e sicure\",\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/it\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/kinsta.com\/it\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"it-IT\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/kinsta.com\/it\/#organization\",\"name\":\"Kinsta\",\"url\":\"https:\/\/kinsta.com\/it\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"it-IT\",\"@id\":\"https:\/\/kinsta.com\/it\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/12\/kinsta-logo.jpeg\",\"contentUrl\":\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/12\/kinsta-logo.jpeg\",\"width\":500,\"height\":500,\"caption\":\"Kinsta\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/it\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/kinstaitalia\/\",\"https:\/\/x.com\/Kinsta_IT\",\"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\/it\/#\/schema\/person\/efa7de30245ca15be5ce1dcacff89c07\",\"name\":\"Joel Olawanle\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"it-IT\",\"@id\":\"https:\/\/kinsta.com\/it\/#\/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\/it\/blog\/author\/joelolawanle\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Come costruire un'applicazione React per la generazione di immagini con l'AI usando l'API OpenAI DALL-E- Kinsta\u00ae","description":"Scopri con questa guida completa come sfruttare passo dopo passo la potenza dell'intelligenza artificiale per generare immagini straordinarie.","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\/it\/blog\/generazione-immagini-ai\/","og_locale":"it_IT","og_type":"article","og_title":"Come costruire un'applicazione React per la generazione di immagini con l'AI usando l'API OpenAI DALL-E","og_description":"Scopri con questa guida completa come sfruttare passo dopo passo la potenza dell'intelligenza artificiale per generare immagini straordinarie.","og_url":"https:\/\/kinsta.com\/it\/blog\/generazione-immagini-ai\/","og_site_name":"Kinsta\u00ae","article_publisher":"https:\/\/www.facebook.com\/kinstaitalia\/","article_published_time":"2023-10-02T12:12:56+00:00","article_modified_time":"2023-10-06T05:55:07+00:00","og_image":[{"width":1460,"height":730,"url":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/10\/ai-powered-image-generator-app-with-react-dall-e-1-4.jpg","type":"image\/jpeg"}],"author":"Joel Olawanle","twitter_card":"summary_large_image","twitter_description":"Scopri con questa guida completa come sfruttare passo dopo passo la potenza dell'intelligenza artificiale per generare immagini straordinarie.","twitter_image":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/10\/ai-powered-image-generator-app-with-react-dall-e-1-4.jpg","twitter_creator":"@olawanle_joel","twitter_site":"@Kinsta_IT","twitter_misc":{"Scritto da":"Joel Olawanle","Tempo di lettura stimato":"12 minuti"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/kinsta.com\/it\/blog\/generazione-immagini-ai\/#article","isPartOf":{"@id":"https:\/\/kinsta.com\/it\/blog\/generazione-immagini-ai\/"},"author":{"name":"Joel Olawanle","@id":"https:\/\/kinsta.com\/it\/#\/schema\/person\/efa7de30245ca15be5ce1dcacff89c07"},"headline":"Come costruire un&#8217;applicazione React per la generazione di immagini con l&#8217;AI usando l&#8217;API OpenAI DALL-E","datePublished":"2023-10-02T12:12:56+00:00","dateModified":"2023-10-06T05:55:07+00:00","mainEntityOfPage":{"@id":"https:\/\/kinsta.com\/it\/blog\/generazione-immagini-ai\/"},"wordCount":2093,"commentCount":0,"publisher":{"@id":"https:\/\/kinsta.com\/it\/#organization"},"image":{"@id":"https:\/\/kinsta.com\/it\/blog\/generazione-immagini-ai\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/10\/ai-powered-image-generator-app-with-react-dall-e-1-4.jpg","inLanguage":"it-IT","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/kinsta.com\/it\/blog\/generazione-immagini-ai\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/kinsta.com\/it\/blog\/generazione-immagini-ai\/","url":"https:\/\/kinsta.com\/it\/blog\/generazione-immagini-ai\/","name":"Come costruire un'applicazione React per la generazione di immagini con l'AI usando l'API OpenAI DALL-E- Kinsta\u00ae","isPartOf":{"@id":"https:\/\/kinsta.com\/it\/#website"},"primaryImageOfPage":{"@id":"https:\/\/kinsta.com\/it\/blog\/generazione-immagini-ai\/#primaryimage"},"image":{"@id":"https:\/\/kinsta.com\/it\/blog\/generazione-immagini-ai\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/10\/ai-powered-image-generator-app-with-react-dall-e-1-4.jpg","datePublished":"2023-10-02T12:12:56+00:00","dateModified":"2023-10-06T05:55:07+00:00","description":"Scopri con questa guida completa come sfruttare passo dopo passo la potenza dell'intelligenza artificiale per generare immagini straordinarie.","breadcrumb":{"@id":"https:\/\/kinsta.com\/it\/blog\/generazione-immagini-ai\/#breadcrumb"},"inLanguage":"it-IT","potentialAction":[{"@type":"ReadAction","target":["https:\/\/kinsta.com\/it\/blog\/generazione-immagini-ai\/"]}]},{"@type":"ImageObject","inLanguage":"it-IT","@id":"https:\/\/kinsta.com\/it\/blog\/generazione-immagini-ai\/#primaryimage","url":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/10\/ai-powered-image-generator-app-with-react-dall-e-1-4.jpg","contentUrl":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/10\/ai-powered-image-generator-app-with-react-dall-e-1-4.jpg","width":1460,"height":730},{"@type":"BreadcrumbList","@id":"https:\/\/kinsta.com\/it\/blog\/generazione-immagini-ai\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/kinsta.com\/it\/"},{"@type":"ListItem","position":2,"name":"React","item":"https:\/\/kinsta.com\/it\/argomenti\/react\/"},{"@type":"ListItem","position":3,"name":"Come costruire un&#8217;applicazione React per la generazione di immagini con l&#8217;AI usando l&#8217;API OpenAI DALL-E"}]},{"@type":"WebSite","@id":"https:\/\/kinsta.com\/it\/#website","url":"https:\/\/kinsta.com\/it\/","name":"Kinsta\u00ae","description":"Soluzioni di hosting premium, veloci e sicure","publisher":{"@id":"https:\/\/kinsta.com\/it\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/kinsta.com\/it\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"it-IT"},{"@type":"Organization","@id":"https:\/\/kinsta.com\/it\/#organization","name":"Kinsta","url":"https:\/\/kinsta.com\/it\/","logo":{"@type":"ImageObject","inLanguage":"it-IT","@id":"https:\/\/kinsta.com\/it\/#\/schema\/logo\/image\/","url":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/12\/kinsta-logo.jpeg","contentUrl":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/12\/kinsta-logo.jpeg","width":500,"height":500,"caption":"Kinsta"},"image":{"@id":"https:\/\/kinsta.com\/it\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/kinstaitalia\/","https:\/\/x.com\/Kinsta_IT","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\/it\/#\/schema\/person\/efa7de30245ca15be5ce1dcacff89c07","name":"Joel Olawanle","image":{"@type":"ImageObject","inLanguage":"it-IT","@id":"https:\/\/kinsta.com\/it\/#\/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\/it\/blog\/author\/joelolawanle\/"}]}},"acf":[],"_links":{"self":[{"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/posts\/73406","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/users\/287"}],"replies":[{"embeddable":true,"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/comments?post=73406"}],"version-history":[{"count":15,"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/posts\/73406\/revisions"}],"predecessor-version":[{"id":73522,"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/posts\/73406\/revisions\/73522"}],"alternate":[{"embeddable":true,"hreflang":"en","title":"English","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/73406\/translations\/en"},{"embeddable":true,"hreflang":"pt","title":"Portuguese","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/73406\/translations\/pt"},{"embeddable":true,"hreflang":"fr","title":"French","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/73406\/translations\/fr"},{"embeddable":true,"hreflang":"de","title":"German","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/73406\/translations\/de"},{"embeddable":true,"hreflang":"ja","title":"Japanese","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/73406\/translations\/jp"},{"embeddable":true,"hreflang":"es","title":"Spanish","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/73406\/translations\/es"},{"embeddable":true,"hreflang":"it","title":"Italian","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/73406\/translations\/it"},{"href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/73406\/tree"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/media\/73407"}],"wp:attachment":[{"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/media?parent=73406"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/tags?post=73406"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/topic?post=73406"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}