{"id":63705,"date":"2023-10-02T09:14:50","date_gmt":"2023-10-02T12:14:50","guid":{"rendered":"https:\/\/kinqsta.com\/pt\/?p=63705&#038;preview=true&#038;preview_id=63705"},"modified":"2023-10-06T02:56:04","modified_gmt":"2023-10-06T05:56:04","slug":"gerador-imagem-ia","status":"publish","type":"post","link":"https:\/\/kinqsta.com\/pt\/blog\/gerador-imagem-ia\/","title":{"rendered":"Crie um Aplicativo React Gerador de Imagens IA Usando a API DALL-E da OpenAI"},"content":{"rendered":"<p>No cen\u00e1rio din\u00e2mico da tecnologia, em que a inova\u00e7\u00e3o molda continuamente os limites do que \u00e9 poss\u00edvel, a intelig\u00eancia artificial (IA) nunca deixa de cativar nossa imagina\u00e7\u00e3o.<\/p>\n<p>IA se refere \u00e0 simula\u00e7\u00e3o de processos de intelig\u00eancia humana em sistemas de computador. Esses processos incluem tarefas como aprendizado, racioc\u00ednio, solu\u00e7\u00e3o de problemas, percep\u00e7\u00e3o, <a href=\"https:\/\/kinqsta.com\/pt\/blog\/deteccao-de-conteudo-ia\/\">compreens\u00e3o de linguagem<\/a> e tomada de decis\u00e3o.<\/p>\n<p>Atualmente, indiv\u00edduos e empresas desenvolveram e treinaram v\u00e1rios modelos de IA para executar determinadas tarefas melhor do que os humanos em tempo real. Entre os in\u00fameros aplicativos de IA, uma \u00e1rea particularmente intrigante \u00e9 a gera\u00e7\u00e3o de imagens.<\/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>O que voc\u00ea est\u00e1 construindo<\/h2>\n<p>Este guia explica como criar um aplicativo React que se integra perfeitamente \u00e0 API <a href=\"https:\/\/labs.openai.com\/\" target=\"_blank\" rel=\"noopener noreferrer\">OpenAI DALL-E<\/a> por meio de um backend <a href=\"https:\/\/kinqsta.com\/pt\/blog\/o-que-e-node-js\/\">Node.js<\/a> e gera imagens cativantes com base em solicita\u00e7\u00f5es textuais.<\/p>\n<figure style=\"width: 1600px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinqsta.com\/wp-content\/uploads\/2023\/09\/ai-image-generator-demo.gif\" alt=\"Gerador de imagens IA em a\u00e7\u00e3o, produzindo imagens v\u00edvidas e criativas usando a API DALL-E.\" width=\"1600\" height=\"877\"><figcaption class=\"wp-caption-text\">Gerador de imagens IA em a\u00e7\u00e3o, produzindo imagens v\u00edvidas e criativas usando a API DALL-E.<\/figcaption><\/figure>\n<h3>Pr\u00e9-requisitos<\/h3>\n<p>Para acompanhar este projeto, voc\u00ea deve ter:<\/p>\n<ul>\n<li>Conhecimento fundamental de <a href=\"https:\/\/kinqsta.com\/pt\/blog\/o-que-e-html\/\">HTML<\/a>, <a href=\"https:\/\/kinqsta.com\/pt\/blog\/melhores-praticas-css\/\">CSS<\/a> e <a href=\"https:\/\/kinqsta.com\/pt\/javascript\/\">JavaScript<\/a><\/li>\n<li>Conhecimento b\u00e1sico de <a href=\"https:\/\/kinqsta.com\/pt\/blog\/o-que-e-react-js\/\">React<\/a> e <a href=\"https:\/\/kinqsta.com\/pt\/blog\/deno-vs-node-js\/\">Node.js<\/a><\/li>\n<li>Node.js e npm (<a href=\"https:\/\/kinqsta.com\/pt\/blog\/npm-gerenciador-pacotes-node\/\">Gerenciador de Pacotes do Node<\/a>) ou yarn instalados em seu computador<\/li>\n<\/ul>\n<h2>O que \u00e9 API OpenAI DALL-E?<\/h2>\n<p>A API da OpenAI \u00e9 uma plataforma baseada em nuvem que concede aos <a href=\"https:\/\/kinqsta.com\/pt\/blog\/tipos-de-desenvolvedores\/\">desenvolvedores<\/a> acesso aos modelos de IA pr\u00e9-treinados da OpenAI, como o DALL-E e o GPT-3 (usamos esse modelo para <a href=\"https:\/\/kinqsta.com\/pt\/blog\/aplicativo-clone-chatgpt-react-e-api-openai\/\">criar um clone do ChatGPT<\/a> com o c\u00f3digo <a href=\"https:\/\/github.com\/kinsta\/chatgpt-clone\" target=\"_blank\" rel=\"noopener noreferrer\">neste reposit\u00f3rio Git<\/a>). Ele permite que os desenvolvedores adicionem recursos de IA, como resumo, tradu\u00e7\u00e3o, gera\u00e7\u00e3o de imagens e modifica\u00e7\u00e3o em seus programas sem precisar desenvolver e treinar seus pr\u00f3prios modelos.<\/p>\n<p>Para usar a API da OpenAI, crie uma conta usando sua conta do Google ou e-mail no <a href=\"https:\/\/platform.openai.com\/\" target=\"_blank\" rel=\"noopener noreferrer\">site da OpenAI<\/a> e obtenha uma chave de API. Para gerar uma chave de API, clique em <strong>Personal <\/strong>(Pessoal)\u00a0no canto superior direito do site e selecione <strong>View API keys <\/strong>(Exibir chaves de API).<\/p>\n<figure style=\"width: 1600px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinqsta.com\/wp-content\/uploads\/2023\/09\/create-openai-api-secret-key.jpg\" alt=\"O processo de build de uma chave secreta da API da OpenAI.\" width=\"1600\" height=\"877\"><figcaption class=\"wp-caption-text\">O processo de build de uma chave secreta da API da OpenAI.<\/figcaption><\/figure>\n<p>Clique no bot\u00e3o <strong>Create new secret key <\/strong>(Criar nova chave secreta) e <a href=\"https:\/\/kinqsta.com\/pt\/blog\/gerenciadores-de-senhas\/\">salve a chave<\/a> em algum lugar. Voc\u00ea a usar\u00e1 neste aplicativo para interagir com a API DALL-E da OpenAI.<\/p>\n<h2>Configurando o ambiente de desenvolvimento<\/h2>\n<p>Voc\u00ea pode criar um aplicativo React do zero e desenvolver sua pr\u00f3pria interface, ou pode pegar nosso template inicial do <a href=\"https:\/\/kinqsta.com\/pt\/topicos\/git\/\">Git<\/a> seguindo estas etapas:<\/p>\n<ol>\n<li>Visite o <a href=\"https:\/\/github.com\/kinsta\/ai-img-generator\" target=\"_blank\" rel=\"noopener noreferrer\">reposit\u00f3rio do GitHub<\/a> deste projeto.<\/li>\n<li>Selecione <strong>Use this template<\/strong>\u00a0&gt;\u00a0<strong>Create a new repository <\/strong>para copiar o c\u00f3digo inicial em um reposit\u00f3rio dentro da sua conta GitHub. Marque a caixa para incluir todas as branches (<strong>include all branches<\/strong>).<\/li>\n<li>Puxe o reposit\u00f3rio para o seu computador local e mude para o branch <a href=\"https:\/\/github.com\/kinsta\/ai-img-generator\/tree\/starter-files\" target=\"_blank\" rel=\"noopener noreferrer\">starter-files<\/a> usando o comando: <code>git checkout starter-files<\/code>.<\/li>\n<li>Instale as depend\u00eancias necess\u00e1rias executando o comando <code>npm install<\/code>.<\/li>\n<\/ol>\n<p>Ap\u00f3s a conclus\u00e3o da instala\u00e7\u00e3o, voc\u00ea pode iniciar o projeto em seu computador local com <code>npm run start<\/code>. Isso torna o projeto dispon\u00edvel em <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:\/\/kinqsta.com\/wp-content\/uploads\/2023\/09\/ai-image-generator-ui.jpg\" alt=\"Interface de usu\u00e1rio de um aplicativo gerador de imagens IA que mostra o poder da intelig\u00eancia artificial na cria\u00e7\u00e3o de imagens.\" width=\"1600\" height=\"877\"><figcaption class=\"wp-caption-text\">Interface de usu\u00e1rio de um aplicativo gerador de imagens IA que mostra o poder da intelig\u00eancia artificial na cria\u00e7\u00e3o de imagens.<\/figcaption><\/figure>\n<h3>Entendendo os arquivos de projeto<\/h3>\n<p>Neste projeto, adicionamos todas as depend\u00eancias necess\u00e1rias para o seu aplicativo React. Aqui est\u00e1 uma vis\u00e3o geral do que foi instalado:<\/p>\n<ul>\n<li><a href=\"https:\/\/www.npmjs.com\/package\/file-server\" target=\"_blank\" rel=\"noopener noreferrer\">file-server<\/a>: Essa biblioteca utilit\u00e1ria simplifica o processo de download das imagens geradas. Est\u00e1 vinculada ao bot\u00e3o de download, garantindo uma experi\u00eancia de usu\u00e1rio tranquila.<\/li>\n<li><a href=\"https:\/\/www.npmjs.com\/package\/uuid\" target=\"_blank\" rel=\"noopener noreferrer\">uuid<\/a>: Essa biblioteca atribui uma identifica\u00e7\u00e3o exclusiva a cada imagem. Isso evita qualquer possibilidade de as imagens compartilharem o mesmo nome de arquivo padr\u00e3o, mantendo a ordem e a clareza.<\/li>\n<li><a href=\"https:\/\/www.npmjs.com\/package\/react-icons\" target=\"_blank\" rel=\"noopener noreferrer\">react-icons<\/a>: Integrada ao projeto, essa biblioteca incorpora \u00edcones sem esfor\u00e7o, aprimorando o apelo visual do seu aplicativo.<\/li>\n<\/ul>\n<p>No centro do seu aplicativo React est\u00e1 a pasta <strong>src<\/strong>. \u00c9 nela que o c\u00f3digo JavaScript essencial para o Webpack est\u00e1 hospedado. Vamos entender os arquivos e as pastas dentro da pasta <strong>src<\/strong>:<\/p>\n<ul>\n<li><strong>assets:<\/strong> Nesse diret\u00f3rio, voc\u00ea encontrar\u00e1 as imagens e o gif do carregador utilizados em todo o projeto.<\/li>\n<li><strong>data:<\/strong> Essa pasta cont\u00e9m um arquivo <strong>index.js<\/strong> que exporta um array de 30 prompts. Esses prompts podem ser usados para gerar imagens diversas e aleat\u00f3rias. Voc\u00ea pode edit\u00e1-lo \u00e0 vontade.<\/li>\n<li><strong>index.css:<\/strong> \u00c9 onde est\u00e3o armazenados os estilos usados neste projeto.<\/li>\n<\/ul>\n<h4>Entendendo a pasta Utils<\/h4>\n<p>Dentro dessa pasta, o arquivo <strong>index.js<\/strong> define duas fun\u00e7\u00f5es reutiliz\u00e1veis. A primeira fun\u00e7\u00e3o randomiza a sele\u00e7\u00e3o de prompts que descrevem v\u00e1rias imagens que podem ser geradas.<\/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>A segunda fun\u00e7\u00e3o lida com o download das imagens geradas, aproveitando a depend\u00eancia <strong>file-saver <\/strong>(salvador de arquivos). Ambas as fun\u00e7\u00f5es foram criadas para oferecer modularidade e efici\u00eancia, e podem ser convenientemente importadas para os componentes quando necess\u00e1rio.<\/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>No c\u00f3digo acima, a depend\u00eancia <strong>uuid<\/strong> d\u00e1 a cada arquivo de imagem gerado um ID exclusivo, para que eles n\u00e3o tenham o mesmo nome de arquivo.<\/p>\n<h4>Entendendo os componentes<\/h4>\n<p>Esses s\u00e3o pequenos blocos de c\u00f3digo separados para facilitar a manuten\u00e7\u00e3o e a compreens\u00e3o do c\u00f3digo. Para este projeto, foram criados tr\u00eas componentes: <strong>Header.jsx<\/strong>, <strong>Footer.jsx<\/strong> e <strong>Form.jsx<\/strong>. O componente principal \u00e9 o componente Form, no qual a entrada \u00e9 recebida e passada para o arquivo <strong>App.jsx<\/strong> com a fun\u00e7\u00e3o <code>generateImage<\/code> adicionada como um evento <code>onClick<\/code> ao bot\u00e3o <strong>Generate Image<\/strong>.<\/p>\n<p>No componente Form, \u00e9 criado um estado para armazenar e atualizar o prompt. Al\u00e9m disso, um recurso permite que voc\u00ea clique em um \u00edcone aleat\u00f3rio para gerar os prompts aleat\u00f3rios. Isso \u00e9 poss\u00edvel com a fun\u00e7\u00e3o <code>handleRandomPrompt<\/code>, que usa a fun\u00e7\u00e3o <code>getRandomPrompt<\/code> que voc\u00ea j\u00e1 configurou. Quando voc\u00ea clica no \u00edcone, ela obt\u00e9m um prompt aleat\u00f3rio e atualiza o estado com ele:<\/p>\n<pre><code class=\"language-jsx\">const handleRandomPrompt = () =&gt; {\n    const randomPrompt = getRandomPrompt();\n    setPrompt(randomPrompt)\n}<\/code><\/pre>\n<h4>Entendendo o arquivo App.jsx<\/h4>\n<p>\u00c9 aqui que reside a maior parte do c\u00f3digo. Todos os componentes s\u00e3o reunidos aqui. H\u00e1 tamb\u00e9m uma \u00e1rea designada para exibir a imagem gerada. Se nenhuma imagem tiver sido gerada ainda, ser\u00e1 exibida uma imagem de espa\u00e7o reservado (Preview image).<\/p>\n<p>Dentro desse arquivo, dois estados s\u00e3o gerenciados:<\/p>\n<ul>\n<li><code>isGenerating<\/code>: Mant\u00e9m o controle sobre se uma imagem est\u00e1 sendo gerada no momento. Por padr\u00e3o, ele \u00e9 definido como falso.<\/li>\n<li><code>generatedImage<\/code>: Esse estado armazena informa\u00e7\u00f5es sobre a imagem que foi gerada.<\/li>\n<\/ul>\n<p>Al\u00e9m disso, a fun\u00e7\u00e3o do utilit\u00e1rio <code>downloadImage<\/code> \u00e9 importada, permitindo que voc\u00ea acione o download da imagem gerada quando clicar no bot\u00e3o <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>Agora que voc\u00ea entendeu os arquivos iniciais e configurou o projeto, vamos come\u00e7ar a lidar com a l\u00f3gica desse aplicativo.<\/p>\n<h2>Gera\u00e7\u00e3o de imagens com a API DALL-E da OpenAI<\/h2>\n<p>Para aproveitar os recursos da API DALL-E da OpenAI, voc\u00ea usar\u00e1 o Node.js para estabelecer um servidor. Voc\u00ea criar\u00e1 uma rota POST dentro desse servidor. Essa rota ser\u00e1 respons\u00e1vel por receber o texto do prompt enviado pelo seu aplicativo React e, em seguida, utiliz\u00e1-lo para gerar uma imagem.<\/p>\n<p>Para come\u00e7ar, instale as depend\u00eancias necess\u00e1rias no diret\u00f3rio do seu projeto executando o seguinte comando:<\/p>\n<pre><code class=\"language-bash\">npm i express cors openai<\/code><\/pre>\n<p>Al\u00e9m disso, instale as seguintes depend\u00eancias como depend\u00eancias de desenvolvimento. Essas ferramentas ajudar\u00e3o voc\u00ea a configurar seu servidor <a href=\"https:\/\/kinqsta.com\/pt\/blog\/criar-slackbot-gerenciamento-sites\/\">Node.js<\/a>:<\/p>\n<pre><code class=\"language-bash\">npm i -D dotenv nodemon<\/code><\/pre>\n<p>As depend\u00eancias instaladas s\u00e3o explicadas a seguir:<\/p>\n<ul>\n<li><a href=\"https:\/\/www.npmjs.com\/package\/express\" target=\"_blank\" rel=\"noopener noreferrer\">express<\/a>: Essa biblioteca ajuda a criar um servidor no Node.js.<\/li>\n<li><a href=\"https:\/\/www.npmjs.com\/package\/cors\" target=\"_blank\" rel=\"noopener noreferrer\">cors<\/a>: O CORS facilita a comunica\u00e7\u00e3o segura entre dom\u00ednios diferentes.<\/li>\n<li><a href=\"https:\/\/www.npmjs.com\/package\/openai\" target=\"_blank\" rel=\"noopener noreferrer\">openai<\/a>: Essa depend\u00eancia concede a voc\u00ea acesso \u00e0 API DALL-E da OpenAI.<\/li>\n<li><a href=\"https:\/\/www.npmjs.com\/package\/dotenv\" target=\"_blank\" rel=\"noopener noreferrer\">dotenv<\/a>: O dotenv o ajuda a gerenciar vari\u00e1veis de ambiente.<\/li>\n<li><a href=\"https:\/\/www.npmjs.com\/package\/nodemon\" target=\"_blank\" rel=\"noopener noreferrer\">nodemon<\/a>: \u00c9 uma ferramenta de desenvolvimento que monitora as altera\u00e7\u00f5es em seus arquivos e reinicia automaticamente o servidor.<\/li>\n<\/ul>\n<p>Quando as instala\u00e7\u00f5es forem bem-sucedidas, crie um arquivo <strong>server.js<\/strong> na raiz do seu projeto. \u00c9 nele que todo o c\u00f3digo do servidor ser\u00e1 armazenado.<\/p>\n<p>No arquivo <strong>server.js<\/strong>, importe as <a href=\"https:\/\/kinqsta.com\/pt\/blog\/bibliotecas-node-js\/\">bibliotecas<\/a> que voc\u00ea acabou de instalar e as instancie:<\/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>No c\u00f3digo acima, voc\u00ea importa as bibliotecas necess\u00e1rias. Em seguida, estabelece uma inst\u00e2ncia do aplicativo Express usando <code>const app = express();<\/code>. Depois disso, habilite o CORS. Em seguida, o Express \u00e9 configurado para processar dados JSON de entrada, especificando um limite de tamanho de dados de <code>50mb<\/code>.<\/p>\n<p>Depois disso, uma inst\u00e2ncia da classe OpenAI \u00e9 criada utilizando sua chave de API OpenAI. Crie um arquivo <strong>.env<\/strong> na raiz do seu projeto e adicione sua chave de API usando a vari\u00e1vel <code>OPENAI_API_KEY<\/code>. Por fim, voc\u00ea define uma fun\u00e7\u00e3o ass\u00edncrona <code>startServer<\/code> e a chama para colocar o servidor em movimento.<\/p>\n<p>Agora voc\u00ea configurou o arquivo <strong>server.js<\/strong>. Vamos criar uma rota POST que voc\u00ea pode usar em seu aplicativo React para interagir com esse servidor:<\/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>Neste c\u00f3digo, a rota est\u00e1 definida como <code>\/api<\/code> e foi projetada para lidar com solicita\u00e7\u00f5es POST de entrada. Dentro da fun\u00e7\u00e3o de callback da rota, voc\u00ea recebe os dados enviados do seu aplicativo React usando <code>req.body<\/code> \u2014 especificamente o valor <code>prompt<\/code>.<\/p>\n<p>Em seguida, o m\u00e9todo <code>images.generate<\/code> da biblioteca OpenAI \u00e9 chamado. Esse m\u00e9todo recebe o prompt fornecido e gera uma imagem em resposta. Par\u00e2metros como <code>n<\/code> determinam o n\u00famero de imagens a serem geradas (aqui, apenas uma), <code>size<\/code> especifica as dimens\u00f5es da imagem e <code>response_format<\/code> indica o formato no qual a resposta deve ser fornecida (<code>b64_json<\/code>, neste caso).<\/p>\n<p>Ap\u00f3s gerar a imagem, voc\u00ea extrai os dados da imagem da resposta e os armazena na vari\u00e1vel <code>image<\/code>. Em seguida, voc\u00ea envia uma resposta JSON de volta ao aplicativo React com os dados da imagem gerada, definindo o status HTTP como <code>200<\/code> (indicando sucesso) usando <code>res.status(200).json({ photo: image })<\/code>.<\/p>\n<p>Em caso de erros durante esse processo, o c\u00f3digo no bloco <code>catch<\/code> \u00e9 executado, registrando o erro no console para depura\u00e7\u00e3o.<\/p>\n<p>Agora o servidor est\u00e1 pronto! Vamos especificar o comando que ser\u00e1 usado para executar nosso servidor no objeto <code>scripts<\/code> do arquivo package.json:<\/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>Agora, quando voc\u00ea executar <code>npm run dev:backend<\/code>, seu servidor ser\u00e1 iniciado em <a href=\"http:\/\/localhost:8080\/\" target=\"_blank\" rel=\"noopener noreferrer\">http:\/\/localhost:8080\/<\/a>, ao passo que, se voc\u00ea executar <code>npm run dev:frontend<\/code>, seu aplicativo React ser\u00e1 iniciado em http:\/\/localhost:3000\/. Certifique-se de que ambos estejam sendo executados em terminais diferentes.<\/p>\n<h2>Fazer solicita\u00e7\u00f5es HTTP do React para o servidor Node.js<\/h2>\n<p>No arquivo <strong>App.jsx<\/strong>, voc\u00ea criar\u00e1 uma fun\u00e7\u00e3o <code>generateImage<\/code> que \u00e9 acionada quando o bot\u00e3o <strong>Generate Image<\/strong> \u00e9 clicado no componente <strong>Form.jsx<\/strong>. Essa fun\u00e7\u00e3o aceita dois par\u00e2metros: <code>prompt<\/code> e <code>setPrompt<\/code> do componente <strong>Form.jsx<\/strong>.<\/p>\n<p>Na fun\u00e7\u00e3o <code>generateImage<\/code>, voc\u00ea far\u00e1 uma solicita\u00e7\u00e3o HTTP POST para o servidor 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>No c\u00f3digo acima, voc\u00ea verifica se o par\u00e2metro <code>prompt<\/code> tem um valor e, em seguida, define o estado <code>isGenerating<\/code> como <code>true<\/code>, pois a opera\u00e7\u00e3o est\u00e1 sendo iniciada. Isso far\u00e1 com que o loader seja exibido na tela porque, no arquivo <strong>App.jsx<\/strong>, temos este c\u00f3digo que controla a exibi\u00e7\u00e3o do loader:<\/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>Em seguida, use o m\u00e9todo <code>fetch()<\/code> para fazer uma solicita\u00e7\u00e3o POST ao servidor usando <a href=\"http:\/\/localhost:8080\/api\" target=\"_blank\" rel=\"noopener noreferrer\">http:\/\/localhost:8080\/api<\/a> \u2014 \u00e9 por isso que instalamos o CORS, pois estamos interagindo com uma API em outra URL. Usamos o prompt como o corpo da mensagem. Em seguida, extraia a resposta retornada do servidor Node.js e defina-a como o estado <code>generatedImage<\/code>.<\/p>\n<p>Quando o estado <code>generatedImage<\/code> tiver um valor, a imagem ser\u00e1 exibida:<\/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>\u00c9 assim que voc\u00ea ver\u00e1 o arquivo <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    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>Implantar seu aplicativo full-stack na Kinsta<\/h2>\n<p>At\u00e9 agora, voc\u00ea criou com sucesso um aplicativo React que interage com o Node.js, o que o torna um aplicativo full-stack. Agora vamos implantar esse aplicativo na Kinsta.<\/p>\n<p>Primeiro, configure o servidor para servir os arquivos est\u00e1ticos gerados durante o processo de build do aplicativo React. Para isso, voc\u00ea deve importar o m\u00f3dulo <code>path<\/code> e us\u00e1-lo para servir os arquivos est\u00e1ticos:<\/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 voc\u00ea executar o comando <code>npm run build && npm run dev:backend<\/code>, seu aplicativo React de full-stack ser\u00e1 carregado em http:\/\/localhost:8080\/. Isso ocorre porque o aplicativo React \u00e9 compilado em <a href=\"https:\/\/kinqsta.com\/pt\/docs\/visao-geral-do-seu-site\/\">arquivos est\u00e1ticos<\/a> dentro da pasta <strong>build<\/strong>. Esses arquivos s\u00e3o ent\u00e3o incorporados ao seu servidor Node.js como um diret\u00f3rio est\u00e1tico. Consequentemente, quando voc\u00ea executar o servidor Node, o aplicativo estar\u00e1 acess\u00edvel.<\/p>\n<p>Antes de implementar o c\u00f3digo no provedor Git que voc\u00ea escolheu (<a href=\"https:\/\/docs.sevalla.com\/applications\/git\/bitbucket#grant-access-to-the-kinsta-bitbucket-application\">Bitbucket<\/a>, <a href=\"https:\/\/kinqsta.com\/pt\/docs\/autorizando-kinsta-no-github\/\">GitHub<\/a> ou <a href=\"https:\/\/docs.sevalla.com\/applications\/git\/gitlab#authorize-the-kinsta-gitlab-application\">GitLab<\/a>), lembre-se de modificar a URL de solicita\u00e7\u00e3o HTTP no arquivo <strong>App.jsx<\/strong>. Altere <code>http:\/\/localhost:8080\/api<\/code> para <code>\/api<\/code>, pois a URL ser\u00e1 anexada.<\/p>\n<p>Por fim, no seu arquivo <strong>package.json<\/strong>, adicione um comando de script para o servidor Node.js que seria usado para a implanta\u00e7\u00e3o:<\/p>\n<pre><code class=\"language-bash\">\"scripts\": {\n  \/\/ \u2026\n  \"start\": \"node server.js\",\n},<\/code><\/pre>\n<p>Em seguida envie seu c\u00f3digo para o provedor Git de sua prefer\u00eancia e implantar seu reposit\u00f3rio na Kinsta seguindo estas etapas:<\/p>\n<ol start=\"1\">\n<li>Fa\u00e7a login em sua conta Kinsta no painel <a href=\"https:\/\/my.kinqsta.com\/?lang=pt\">MyKinsta<\/a>.<\/li>\n<li>Selecione <strong>Aplicativo<\/strong> na barra lateral esquerda e clique no bot\u00e3o <strong>Adicionar aplicativo<\/strong>.<\/li>\n<li>No modal que aparece, escolha o reposit\u00f3rio que voc\u00ea deseja implantar. Se voc\u00ea tiver v\u00e1rios branches, poder\u00e1 selecionar o branch desejado e dar um nome ao seu aplicativo.<\/li>\n<li>Selecione um dos locais de centros de dados dispon\u00edveis.<\/li>\n<li>Adicione o endere\u00e7o <code>OPENAI_API_KEY<\/code> como uma vari\u00e1vel de ambiente. A Kinsta configurar\u00e1 um Dockerfile automaticamente para voc\u00ea.<\/li>\n<li>Por fim, no campo de comando start, adicione <code>npm run build && npm run start<\/code>. A Kinsta instalar\u00e1 as depend\u00eancias do seu aplicativo a partir do <strong>package.json<\/strong> e, em seguida, criar\u00e1 e implantar\u00e1 seu aplicativo.<\/li>\n<\/ol>\n<h2>Resumo<\/h2>\n<p>Neste guia voc\u00ea aprendeu a aproveitar o poder da API DALL-E da OpenAI para gera\u00e7\u00e3o de imagens. Tamb\u00e9m aprendeu a trabalhar com React e Node.js para criar um aplicativo full-stack b\u00e1sico.<\/p>\n<p>As possibilidades s\u00e3o infinitas com a IA, pois novos modelos s\u00e3o introduzidos diariamente, e voc\u00ea pode criar projetos incr\u00edveis que podem ser implementados na <a href=\"https:\/\/sevalla.com\/application-hosting\/\">hospedagem de aplicativos da Kinsta<\/a>.<\/p>\n<p><em>Que modelo voc\u00ea gostaria de explorar e sobre qual projeto gostaria que escrev\u00eassemos a seguir? Compartilhe nos coment\u00e1rios abaixo.<\/em><\/p>\n","protected":false},"excerpt":{"rendered":"<p>No cen\u00e1rio din\u00e2mico da tecnologia, em que a inova\u00e7\u00e3o molda continuamente os limites do que \u00e9 poss\u00edvel, a intelig\u00eancia artificial (IA) nunca deixa de cativar nossa &#8230;<\/p>\n","protected":false},"author":287,"featured_media":63706,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_kinsta_gated_content":false,"_kinsta_gated_content_redirect":"","footnotes":""},"tags":[],"topic":[992,1002],"class_list":["post-63705","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>Aplicativo React de Gera\u00e7\u00e3o de Imagens IA Usando a API DALL-E da OpenAI - Kinsta\u00ae<\/title>\n<meta name=\"description\" content=\"Aprenda passo a passo como aproveitar o poder da intelig\u00eancia artificial para gerar imagens impressionantes neste guia abrangente.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/kinqsta.com\/pt\/blog\/gerador-imagem-ia\/\" \/>\n<meta property=\"og:locale\" content=\"pt_PT\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Crie um Aplicativo React Gerador de Imagens IA Usando a API DALL-E da OpenAI\" \/>\n<meta property=\"og:description\" content=\"Aprenda passo a passo como aproveitar o poder da intelig\u00eancia artificial para gerar imagens impressionantes neste guia abrangente.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/kinqsta.com\/pt\/blog\/gerador-imagem-ia\/\" \/>\n<meta property=\"og:site_name\" content=\"Kinsta\u00ae\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/kinstapt\/\" \/>\n<meta property=\"article:published_time\" content=\"2023-10-02T12:14:50+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-10-06T05:56:04+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/kinqsta.com\/pt\/wp-content\/uploads\/sites\/3\/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=\"Aprenda passo a passo como aproveitar o poder da intelig\u00eancia artificial para gerar imagens impressionantes neste guia abrangente.\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/kinqsta.com\/pt\/wp-content\/uploads\/sites\/3\/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_pt\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Joel Olawanle\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tempo estimado de leitura\" \/>\n\t<meta name=\"twitter:data2\" content=\"13 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/kinqsta.com\/pt\/blog\/gerador-imagem-ia\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/kinqsta.com\/pt\/blog\/gerador-imagem-ia\/\"},\"author\":{\"name\":\"Joel Olawanle\",\"@id\":\"https:\/\/kinqsta.com\/pt\/#\/schema\/person\/efa7de30245ca15be5ce1dcacff89c07\"},\"headline\":\"Crie um Aplicativo React Gerador de Imagens IA Usando a API DALL-E da OpenAI\",\"datePublished\":\"2023-10-02T12:14:50+00:00\",\"dateModified\":\"2023-10-06T05:56:04+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/kinqsta.com\/pt\/blog\/gerador-imagem-ia\/\"},\"wordCount\":2307,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/kinqsta.com\/pt\/#organization\"},\"image\":{\"@id\":\"https:\/\/kinqsta.com\/pt\/blog\/gerador-imagem-ia\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinqsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/10\/ai-powered-image-generator-app-with-react-dall-e-1.jpg\",\"inLanguage\":\"pt-PT\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/kinqsta.com\/pt\/blog\/gerador-imagem-ia\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/kinqsta.com\/pt\/blog\/gerador-imagem-ia\/\",\"url\":\"https:\/\/kinqsta.com\/pt\/blog\/gerador-imagem-ia\/\",\"name\":\"Aplicativo React de Gera\u00e7\u00e3o de Imagens IA Usando a API DALL-E da OpenAI - Kinsta\u00ae\",\"isPartOf\":{\"@id\":\"https:\/\/kinqsta.com\/pt\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/kinqsta.com\/pt\/blog\/gerador-imagem-ia\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/kinqsta.com\/pt\/blog\/gerador-imagem-ia\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinqsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/10\/ai-powered-image-generator-app-with-react-dall-e-1.jpg\",\"datePublished\":\"2023-10-02T12:14:50+00:00\",\"dateModified\":\"2023-10-06T05:56:04+00:00\",\"description\":\"Aprenda passo a passo como aproveitar o poder da intelig\u00eancia artificial para gerar imagens impressionantes neste guia abrangente.\",\"breadcrumb\":{\"@id\":\"https:\/\/kinqsta.com\/pt\/blog\/gerador-imagem-ia\/#breadcrumb\"},\"inLanguage\":\"pt-PT\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/kinqsta.com\/pt\/blog\/gerador-imagem-ia\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-PT\",\"@id\":\"https:\/\/kinqsta.com\/pt\/blog\/gerador-imagem-ia\/#primaryimage\",\"url\":\"https:\/\/kinqsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/10\/ai-powered-image-generator-app-with-react-dall-e-1.jpg\",\"contentUrl\":\"https:\/\/kinqsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/10\/ai-powered-image-generator-app-with-react-dall-e-1.jpg\",\"width\":1460,\"height\":730},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/kinqsta.com\/pt\/blog\/gerador-imagem-ia\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/kinqsta.com\/pt\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"React\",\"item\":\"https:\/\/kinqsta.com\/pt\/topicos\/react\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Crie um Aplicativo React Gerador de Imagens IA Usando a API DALL-E da OpenAI\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/kinqsta.com\/pt\/#website\",\"url\":\"https:\/\/kinqsta.com\/pt\/\",\"name\":\"Kinsta\u00ae\",\"description\":\"Solu\u00e7\u00f5es de hospedagem Premium, r\u00e1pida e segura\",\"publisher\":{\"@id\":\"https:\/\/kinqsta.com\/pt\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/kinqsta.com\/pt\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pt-PT\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/kinqsta.com\/pt\/#organization\",\"name\":\"Kinsta\",\"url\":\"https:\/\/kinqsta.com\/pt\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-PT\",\"@id\":\"https:\/\/kinqsta.com\/pt\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/kinqsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/12\/kinsta-logo.jpeg\",\"contentUrl\":\"https:\/\/kinqsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/12\/kinsta-logo.jpeg\",\"width\":500,\"height\":500,\"caption\":\"Kinsta\"},\"image\":{\"@id\":\"https:\/\/kinqsta.com\/pt\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/kinstapt\/\",\"https:\/\/x.com\/kinsta_pt\",\"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:\/\/kinqsta.com\/pt\/#\/schema\/person\/efa7de30245ca15be5ce1dcacff89c07\",\"name\":\"Joel Olawanle\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-PT\",\"@id\":\"https:\/\/kinqsta.com\/pt\/#\/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:\/\/kinqsta.com\/pt\/blog\/author\/joelolawanle\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Aplicativo React de Gera\u00e7\u00e3o de Imagens IA Usando a API DALL-E da OpenAI - Kinsta\u00ae","description":"Aprenda passo a passo como aproveitar o poder da intelig\u00eancia artificial para gerar imagens impressionantes neste guia abrangente.","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:\/\/kinqsta.com\/pt\/blog\/gerador-imagem-ia\/","og_locale":"pt_PT","og_type":"article","og_title":"Crie um Aplicativo React Gerador de Imagens IA Usando a API DALL-E da OpenAI","og_description":"Aprenda passo a passo como aproveitar o poder da intelig\u00eancia artificial para gerar imagens impressionantes neste guia abrangente.","og_url":"https:\/\/kinqsta.com\/pt\/blog\/gerador-imagem-ia\/","og_site_name":"Kinsta\u00ae","article_publisher":"https:\/\/www.facebook.com\/kinstapt\/","article_published_time":"2023-10-02T12:14:50+00:00","article_modified_time":"2023-10-06T05:56:04+00:00","og_image":[{"width":1460,"height":730,"url":"https:\/\/kinqsta.com\/pt\/wp-content\/uploads\/sites\/3\/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":"Aprenda passo a passo como aproveitar o poder da intelig\u00eancia artificial para gerar imagens impressionantes neste guia abrangente.","twitter_image":"https:\/\/kinqsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/10\/ai-powered-image-generator-app-with-react-dall-e-1.jpg","twitter_creator":"@olawanle_joel","twitter_site":"@kinsta_pt","twitter_misc":{"Escrito por":"Joel Olawanle","Tempo estimado de leitura":"13 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/kinqsta.com\/pt\/blog\/gerador-imagem-ia\/#article","isPartOf":{"@id":"https:\/\/kinqsta.com\/pt\/blog\/gerador-imagem-ia\/"},"author":{"name":"Joel Olawanle","@id":"https:\/\/kinqsta.com\/pt\/#\/schema\/person\/efa7de30245ca15be5ce1dcacff89c07"},"headline":"Crie um Aplicativo React Gerador de Imagens IA Usando a API DALL-E da OpenAI","datePublished":"2023-10-02T12:14:50+00:00","dateModified":"2023-10-06T05:56:04+00:00","mainEntityOfPage":{"@id":"https:\/\/kinqsta.com\/pt\/blog\/gerador-imagem-ia\/"},"wordCount":2307,"commentCount":0,"publisher":{"@id":"https:\/\/kinqsta.com\/pt\/#organization"},"image":{"@id":"https:\/\/kinqsta.com\/pt\/blog\/gerador-imagem-ia\/#primaryimage"},"thumbnailUrl":"https:\/\/kinqsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/10\/ai-powered-image-generator-app-with-react-dall-e-1.jpg","inLanguage":"pt-PT","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/kinqsta.com\/pt\/blog\/gerador-imagem-ia\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/kinqsta.com\/pt\/blog\/gerador-imagem-ia\/","url":"https:\/\/kinqsta.com\/pt\/blog\/gerador-imagem-ia\/","name":"Aplicativo React de Gera\u00e7\u00e3o de Imagens IA Usando a API DALL-E da OpenAI - Kinsta\u00ae","isPartOf":{"@id":"https:\/\/kinqsta.com\/pt\/#website"},"primaryImageOfPage":{"@id":"https:\/\/kinqsta.com\/pt\/blog\/gerador-imagem-ia\/#primaryimage"},"image":{"@id":"https:\/\/kinqsta.com\/pt\/blog\/gerador-imagem-ia\/#primaryimage"},"thumbnailUrl":"https:\/\/kinqsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/10\/ai-powered-image-generator-app-with-react-dall-e-1.jpg","datePublished":"2023-10-02T12:14:50+00:00","dateModified":"2023-10-06T05:56:04+00:00","description":"Aprenda passo a passo como aproveitar o poder da intelig\u00eancia artificial para gerar imagens impressionantes neste guia abrangente.","breadcrumb":{"@id":"https:\/\/kinqsta.com\/pt\/blog\/gerador-imagem-ia\/#breadcrumb"},"inLanguage":"pt-PT","potentialAction":[{"@type":"ReadAction","target":["https:\/\/kinqsta.com\/pt\/blog\/gerador-imagem-ia\/"]}]},{"@type":"ImageObject","inLanguage":"pt-PT","@id":"https:\/\/kinqsta.com\/pt\/blog\/gerador-imagem-ia\/#primaryimage","url":"https:\/\/kinqsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/10\/ai-powered-image-generator-app-with-react-dall-e-1.jpg","contentUrl":"https:\/\/kinqsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/10\/ai-powered-image-generator-app-with-react-dall-e-1.jpg","width":1460,"height":730},{"@type":"BreadcrumbList","@id":"https:\/\/kinqsta.com\/pt\/blog\/gerador-imagem-ia\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/kinqsta.com\/pt\/"},{"@type":"ListItem","position":2,"name":"React","item":"https:\/\/kinqsta.com\/pt\/topicos\/react\/"},{"@type":"ListItem","position":3,"name":"Crie um Aplicativo React Gerador de Imagens IA Usando a API DALL-E da OpenAI"}]},{"@type":"WebSite","@id":"https:\/\/kinqsta.com\/pt\/#website","url":"https:\/\/kinqsta.com\/pt\/","name":"Kinsta\u00ae","description":"Solu\u00e7\u00f5es de hospedagem Premium, r\u00e1pida e segura","publisher":{"@id":"https:\/\/kinqsta.com\/pt\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/kinqsta.com\/pt\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pt-PT"},{"@type":"Organization","@id":"https:\/\/kinqsta.com\/pt\/#organization","name":"Kinsta","url":"https:\/\/kinqsta.com\/pt\/","logo":{"@type":"ImageObject","inLanguage":"pt-PT","@id":"https:\/\/kinqsta.com\/pt\/#\/schema\/logo\/image\/","url":"https:\/\/kinqsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/12\/kinsta-logo.jpeg","contentUrl":"https:\/\/kinqsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/12\/kinsta-logo.jpeg","width":500,"height":500,"caption":"Kinsta"},"image":{"@id":"https:\/\/kinqsta.com\/pt\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/kinstapt\/","https:\/\/x.com\/kinsta_pt","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:\/\/kinqsta.com\/pt\/#\/schema\/person\/efa7de30245ca15be5ce1dcacff89c07","name":"Joel Olawanle","image":{"@type":"ImageObject","inLanguage":"pt-PT","@id":"https:\/\/kinqsta.com\/pt\/#\/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:\/\/kinqsta.com\/pt\/blog\/author\/joelolawanle\/"}]}},"acf":[],"_links":{"self":[{"href":"https:\/\/kinqsta.com\/pt\/wp-json\/wp\/v2\/posts\/63705","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kinqsta.com\/pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kinqsta.com\/pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kinqsta.com\/pt\/wp-json\/wp\/v2\/users\/287"}],"replies":[{"embeddable":true,"href":"https:\/\/kinqsta.com\/pt\/wp-json\/wp\/v2\/comments?post=63705"}],"version-history":[{"count":12,"href":"https:\/\/kinqsta.com\/pt\/wp-json\/wp\/v2\/posts\/63705\/revisions"}],"predecessor-version":[{"id":63829,"href":"https:\/\/kinqsta.com\/pt\/wp-json\/wp\/v2\/posts\/63705\/revisions\/63829"}],"alternate":[{"embeddable":true,"hreflang":"en","title":"English","href":"https:\/\/kinqsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/63705\/translations\/en"},{"embeddable":true,"hreflang":"pt","title":"Portuguese","href":"https:\/\/kinqsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/63705\/translations\/pt"},{"embeddable":true,"hreflang":"fr","title":"French","href":"https:\/\/kinqsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/63705\/translations\/fr"},{"embeddable":true,"hreflang":"de","title":"German","href":"https:\/\/kinqsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/63705\/translations\/de"},{"embeddable":true,"hreflang":"ja","title":"Japanese","href":"https:\/\/kinqsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/63705\/translations\/jp"},{"embeddable":true,"hreflang":"es","title":"Spanish","href":"https:\/\/kinqsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/63705\/translations\/es"},{"embeddable":true,"hreflang":"it","title":"Italian","href":"https:\/\/kinqsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/63705\/translations\/it"},{"href":"https:\/\/kinqsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/63705\/tree"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kinqsta.com\/pt\/wp-json\/wp\/v2\/media\/63706"}],"wp:attachment":[{"href":"https:\/\/kinqsta.com\/pt\/wp-json\/wp\/v2\/media?parent=63705"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kinqsta.com\/pt\/wp-json\/wp\/v2\/tags?post=63705"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/kinqsta.com\/pt\/wp-json\/wp\/v2\/topic?post=63705"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}