{"id":73434,"date":"2023-10-02T13:12:23","date_gmt":"2023-10-02T12:12:23","guid":{"rendered":"https:\/\/kinsta.com\/fr\/?p=73434&#038;preview=true&#038;preview_id=73434"},"modified":"2023-10-04T07:18:27","modified_gmt":"2023-10-04T06:18:27","slug":"generateur-image-ia","status":"publish","type":"post","link":"https:\/\/kinsta.com\/fr\/blog\/generateur-image-ia\/","title":{"rendered":"Cr\u00e9ez une application React pour la g\u00e9n\u00e9ration d&rsquo;images par l&rsquo;IA en utilisant l&rsquo;API DALL-E d&rsquo;OpenAI"},"content":{"rendered":"<p>Dans le paysage dynamique de la technologie, o\u00f9 l&rsquo;innovation repousse sans cesse les limites du possible, l&rsquo;intelligence artificielle (IA) ne cesse de captiver notre imagination.<\/p>\n<p>L&rsquo;IA fait r\u00e9f\u00e9rence \u00e0 la simulation des processus de l&rsquo;intelligence humaine par des syst\u00e8mes informatiques. Ces processus comprennent des t\u00e2ches telles que l&rsquo;apprentissage, le raisonnement, la r\u00e9solution de probl\u00e8mes, la perception, la <a href=\"https:\/\/kinsta.com\/fr\/blog\/detection-contenu-ia\/\">compr\u00e9hension du langage<\/a> et la prise de d\u00e9cision.<\/p>\n<p>Aujourd&rsquo;hui, des individus et des entreprises ont d\u00e9velopp\u00e9 et form\u00e9 plusieurs mod\u00e8les d&rsquo;IA pour qu&rsquo;ils accomplissent certaines t\u00e2ches mieux que les humains en temps r\u00e9el. Parmi les innombrables applications de l&rsquo;IA, la g\u00e9n\u00e9ration d&rsquo;images par l&rsquo;IA est un domaine particuli\u00e8rement int\u00e9ressant.<\/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>Ce que vous construisez<\/h2>\n<p>Ce guide explique comment cr\u00e9er une application React qui s&rsquo;int\u00e8gre de mani\u00e8re transparente \u00e0 l&rsquo;API <a href=\"https:\/\/labs.openai.com\/\" target=\"_blank\" rel=\"noopener noreferrer\">OpenAI DALL-E<\/a> via un backend <a href=\"https:\/\/kinsta.com\/fr\/blog\/qu-est-ce-que-node-js\/\">Node.js<\/a> et g\u00e9n\u00e8re des images captivantes \u00e0 partir d&rsquo;invites textuelles.<\/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=\"G\u00e9n\u00e9rateur d'images IA en action, produisant des images vivantes et cr\u00e9atives \u00e0 l'aide de l'API DALL-E.\" width=\"1600\" height=\"877\"><figcaption class=\"wp-caption-text\">G\u00e9n\u00e9rateur d&rsquo;images IA en action, produisant des images vivantes et cr\u00e9atives \u00e0 l&rsquo;aide de l&rsquo;API DALL-E.<\/figcaption><\/figure>\n<h3>Pr\u00e9-requis<\/h3>\n<p>Pour suivre ce projet, vous devez avoir :<\/p>\n<ul>\n<li>Une compr\u00e9hension fondamentale de <a href=\"https:\/\/kinsta.com\/fr\/blog\/qu-est-ce-que-le-html\/\">HTML<\/a>, <a href=\"https:\/\/kinsta.com\/fr\/blog\/meilleurs-pratiques-css\/\">CSS<\/a> et <a href=\"https:\/\/kinsta.com\/javascript\/\">JavaScript<\/a><\/li>\n<li>Une connaissance de base de <a href=\"https:\/\/kinsta.com\/fr\/blog\/qu-est-react-js\/\">React<\/a> et <a href=\"https:\/\/kinsta.com\/fr\/blog\/deno-vs-node-js\/\">Node.js<\/a><\/li>\n<li>Node.js et npm (<a href=\"https:\/\/kinsta.com\/fr\/blog\/qu-est-npm\/\">Node Package Manager<\/a>) ou yarn install\u00e9s sur votre ordinateur<\/li>\n<\/ul>\n<h2>Qu&rsquo;est-ce que l&rsquo;API OpenAI DALL-E ?<\/h2>\n<p>OpenAI API est une plateforme bas\u00e9e sur le cloud qui donne aux <a href=\"https:\/\/kinsta.com\/fr\/blog\/types-de-developpeurs\/\">d\u00e9veloppeurs<\/a> l&rsquo;acc\u00e8s aux mod\u00e8les d&rsquo;IA pr\u00e9-entra\u00een\u00e9s d&rsquo;OpenAI, tels que DALL-E et GPT-3 (nous avons utilis\u00e9 ce mod\u00e8le pour <a href=\"https:\/\/kinsta.com\/fr\/blog\/clone-application-chatgpt\/\">construire un clone de ChatGPT<\/a> avec le code dans <a href=\"https:\/\/github.com\/kinsta\/chatgpt-clone\" target=\"_blank\" rel=\"noopener noreferrer\">ce d\u00e9p\u00f4t Git<\/a>). Il permet aux d\u00e9veloppeurs d&rsquo;ajouter \u00e0 leurs programmes des fonctions d&rsquo;IA telles que le r\u00e9sum\u00e9, la traduction, la g\u00e9n\u00e9ration d&rsquo;images et la modification, sans avoir \u00e0 d\u00e9velopper et \u00e0 entra\u00eener leurs mod\u00e8les.<\/p>\n<p>Pour utiliser l&rsquo;API OpenAI, cr\u00e9ez un compte \u00e0 l&rsquo;aide de votre compte Google ou de votre adresse e-mail sur le <a href=\"https:\/\/platform.openai.com\/\" target=\"_blank\" rel=\"noopener noreferrer\">site web OpenAI<\/a> et obtenez une cl\u00e9 API. Pour g\u00e9n\u00e9rer une cl\u00e9 API, cliquez sur <strong>Personnel<\/strong> dans le coin sup\u00e9rieur droit du site web, puis s\u00e9lectionnez <strong>Voir les cl\u00e9s API<\/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=\"Le processus de cr\u00e9ation d'une cl\u00e9 secr\u00e8te de l'API OpenAI.\" width=\"1600\" height=\"877\"><figcaption class=\"wp-caption-text\">Le processus de cr\u00e9ation d&rsquo;une cl\u00e9 secr\u00e8te de l&rsquo;API OpenAI.<\/figcaption><\/figure>\n<p>Cliquez sur le bouton <strong>Cr\u00e9er une nouvelle cl\u00e9 secr\u00e8te<\/strong> et <a href=\"https:\/\/kinsta.com\/fr\/blog\/gestionnaires-mots-passe\/\">enregistrez la cl\u00e9<\/a> quelque part. Vous l&rsquo;utiliserez dans cette application pour interagir avec l&rsquo;API DALL-E de l&rsquo;OpenAI.<\/p>\n<h2>Configuration de l&rsquo;environnement de d\u00e9veloppement<\/h2>\n<p>Vous pouvez cr\u00e9er une application React \u00e0 partir de z\u00e9ro et d\u00e9velopper votre propre interface, ou vous pouvez utiliser notre mod\u00e8le de d\u00e9marrage <a href=\"https:\/\/kinsta.com\/fr\/sujets\/git\/\">Git<\/a> en suivant ces \u00e9tapes :<\/p>\n<ol start=\"1\">\n<li>Visitez le <a href=\"https:\/\/github.com\/kinsta\/ai-img-generator\" target=\"_blank\" rel=\"noopener noreferrer\">d\u00e9p\u00f4t GitHub<\/a> de ce projet.<\/li>\n<li>S\u00e9lectionnez <strong>Utiliser ce mod\u00e8le<\/strong> &gt; <strong>Cr\u00e9er un nouveau d\u00e9p\u00f4t<\/strong> pour copier le code de d\u00e9marrage dans un d\u00e9p\u00f4t de votre compte GitHub (cochez la case pour <strong>inclure toutes les branches<\/strong>).<\/li>\n<li>T\u00e9l\u00e9chargez le d\u00e9p\u00f4t sur votre ordinateur local et passez \u00e0 la branche <a href=\"https:\/\/github.com\/kinsta\/ai-img-generator\/tree\/starter-files\" target=\"_blank\" rel=\"noopener noreferrer\">starter-files<\/a> \u00e0 l&rsquo;aide de la commande : <code>git checkout starter-files<\/code>.<\/li>\n<li>Installez les d\u00e9pendances n\u00e9cessaires en ex\u00e9cutant la commande <code>npm install<\/code>.<\/li>\n<\/ol>\n<p>Une fois l&rsquo;installation termin\u00e9e, vous pouvez lancer le projet sur votre ordinateur local en lan\u00e7ant la commande <code>npm run start<\/code>. Le projet est alors disponible \u00e0 l&rsquo;adresse <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=\"Interface utilisateur d'une application de g\u00e9n\u00e9ration d'images d'IA illustrant la puissance de l'intelligence artificielle dans la cr\u00e9ation d'images.\" width=\"1600\" height=\"877\"><figcaption class=\"wp-caption-text\">Interface utilisateur d&rsquo;une application de g\u00e9n\u00e9ration d&rsquo;images d&rsquo;IA illustrant la puissance de l&rsquo;intelligence artificielle dans la cr\u00e9ation d&rsquo;images.<\/figcaption><\/figure>\n<h3>Comprendre les fichiers du projet<\/h3>\n<p>Dans ce projet, nous avons ajout\u00e9 toutes les d\u00e9pendances n\u00e9cessaires \u00e0 votre application React. Voici un aper\u00e7u de ce qui a \u00e9t\u00e9 install\u00e9 :<\/p>\n<ul>\n<li><a href=\"https:\/\/www.npmjs.com\/package\/file-server\" target=\"_blank\" rel=\"noopener noreferrer\">file-server<\/a> : Cette biblioth\u00e8que utilitaire simplifie le processus de t\u00e9l\u00e9chargement des images g\u00e9n\u00e9r\u00e9es. Elle est li\u00e9e au bouton de t\u00e9l\u00e9chargement, ce qui garantit une exp\u00e9rience utilisateur fluide.<\/li>\n<li><a href=\"https:\/\/www.npmjs.com\/package\/uuid\" target=\"_blank\" rel=\"noopener noreferrer\">uuid <\/a>: Cette biblioth\u00e8que attribue une identification unique \u00e0 chaque image. Cela permet d&rsquo;\u00e9viter que des images partagent le m\u00eame nom de fichier par d\u00e9faut et de maintenir l&rsquo;ordre et la clart\u00e9.<\/li>\n<li><a href=\"https:\/\/www.npmjs.com\/package\/react-icons\" target=\"_blank\" rel=\"noopener noreferrer\">react-icons <\/a>: Int\u00e9gr\u00e9e au projet, cette biblioth\u00e8que incorpore sans effort des ic\u00f4nes, am\u00e9liorant ainsi l&rsquo;attrait visuel de votre application.<\/li>\n<\/ul>\n<p>Au c\u0153ur de votre application React se trouve le dossier <strong>src<\/strong>. C&rsquo;est l\u00e0 que se trouve le code JavaScript essentiel pour Webpack. Comprenons les fichiers et les dossiers du dossier <strong>src<\/strong>:<\/p>\n<ul>\n<li><strong>assets :<\/strong> Dans ce r\u00e9pertoire, vous trouverez les images et le loader gif qui sont utilis\u00e9s tout au long du projet.<\/li>\n<li><strong>data :<\/strong> Ce dossier contient un fichier <strong>index.js<\/strong> qui exporte un tableau de 30 invites. Ces invites peuvent \u00eatre utilis\u00e9es pour g\u00e9n\u00e9rer des images diverses et al\u00e9atoires. N&rsquo;h\u00e9sitez pas \u00e0 le modifier.<\/li>\n<li><strong>index.css :<\/strong> C&rsquo;est dans ce dossier que sont stock\u00e9s les styles utilis\u00e9s dans ce projet.<\/li>\n<\/ul>\n<h4>Comprendre le dossier Utils<\/h4>\n<p>Dans ce dossier, le fichier <strong>index.js<\/strong> d\u00e9finit deux fonctions r\u00e9utilisables. La premi\u00e8re fonction randomise la s\u00e9lection des invites d\u00e9crivant les diff\u00e9rentes images qui peuvent \u00eatre g\u00e9n\u00e9r\u00e9es.<\/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>La seconde fonction g\u00e8re le t\u00e9l\u00e9chargement des images g\u00e9n\u00e9r\u00e9es en tirant parti de la d\u00e9pendance de <strong>file-saver<\/strong>. Ces deux fonctions ont \u00e9t\u00e9 cr\u00e9\u00e9es dans un souci de modularit\u00e9 et d&rsquo;efficacit\u00e9, et elles peuvent \u00eatre import\u00e9es dans des composants en cas de besoin.<\/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>Dans le code ci-dessus, la d\u00e9pendance <strong>uuid<\/strong> donne \u00e0 chaque fichier image g\u00e9n\u00e9r\u00e9 un identifiant unique, afin qu&rsquo;ils n&rsquo;aient pas le m\u00eame nom de fichier.<\/p>\n<h4>Comprendre les composants<\/h4>\n<p>Il s&rsquo;agit de petits blocs de code s\u00e9par\u00e9s pour faciliter la maintenance et la compr\u00e9hension de votre code. Pour ce projet, trois composants ont \u00e9t\u00e9 cr\u00e9\u00e9s : <strong>Header.jsx<\/strong>, <strong>Footer.jsx<\/strong> et <strong>Form.jsx<\/strong>. Le composant principal est le composant Form, dans lequel les donn\u00e9es sont re\u00e7ues et transmises au fichier <strong>App.jsx<\/strong> avec la fonction <code>generateImage<\/code> ajout\u00e9e en tant qu&rsquo;\u00e9v\u00e8nement <code>onClick<\/code> au bouton <strong>Generate Image<\/strong>.<\/p>\n<p>Dans le composant Form, un \u00e9tat est cr\u00e9\u00e9 pour stocker et mettre \u00e0 jour l&rsquo;invite. En outre, une fonction vous permet de cliquer sur une ic\u00f4ne al\u00e9atoire pour g\u00e9n\u00e9rer des invites al\u00e9atoires. Cela est possible gr\u00e2ce \u00e0 la fonction <code>handleRandomPrompt<\/code>, qui utilise la fonction <code>getRandomPrompt<\/code> que vous avez d\u00e9j\u00e0 configur\u00e9e. Lorsque vous cliquez sur l&rsquo;ic\u00f4ne, elle r\u00e9cup\u00e8re une invite al\u00e9atoire et la met \u00e0 jour dans l&rsquo;\u00e9tat :<\/p>\n<pre><code class=\"language-jsx\">const handleRandomPrompt = () =&gt; {\n    const randomPrompt = getRandomPrompt();\n    setPrompt(randomPrompt)\n}<\/code><\/pre>\n<h4>Comprendre le fichier App.jsx<\/h4>\n<p>C&rsquo;est dans ce fichier que r\u00e9side la majeure partie du code. Tous les composants sont rassembl\u00e9s ici. Il y a \u00e9galement une zone d\u00e9sign\u00e9e pour afficher l&rsquo;image g\u00e9n\u00e9r\u00e9e. Si aucune image n&rsquo;a encore \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e, une image de remplacement (image de pr\u00e9visualisation) est affich\u00e9e.<\/p>\n<p>Dans ce fichier, deux \u00e9tats sont g\u00e9r\u00e9s :<\/p>\n<ul>\n<li><code>isGenerating<\/code>: Ceci permet de savoir si une image est en train d&rsquo;\u00eatre g\u00e9n\u00e9r\u00e9e. Par d\u00e9faut, il est d\u00e9fini sur false.<\/li>\n<li><code>generatedImage<\/code>: Cet \u00e9tat stocke des informations sur l&rsquo;image qui a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e.<\/li>\n<\/ul>\n<p>En outre, la fonction utilitaire <code>downloadImage<\/code> est import\u00e9e, ce qui vous permet de d\u00e9clencher le t\u00e9l\u00e9chargement de l&rsquo;image g\u00e9n\u00e9r\u00e9e lorsque vous cliquez sur le bouton <strong>Download <\/strong>:<\/p>\n<pre><code class=\"language-jsx\">&lt;button\n    className=\"btn\"\n    onClick={() =&gt; downloadImage(generatedImage.photo)}\n&gt;<\/code><\/pre>\n<p>Maintenant que vous avez compris les fichiers de d\u00e9marrage et que vous avez configur\u00e9 votre projet. Commen\u00e7ons \u00e0 g\u00e9rer la logique de cette application.<\/p>\n<h2>G\u00e9n\u00e9rer des images avec l&rsquo;API DALL-E d&rsquo;OpenAI<\/h2>\n<p>Pour exploiter les capacit\u00e9s de l&rsquo;API DALL-E d&rsquo;OpenAI, vous utiliserez Node.js pour \u00e9tablir un serveur. Au sein de ce serveur, vous cr\u00e9erez une route POST. Cette route sera charg\u00e9e de recevoir le texte d&rsquo;invite envoy\u00e9 par votre application React et de l&rsquo;utiliser pour g\u00e9n\u00e9rer une image.<\/p>\n<p>Pour commencer, installez les d\u00e9pendances n\u00e9cessaires dans votre r\u00e9pertoire de projet en ex\u00e9cutant la commande suivante :<\/p>\n<pre><code class=\"language-bash\">npm i express cors openai<\/code><\/pre>\n<p>De plus, installez les d\u00e9pendances suivantes en tant que d\u00e9pendances dev. Ces outils vous aideront \u00e0 configurer votre serveur <a href=\"https:\/\/kinsta.com\/fr\/blog\/construire-slackbot-nodejs-api-kinsta-gesion-site\/\">Node.js<\/a>:<\/p>\n<pre><code class=\"language-bash\">npm i -D dotenv nodemon<\/code><\/pre>\n<p>Les d\u00e9pendances install\u00e9es sont expliqu\u00e9es comme ci-dessous :<\/p>\n<ul>\n<li><a href=\"https:\/\/www.npmjs.com\/package\/express\" target=\"_blank\" rel=\"noopener noreferrer\">express<\/a> : Cette biblioth\u00e8que permet de cr\u00e9er un serveur en Node.js.<\/li>\n<li><a href=\"https:\/\/www.npmjs.com\/package\/cors\" target=\"_blank\" rel=\"noopener noreferrer\">cors<\/a> : CORS facilite la communication s\u00e9curis\u00e9e entre diff\u00e9rents domaines.<\/li>\n<li><a href=\"https:\/\/www.npmjs.com\/package\/openai\" target=\"_blank\" rel=\"noopener noreferrer\">openai<\/a> : Cette d\u00e9pendance vous donne acc\u00e8s \u00e0 l&rsquo;API DALL-E d&rsquo;OpenAI.<\/li>\n<li><a href=\"https:\/\/www.npmjs.com\/package\/dotenv\" target=\"_blank\" rel=\"noopener noreferrer\">dotenv<\/a> : dotenv vous aide \u00e0 g\u00e9rer les variables d&rsquo;environnement.<\/li>\n<li><a href=\"https:\/\/www.npmjs.com\/package\/nodemon\" target=\"_blank\" rel=\"noopener noreferrer\">nodemon<\/a> : nodemon est un outil de d\u00e9veloppement qui surveille les modifications apport\u00e9es \u00e0 vos fichiers et red\u00e9marre automatiquement le serveur.<\/li>\n<\/ul>\n<p>Une fois les installations r\u00e9ussies, cr\u00e9ez un fichier <strong>server.js<\/strong> \u00e0 la racine de votre projet. C&rsquo;est l\u00e0 que sera stock\u00e9 tout le code de votre serveur.<\/p>\n<p>Dans le fichier <strong>server.js<\/strong>, importez les <a href=\"https:\/\/kinsta.com\/fr\/blog\/bibliotheques-node-js\/\">biblioth\u00e8ques<\/a> que vous venez d&rsquo;installer et instanciez-les :<\/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>Dans le code ci-dessus, vous importez les biblioth\u00e8ques n\u00e9cessaires. Ensuite, cr\u00e9ez une instance de l&rsquo;application Express \u00e0 l&rsquo;aide de <code>const app = express();<\/code>. Ensuite, activez CORS. Ensuite, Express est configur\u00e9 pour traiter les donn\u00e9es JSON entrantes, en sp\u00e9cifiant une limite de taille de donn\u00e9es de <code>50mb<\/code>.<\/p>\n<p>Ensuite, une instance de la classe OpenAI est cr\u00e9\u00e9e en utilisant votre cl\u00e9 API OpenAI. Cr\u00e9ez un fichier <strong>.env<\/strong> \u00e0 la racine de votre projet et ajoutez votre cl\u00e9 API en utilisant la variable <code>OPENAI_API_KEY<\/code>. Enfin, vous d\u00e9finissez une fonction asynchrone <code>startServer<\/code> et l&rsquo;appelez pour mettre le serveur en mouvement.<\/p>\n<p>Vous avez maintenant configur\u00e9 votre fichier <strong>server.js.<\/strong> Cr\u00e9ons une route POST que vous pouvez utiliser dans votre application React pour interagir avec ce serveur :<\/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>Dans ce code, la route est d\u00e9finie sur <code>\/api<\/code>, et elle est con\u00e7ue pour g\u00e9rer les requ\u00eates POST entrantes. Dans la fonction de rappel de la route, vous recevez les donn\u00e9es envoy\u00e9es par votre application React \u00e0 l&rsquo;aide de <code>req.body<\/code> &#8211; en particulier la valeur <code>prompt<\/code>.<\/p>\n<p>Ensuite, la m\u00e9thode <code>images.generate<\/code> de la biblioth\u00e8que OpenAI est invoqu\u00e9e. Cette m\u00e9thode prend l&rsquo;invite fournie et g\u00e9n\u00e8re une image en r\u00e9ponse. Des param\u00e8tres tels que <code>n<\/code> d\u00e9terminent le nombre d&rsquo;images \u00e0 g\u00e9n\u00e9rer (ici, une seule), <code>size<\/code> sp\u00e9cifie les dimensions de l&rsquo;image et <code>response_format<\/code> indique le format dans lequel la r\u00e9ponse doit \u00eatre fournie (<code>b64_json<\/code> dans ce cas).<\/p>\n<p>Apr\u00e8s avoir g\u00e9n\u00e9r\u00e9 l&rsquo;image, vous extrayez les donn\u00e9es de l&rsquo;image de la r\u00e9ponse et les stockez dans la variable <code>image<\/code>. Ensuite, vous renvoyez une r\u00e9ponse JSON \u00e0 l&rsquo;application React avec les donn\u00e9es de l&rsquo;image g\u00e9n\u00e9r\u00e9e, en d\u00e9finissant le statut HTTP \u00e0 <code>200<\/code> (indiquant le succ\u00e8s) \u00e0 l&rsquo;aide de <code>res.status(200).json({ photo: image })<\/code>.<\/p>\n<p>En cas d&rsquo;erreur au cours de ce processus, le code contenu dans le bloc <code>catch<\/code> est ex\u00e9cut\u00e9, en enregistrant l&rsquo;erreur dans la console pour le d\u00e9bogage.<\/p>\n<p>Le serveur est maintenant pr\u00eat ! Sp\u00e9cifions la commande qui sera utilis\u00e9e pour ex\u00e9cuter notre serveur dans le fichier package.json de l&rsquo;objet <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>Maintenant, lorsque vous lancez <code>npm run dev:backend<\/code>, votre serveur d\u00e9marrera sur <a href=\"http:\/\/localhost:8080\/\" target=\"_blank\" rel=\"noopener noreferrer\">http:\/\/localhost:8080\/,<\/a> tandis que si vous lancez <code>npm run dev:frontend<\/code>, votre application React d\u00e9marrera sur http:\/\/localhost:3000\/. Assurez-vous que les deux s&rsquo;ex\u00e9cutent dans des terminaux diff\u00e9rents.<\/p>\n<h2>Effectuer des requ\u00eates HTTP depuis React vers le serveur Node.js<\/h2>\n<p>Dans le fichier <strong>App.jsx<\/strong>, vous allez cr\u00e9er une fonction <code>generateImage<\/code> qui est d\u00e9clench\u00e9e lorsque le bouton <strong>Generate Image<\/strong> est cliqu\u00e9 dans le composant <strong>Form.jsx<\/strong>. Cette fonction accepte deux param\u00e8tres : <code>prompt<\/code> et <code>setPrompt<\/code> du composant <strong>Form.jsx<\/strong>.<\/p>\n<p>Dans la fonction <code>generateImage<\/code>, envoyez une requ\u00eate HTTP POST au serveur Node.js :<\/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>Dans le code ci-dessus, vous v\u00e9rifiez si le param\u00e8tre <code>prompt<\/code> a une valeur, puis vous d\u00e9finissez l&rsquo;\u00e9tat <code>isGenerating<\/code> \u00e0 <code>true<\/code> puisque l&rsquo;op\u00e9ration commence. Cela fera appara\u00eetre le chargeur \u00e0 l&rsquo;\u00e9cran car dans le fichier <strong>App.jsx<\/strong>, nous avons ce code qui contr\u00f4le l&rsquo;affichage du chargeur :<\/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>Ensuite, utilisez la m\u00e9thode <code>fetch()<\/code> pour faire une requ\u00eate POST au serveur en utilisant <a href=\"http:\/\/localhost:8080\/api\" target=\"_blank\" rel=\"noopener noreferrer\">http:\/\/localhost:8080\/api<\/a> &#8211; c&rsquo;est la raison pour laquelle nous avons install\u00e9 CORS car nous interagissons avec une API sur une autre URL. Nous utilisons l&rsquo;invite comme corps du message. Extrayez ensuite la r\u00e9ponse renvoy\u00e9e par le serveur Node.js et mettez-la \u00e0 l&rsquo;\u00e9tat <code>generatedImage<\/code>.<\/p>\n<p>Une fois que l&rsquo;\u00e9tat <code>generatedImage<\/code> a une valeur, l&rsquo;image est affich\u00e9e :<\/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>Voici \u00e0 quoi ressemblera votre fichier <strong>App.jsx<\/strong> complet :<\/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>D\u00e9ployez votre application compl\u00e8te sur Kinsta<\/h2>\n<p>Jusqu&rsquo;\u00e0 pr\u00e9sent, vous avez r\u00e9ussi \u00e0 construire une application React qui interagit avec Node.js, ce qui en fait une application compl\u00e8te. D\u00e9ployons maintenant cette application sur Kinsta.<\/p>\n<p>Tout d&rsquo;abord, configurez le serveur pour qu&rsquo;il serve les fichiers statiques g\u00e9n\u00e9r\u00e9s pendant le processus de construction de l&rsquo;application React. Pour cela, importez le module <code>path<\/code> et utilisez-le pour servir les fichiers statiques :<\/p>\n<pre><code class=\"language-js\">const path = require('path');\n\napp.use(express.static(path.resolve(__dirname, '.\/build')));<\/code><\/pre>\n<p>Lorsque vous ex\u00e9cutez la commande <code>npm run build && npm run dev:backend<\/code>, votre application React compl\u00e8te se chargera \u00e0 l&rsquo;adresse http:\/\/localhost:8080\/. C&rsquo;est parce que l&rsquo;application React est compil\u00e9e dans des <a href=\"https:\/\/docs.sevalla.com\/static-sites\/overview\">fichiers statiques<\/a> dans le dossier <strong>build<\/strong>. Ces fichiers sont ensuite incorpor\u00e9s dans votre serveur Node.js en tant que r\u00e9pertoire statique. Par cons\u00e9quent, lorsque vous ex\u00e9cutez votre serveur Node, l&rsquo;application sera accessible.<\/p>\n<p>Avant de d\u00e9ployer votre code sur le fournisseur Git que vous avez choisi (<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> ou <a href=\"https:\/\/docs.sevalla.com\/applications\/git\/gitlab#authorize-the-kinsta-gitlab-application\">GitLab<\/a>), n&rsquo;oubliez pas de modifier l&rsquo;URL de requ\u00eate HTTP dans votre fichier <strong>App.jsx<\/strong>. Remplacez <code>http:\/\/localhost:8080\/api<\/code> par <code>\/api<\/code>, car l&rsquo;URL sera pr\u00e9c\u00e9d\u00e9e d&rsquo;un ast\u00e9risque.<\/p>\n<p>Enfin, dans votre fichier <strong>package.json<\/strong>, ajoutez une commande de script pour le serveur Node.js qui sera utilis\u00e9 pour le d\u00e9ploiement :<\/p>\n<pre><code class=\"language-bash\">\"scripts\": {\n  \/\/ \u2026\n  \"start\": \"node server.js\",\n},<\/code><\/pre>\n<p>Ensuite, poussez votre code vers votre fournisseur Git pr\u00e9f\u00e9r\u00e9 et d\u00e9ployez votre d\u00e9p\u00f4t sur Kinsta en suivant les \u00e9tapes suivantes :<\/p>\n<ol start=\"1\">\n<li>Connectez-vous \u00e0 votre compte Kinsta sur le tableau de bord <a href=\"https:\/\/my.kinsta.com\/?lang=fr\">MyKinsta<\/a>.<\/li>\n<li>S\u00e9lectionnez <strong>Application<\/strong> dans la colonne lat\u00e9rale de gauche et cliquez sur le bouton <strong>Ajouter une application<\/strong>.<\/li>\n<li>Dans la fen\u00eatre modale qui s&rsquo;affiche, choisissez le d\u00e9p\u00f4t que vous souhaitez d\u00e9ployer. Si vous avez plusieurs branches, vous pouvez s\u00e9lectionner la branche souhait\u00e9e et donner un nom \u00e0 votre application.<\/li>\n<li>S\u00e9lectionnez l&rsquo;un des emplacements de centre de donn\u00e9es disponibles.<\/li>\n<li>Ajoutez le site <code>OPENAI_API_KEY<\/code> comme variable d&rsquo;environnement. Kinsta configurera automatiquement un fichier Docker pour vous.<\/li>\n<li>Enfin, dans le champ de commande de d\u00e9marrage, ajoutez <code>npm run build && npm run start<\/code>. Kinsta installera les d\u00e9pendances de votre application \u00e0 partir de <strong>package.json<\/strong>, puis construira et d\u00e9ploiera votre application.<\/li>\n<\/ol>\n<h2>R\u00e9sum\u00e9<\/h2>\n<p>Dans ce guide, vous avez appris \u00e0 exploiter la puissance de l&rsquo;API DALL-E d&rsquo;OpenAI pour la g\u00e9n\u00e9ration d&rsquo;images. Vous avez \u00e9galement appris \u00e0 travailler avec React et Node.js pour construire une application full-stack de base.<\/p>\n<p>Les possibilit\u00e9s sont infinies avec l&rsquo;IA, car de nouveaux mod\u00e8les sont introduits quotidiennement, et vous pouvez cr\u00e9er des projets \u00e9tonnants qui peuvent \u00eatre d\u00e9ploy\u00e9s sur l <a href=\"https:\/\/sevalla.com\/application-hosting\/\">&lsquo;h\u00e9bergement d&rsquo;applications de Kinsta<\/a>.<\/p>\n<p><em>Quel mod\u00e8le aimeriez-vous explorer et sur quel projet aimeriez-vous que nous \u00e9crivions ? Partagez-les dans les commentaires ci-dessous.<\/em><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Dans le paysage dynamique de la technologie, o\u00f9 l&rsquo;innovation repousse sans cesse les limites du possible, l&rsquo;intelligence artificielle (IA) ne cesse de captiver notre imagination. L&rsquo;IA &#8230;<\/p>\n","protected":false},"author":287,"featured_media":73435,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_kinsta_gated_content":false,"_kinsta_gated_content_redirect":"","footnotes":""},"tags":[],"topic":[994,1004],"class_list":["post-73434","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>G\u00e9n\u00e9ration d&#039;images propuls\u00e9e par l&#039;IA React \u00e0 l&#039;aide de l&#039;API OpenAI DALL-E - Kinsta\u00ae<\/title>\n<meta name=\"description\" content=\"Apprenez pas \u00e0 pas \u00e0 exploiter la puissance de l&#039;intelligence artificielle pour g\u00e9n\u00e9rer des images \u00e9poustouflantes dans ce guide complet.\" \/>\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\/fr\/blog\/generateur-image-ia\/\" \/>\n<meta property=\"og:locale\" content=\"fr_FR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Cr\u00e9ez une application React pour la g\u00e9n\u00e9ration d&#039;images par l&#039;IA en utilisant l&#039;API DALL-E d&#039;OpenAI\" \/>\n<meta property=\"og:description\" content=\"Apprenez pas \u00e0 pas \u00e0 exploiter la puissance de l&#039;intelligence artificielle pour g\u00e9n\u00e9rer des images \u00e9poustouflantes dans ce guide complet.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/kinsta.com\/fr\/blog\/generateur-image-ia\/\" \/>\n<meta property=\"og:site_name\" content=\"Kinsta\u00ae\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/kinstafrance\/\" \/>\n<meta property=\"article:published_time\" content=\"2023-10-02T12:12:23+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-10-04T06:18:27+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/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=\"Apprenez pas \u00e0 pas \u00e0 exploiter la puissance de l&#039;intelligence artificielle pour g\u00e9n\u00e9rer des images \u00e9poustouflantes dans ce guide complet.\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/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_fr\" \/>\n<meta name=\"twitter:label1\" content=\"\u00c9crit par\" \/>\n\t<meta name=\"twitter:data1\" content=\"Joel Olawanle\" \/>\n\t<meta name=\"twitter:label2\" content=\"Dur\u00e9e de lecture estim\u00e9e\" \/>\n\t<meta name=\"twitter:data2\" content=\"13 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/kinsta.com\/fr\/blog\/generateur-image-ia\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/fr\/blog\/generateur-image-ia\/\"},\"author\":{\"name\":\"Joel Olawanle\",\"@id\":\"https:\/\/kinsta.com\/fr\/#\/schema\/person\/efa7de30245ca15be5ce1dcacff89c07\"},\"headline\":\"Cr\u00e9ez une application React pour la g\u00e9n\u00e9ration d&rsquo;images par l&rsquo;IA en utilisant l&rsquo;API DALL-E d&rsquo;OpenAI\",\"datePublished\":\"2023-10-02T12:12:23+00:00\",\"dateModified\":\"2023-10-04T06:18:27+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/kinsta.com\/fr\/blog\/generateur-image-ia\/\"},\"wordCount\":2618,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/fr\/#organization\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/fr\/blog\/generateur-image-ia\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2023\/10\/ai-powered-image-generator-app-with-react-dall-e-1.jpg\",\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/kinsta.com\/fr\/blog\/generateur-image-ia\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/kinsta.com\/fr\/blog\/generateur-image-ia\/\",\"url\":\"https:\/\/kinsta.com\/fr\/blog\/generateur-image-ia\/\",\"name\":\"G\u00e9n\u00e9ration d'images propuls\u00e9e par l'IA React \u00e0 l'aide de l'API OpenAI DALL-E - Kinsta\u00ae\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/fr\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/kinsta.com\/fr\/blog\/generateur-image-ia\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/fr\/blog\/generateur-image-ia\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2023\/10\/ai-powered-image-generator-app-with-react-dall-e-1.jpg\",\"datePublished\":\"2023-10-02T12:12:23+00:00\",\"dateModified\":\"2023-10-04T06:18:27+00:00\",\"description\":\"Apprenez pas \u00e0 pas \u00e0 exploiter la puissance de l'intelligence artificielle pour g\u00e9n\u00e9rer des images \u00e9poustouflantes dans ce guide complet.\",\"breadcrumb\":{\"@id\":\"https:\/\/kinsta.com\/fr\/blog\/generateur-image-ia\/#breadcrumb\"},\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/kinsta.com\/fr\/blog\/generateur-image-ia\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\/\/kinsta.com\/fr\/blog\/generateur-image-ia\/#primaryimage\",\"url\":\"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2023\/10\/ai-powered-image-generator-app-with-react-dall-e-1.jpg\",\"contentUrl\":\"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2023\/10\/ai-powered-image-generator-app-with-react-dall-e-1.jpg\",\"width\":1460,\"height\":730},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/kinsta.com\/fr\/blog\/generateur-image-ia\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/kinsta.com\/fr\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"React\",\"item\":\"https:\/\/kinsta.com\/fr\/sujets\/react\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Cr\u00e9ez une application React pour la g\u00e9n\u00e9ration d&rsquo;images par l&rsquo;IA en utilisant l&rsquo;API DALL-E d&rsquo;OpenAI\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/kinsta.com\/fr\/#website\",\"url\":\"https:\/\/kinsta.com\/fr\/\",\"name\":\"Kinsta\u00ae\",\"description\":\"Solutions d&#039;h\u00e9bergement premium, rapides et s\u00e9curis\u00e9es\",\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/fr\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/kinsta.com\/fr\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"fr-FR\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/kinsta.com\/fr\/#organization\",\"name\":\"Kinsta\",\"url\":\"https:\/\/kinsta.com\/fr\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\/\/kinsta.com\/fr\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2023\/12\/kinsta-logo.jpeg\",\"contentUrl\":\"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2023\/12\/kinsta-logo.jpeg\",\"width\":500,\"height\":500,\"caption\":\"Kinsta\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/fr\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/kinstafrance\/\",\"https:\/\/x.com\/kinsta_fr\",\"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\/fr\/#\/schema\/person\/efa7de30245ca15be5ce1dcacff89c07\",\"name\":\"Joel Olawanle\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\/\/kinsta.com\/fr\/#\/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\/fr\/blog\/author\/joelolawanle\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"G\u00e9n\u00e9ration d'images propuls\u00e9e par l'IA React \u00e0 l'aide de l'API OpenAI DALL-E - Kinsta\u00ae","description":"Apprenez pas \u00e0 pas \u00e0 exploiter la puissance de l'intelligence artificielle pour g\u00e9n\u00e9rer des images \u00e9poustouflantes dans ce guide complet.","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\/fr\/blog\/generateur-image-ia\/","og_locale":"fr_FR","og_type":"article","og_title":"Cr\u00e9ez une application React pour la g\u00e9n\u00e9ration d'images par l'IA en utilisant l'API DALL-E d'OpenAI","og_description":"Apprenez pas \u00e0 pas \u00e0 exploiter la puissance de l'intelligence artificielle pour g\u00e9n\u00e9rer des images \u00e9poustouflantes dans ce guide complet.","og_url":"https:\/\/kinsta.com\/fr\/blog\/generateur-image-ia\/","og_site_name":"Kinsta\u00ae","article_publisher":"https:\/\/www.facebook.com\/kinstafrance\/","article_published_time":"2023-10-02T12:12:23+00:00","article_modified_time":"2023-10-04T06:18:27+00:00","og_image":[{"width":1460,"height":730,"url":"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/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":"Apprenez pas \u00e0 pas \u00e0 exploiter la puissance de l'intelligence artificielle pour g\u00e9n\u00e9rer des images \u00e9poustouflantes dans ce guide complet.","twitter_image":"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2023\/10\/ai-powered-image-generator-app-with-react-dall-e-1.jpg","twitter_creator":"@olawanle_joel","twitter_site":"@kinsta_fr","twitter_misc":{"\u00c9crit par":"Joel Olawanle","Dur\u00e9e de lecture estim\u00e9e":"13 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/kinsta.com\/fr\/blog\/generateur-image-ia\/#article","isPartOf":{"@id":"https:\/\/kinsta.com\/fr\/blog\/generateur-image-ia\/"},"author":{"name":"Joel Olawanle","@id":"https:\/\/kinsta.com\/fr\/#\/schema\/person\/efa7de30245ca15be5ce1dcacff89c07"},"headline":"Cr\u00e9ez une application React pour la g\u00e9n\u00e9ration d&rsquo;images par l&rsquo;IA en utilisant l&rsquo;API DALL-E d&rsquo;OpenAI","datePublished":"2023-10-02T12:12:23+00:00","dateModified":"2023-10-04T06:18:27+00:00","mainEntityOfPage":{"@id":"https:\/\/kinsta.com\/fr\/blog\/generateur-image-ia\/"},"wordCount":2618,"commentCount":0,"publisher":{"@id":"https:\/\/kinsta.com\/fr\/#organization"},"image":{"@id":"https:\/\/kinsta.com\/fr\/blog\/generateur-image-ia\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2023\/10\/ai-powered-image-generator-app-with-react-dall-e-1.jpg","inLanguage":"fr-FR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/kinsta.com\/fr\/blog\/generateur-image-ia\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/kinsta.com\/fr\/blog\/generateur-image-ia\/","url":"https:\/\/kinsta.com\/fr\/blog\/generateur-image-ia\/","name":"G\u00e9n\u00e9ration d'images propuls\u00e9e par l'IA React \u00e0 l'aide de l'API OpenAI DALL-E - Kinsta\u00ae","isPartOf":{"@id":"https:\/\/kinsta.com\/fr\/#website"},"primaryImageOfPage":{"@id":"https:\/\/kinsta.com\/fr\/blog\/generateur-image-ia\/#primaryimage"},"image":{"@id":"https:\/\/kinsta.com\/fr\/blog\/generateur-image-ia\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2023\/10\/ai-powered-image-generator-app-with-react-dall-e-1.jpg","datePublished":"2023-10-02T12:12:23+00:00","dateModified":"2023-10-04T06:18:27+00:00","description":"Apprenez pas \u00e0 pas \u00e0 exploiter la puissance de l'intelligence artificielle pour g\u00e9n\u00e9rer des images \u00e9poustouflantes dans ce guide complet.","breadcrumb":{"@id":"https:\/\/kinsta.com\/fr\/blog\/generateur-image-ia\/#breadcrumb"},"inLanguage":"fr-FR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/kinsta.com\/fr\/blog\/generateur-image-ia\/"]}]},{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/kinsta.com\/fr\/blog\/generateur-image-ia\/#primaryimage","url":"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2023\/10\/ai-powered-image-generator-app-with-react-dall-e-1.jpg","contentUrl":"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2023\/10\/ai-powered-image-generator-app-with-react-dall-e-1.jpg","width":1460,"height":730},{"@type":"BreadcrumbList","@id":"https:\/\/kinsta.com\/fr\/blog\/generateur-image-ia\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/kinsta.com\/fr\/"},{"@type":"ListItem","position":2,"name":"React","item":"https:\/\/kinsta.com\/fr\/sujets\/react\/"},{"@type":"ListItem","position":3,"name":"Cr\u00e9ez une application React pour la g\u00e9n\u00e9ration d&rsquo;images par l&rsquo;IA en utilisant l&rsquo;API DALL-E d&rsquo;OpenAI"}]},{"@type":"WebSite","@id":"https:\/\/kinsta.com\/fr\/#website","url":"https:\/\/kinsta.com\/fr\/","name":"Kinsta\u00ae","description":"Solutions d&#039;h\u00e9bergement premium, rapides et s\u00e9curis\u00e9es","publisher":{"@id":"https:\/\/kinsta.com\/fr\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/kinsta.com\/fr\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"fr-FR"},{"@type":"Organization","@id":"https:\/\/kinsta.com\/fr\/#organization","name":"Kinsta","url":"https:\/\/kinsta.com\/fr\/","logo":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/kinsta.com\/fr\/#\/schema\/logo\/image\/","url":"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2023\/12\/kinsta-logo.jpeg","contentUrl":"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2023\/12\/kinsta-logo.jpeg","width":500,"height":500,"caption":"Kinsta"},"image":{"@id":"https:\/\/kinsta.com\/fr\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/kinstafrance\/","https:\/\/x.com\/kinsta_fr","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\/fr\/#\/schema\/person\/efa7de30245ca15be5ce1dcacff89c07","name":"Joel Olawanle","image":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/kinsta.com\/fr\/#\/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\/fr\/blog\/author\/joelolawanle\/"}]}},"acf":[],"_links":{"self":[{"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/posts\/73434","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/users\/287"}],"replies":[{"embeddable":true,"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/comments?post=73434"}],"version-history":[{"count":6,"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/posts\/73434\/revisions"}],"predecessor-version":[{"id":73467,"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/posts\/73434\/revisions\/73467"}],"alternate":[{"embeddable":true,"hreflang":"en","title":"English","href":"https:\/\/kinsta.com\/fr\/wp-json\/kinsta\/v1\/posts\/73434\/translations\/en"},{"embeddable":true,"hreflang":"pt","title":"Portuguese","href":"https:\/\/kinsta.com\/fr\/wp-json\/kinsta\/v1\/posts\/73434\/translations\/pt"},{"embeddable":true,"hreflang":"fr","title":"French","href":"https:\/\/kinsta.com\/fr\/wp-json\/kinsta\/v1\/posts\/73434\/translations\/fr"},{"embeddable":true,"hreflang":"de","title":"German","href":"https:\/\/kinsta.com\/fr\/wp-json\/kinsta\/v1\/posts\/73434\/translations\/de"},{"embeddable":true,"hreflang":"ja","title":"Japanese","href":"https:\/\/kinsta.com\/fr\/wp-json\/kinsta\/v1\/posts\/73434\/translations\/jp"},{"embeddable":true,"hreflang":"es","title":"Spanish","href":"https:\/\/kinsta.com\/fr\/wp-json\/kinsta\/v1\/posts\/73434\/translations\/es"},{"embeddable":true,"hreflang":"it","title":"Italian","href":"https:\/\/kinsta.com\/fr\/wp-json\/kinsta\/v1\/posts\/73434\/translations\/it"},{"href":"https:\/\/kinsta.com\/fr\/wp-json\/kinsta\/v1\/posts\/73434\/tree"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/media\/73435"}],"wp:attachment":[{"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/media?parent=73434"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/tags?post=73434"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/topic?post=73434"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}