Привет, разработчики,
Сегодня я собираюсь показать вам, как создать генератор изображений с помощью ReactJS, и все это можно использовать бесплатно благодаря лабораториям Шварцвальда и Together AI.
В этом уроке мы будем использовать Vite для инициализации приложения и Shadcn для пользовательского интерфейса. Я предполагаю, что вы уже настроили проект и установили Shadcn.
Нам необходимо установить пакет Together AI, чтобы получить доступ к бесплатной модели Flux для генерации изображений.
Запустите следующую команду в своем терминале
npm i together-ai
Теперь давайте создадим пользовательский интерфейс для нашего приложения. Ниже приведен полный код компонента генератора изображений. он включает ввод текста для подсказок. раскрывающийся список для выбора соотношения сторон.
Имейте в виду, нам нужно использовать «black-forest-labs/FLUX.1-schnell-Free», потому что это бесплатно.
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
Благодаря этой настройке у вас теперь есть простое приложение ReactJS, которое может генерировать и загружать изображения, сгенерированные искусственным интеллектом.
Спасибо за чтение! Если вы считаете этот пост интересным, не стесняйтесь ставить ему лайк. Приятного кодирования!
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3