Salut les développeurs,
Aujourd'hui, je vais vous montrer comment créer un générateur d'images à l'aide de ReactJS, et tout est gratuit, grâce aux laboratoires de la Forêt-Noire et à Together AI.
Pour ce didacticiel, nous utiliserons Vite pour initialiser l'application et Shadcn pour l'interface utilisateur. Je suppose que vous avez déjà configuré le projet et installé Shadcn.
Nous devons installer le package Together AI pour accéder au modèle Flux gratuit pour la génération d'images.
Exécutez la commande suivante dans votre terminal
npm i together-ai
Maintenant, créons l'interface utilisateur de notre application. Vous trouverez ci-dessous le code complet du composant générateur d’images. il comprend une saisie de texte pour les invites. une liste déroulante pour la sélection des proportions.
Gardez à l'esprit que nous devons utiliser "black-forest-labs/FLUX.1-schnell-Free" car c'est gratuit.
import { useRef, useState } from "react"; import Together from "together-ai"; import { ImagesResponse } from "together-ai"; import { Button } from "@/components/ui/button"; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from "@/components/ui/select"; import { Textarea } from "@/components/ui/textarea"; import { motion } from "framer-motion"; import { Separator } from "@/components/ui/separator"; import { DownloadIcon } from "@radix-ui/react-icons"; import { save } from "@tauri-apps/plugin-dialog"; import { writeFile } from "@tauri-apps/plugin-fs"; function App() { const [input, setInput] = useState(""); const [imageUrl, setImageUrl] = useState(""); const [ratio, setRatio] = useState("9:16"); const [isLoading, setIsLoading] = useState(false); const [downloading, setDownloading] = useState(false); const imageRef = useRef(null); const hRatio = ratio.split(":").map(Number)[0]; const vRatio = ratio.split(":").map(Number)[1]; const width = hRatio === 1 ? 512 : hRatio * 64; const height = vRatio === 1 ? 512 : vRatio * 64; const together = new Together({ apiKey: import.meta.env.VITE_TOGETHER_API_KEY, }); const handleGenerateImage = async () => { setIsLoading(true); try { console.log(width, height); const response: ImagesResponse = await together.images.create({ model: "black-forest-labs/FLUX.1-schnell-Free", prompt: input, width: width, height: height, // @ts-expect-error response_format is not defined in the type response_format: "b64_json", }); const base64Image = response.data[0].b64_json; const dataUrl = `data:image/png;base64,${base64Image}`; setImageUrl(dataUrl); } catch (error) { console.error("Error generating image:", error); // You might want to add some error handling UI here } finally { setIsLoading(false); } }; const handleDownloadImage = async () => { if (imageUrl) { setDownloading(true); try { // Remove the data URL prefix const base64Data = imageUrl.replace(/^data:image\/\w ;base64,/, ""); // Convert base64 to binary const imageBuffer = Uint8Array.from(atob(base64Data), (c) => c.charCodeAt(0) ); // Open a save dialog const filePath = await save({ filters: [ { name: "Image", extensions: ["png"], }, ], }); if (filePath) { // Write the file await writeFile(filePath, imageBuffer); console.log("File saved successfully"); } } catch (error) { console.error("Error saving image:", error); } finally { setDownloading(false); } } }; return ( ); } export default App;AI Image Generator for "Thảo"
Generated Image
{imageUrl ? () : ( )}Your generated image will appear here
Avec cette configuration, vous disposez désormais d'une application ReactJS simple qui peut générer et télécharger des images générées par l'IA.
Merci d'avoir lu! Si vous pensez que cet article est intéressant, n’hésitez pas à le liker. Bon codage !
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3