嘗試ai生成figma設計

當聽到用ai 自動生成figma設計時,不免好奇這個是如何實現的。在查閱了不少資料后,有了一些想法。參考了:在figma上使用腳本自動生成色譜
這篇文章提供的主要思路是:可以通過腳本的方式構建figma設計。如果我們使用ai 生成figma腳本。然后放到figma 中執行是不是就有可能生成設計圖那?

使用ai生成腳本

使用如下提示詞:
利用figma 控制臺腳本能力,實現登錄界面
在這里插入圖片描述
生成的代碼(改代碼有一個錯誤,把錯誤交給chatgpt后,chatgpt修改代碼后解決):

// 首先,確保你已加載了正確的字體(如果沒有加載,Figma API 會報錯)
async function loadFont(fontName) {await figma.loadFontAsync({ family: fontName, style: "Regular" });
}// 創建一個簡單的登錄頁面
async function createLoginPage() {// 加載必要的字體await loadFont("Roboto");// 創建框架const loginFrame = figma.createFrame();loginFrame.resize(320, 480); // 設置框架大小loginFrame.name = "Login Page";loginFrame.layoutMode = "VERTICAL"; // 垂直排列loginFrame.primaryAxisAlignItems = "CENTER"; // 垂直居中loginFrame.counterAxisAlignItems = "CENTER"; // 水平居中loginFrame.paddingTop = 40;loginFrame.paddingBottom = 40;loginFrame.paddingLeft = 20;loginFrame.paddingRight = 20;loginFrame.fills = [{type: "SOLID",color: { r: 0.9, g: 0.9, b: 0.9 }, // 設置背景顏色}];// 添加標題const title = figma.createText();title.characters = "Login";title.fontName = { family: "Roboto", style: "Bold" };title.fontSize = 32;title.textAlignHorizontal = "CENTER"; // 文本居中loginFrame.appendChild(title);// 創建用戶名標簽const usernameLabel = figma.createText();usernameLabel.characters = "Username";usernameLabel.fontSize = 16;usernameLabel.textAlignHorizontal = "LEFT"; // 左對齊usernameLabel.y = 80; // 設置位置loginFrame.appendChild(usernameLabel);// 創建用戶名輸入框(矩形)const usernameBox = figma.createRectangle();usernameBox.resize(280, 40); // 設置寬高usernameBox.fills = [{type: "SOLID",color: { r: 0.9, g: 0.9, b: 0.9 }, // 輸入框顏色}];loginFrame.appendChild(usernameBox);// 創建密碼標簽const passwordLabel = figma.createText();passwordLabel.characters = "Password";passwordLabel.fontSize = 16;passwordLabel.textAlignHorizontal = "LEFT";passwordLabel.y = 140;loginFrame.appendChild(passwordLabel);// 創建密碼輸入框(矩形)const passwordBox = figma.createRectangle();passwordBox.resize(280, 40);passwordBox.fills = [{type: "SOLID",color: { r: 0.9, g: 0.9, b: 0.9 },}];loginFrame.appendChild(passwordBox);// 創建登錄按鈕const loginButton = figma.createRectangle();loginButton.resize(280, 40);loginButton.fills = [{type: "SOLID",color: { r: 0, g: 0.5, b: 1 }, // 藍色按鈕}];// 創建登錄按鈕文本const buttonText = figma.createText();buttonText.characters = "Login";buttonText.fontSize = 16;buttonText.textAlignHorizontal = "CENTER";buttonText.textAlignVertical = "CENTER"; // 垂直居中loginButton.appendChild(buttonText);loginFrame.appendChild(loginButton);// 將創建的登錄頁面添加到當前頁面figma.currentPage.appendChild(loginFrame);
}// 調用創建登錄頁面的函數
createLoginPage();

從運行錯誤:
在這里插入圖片描述
再丟給chatGpt:
在這里插入圖片描述
然后又報了一個錯誤,然后再把錯誤丟給chatGPt,然后解決。

修改后的代碼(沒有錯誤):

// 加載字體的異步函數
async function loadFont(fontName) {await figma.loadFontAsync({ family: fontName, style: "Regular" });
}// 創建一個簡單的登錄頁面
async function createLoginPage() {// 加載必要的字體await loadFont("Inter");// 創建框架const loginFrame = figma.createFrame();loginFrame.resize(320, 480); // 設置框架大小loginFrame.name = "Login Page";loginFrame.layoutMode = "VERTICAL"; // 垂直排列loginFrame.primaryAxisAlignItems = "CENTER"; // 垂直居中loginFrame.counterAxisAlignItems = "CENTER"; // 水平居中loginFrame.paddingTop = 40;loginFrame.paddingBottom = 40;loginFrame.paddingLeft = 20;loginFrame.paddingRight = 20;loginFrame.fills = [{type: "SOLID",color: { r: 0.9, g: 0.9, b: 0.9 }, // 設置背景顏色}];// 添加標題const title = figma.createText();await loadFont("Inter");  // 確保字體加載title.characters = "Login";title.fontName = { family: "Inter", style: "Regular" };  // 使用 Inter 字體title.fontSize = 32;title.textAlignHorizontal = "CENTER"; // 文本居中loginFrame.appendChild(title);// 創建用戶名標簽const usernameLabel = figma.createText();await loadFont("Inter");  // 確保字體加載usernameLabel.characters = "Username";usernameLabel.fontSize = 16;usernameLabel.textAlignHorizontal = "LEFT"; // 左對齊usernameLabel.y = 80; // 設置位置loginFrame.appendChild(usernameLabel);// 創建用戶名輸入框(矩形)const usernameBox = figma.createRectangle();usernameBox.resize(280, 40); // 設置寬高usernameBox.fills = [{type: "SOLID",color: { r: 0.9, g: 0.9, b: 0.9 }, // 輸入框顏色}];loginFrame.appendChild(usernameBox);// 創建密碼標簽const passwordLabel = figma.createText();await loadFont("Inter");  // 確保字體加載passwordLabel.characters = "Password";passwordLabel.fontSize = 16;passwordLabel.textAlignHorizontal = "LEFT";passwordLabel.y = 140;loginFrame.appendChild(passwordLabel);// 創建密碼輸入框(矩形)const passwordBox = figma.createRectangle();passwordBox.resize(280, 40);passwordBox.fills = [{type: "SOLID",color: { r: 0.9, g: 0.9, b: 0.9 },}];loginFrame.appendChild(passwordBox);// 創建登錄按鈕const loginButton = figma.createRectangle();loginButton.resize(280, 40);loginButton.fills = [{type: "SOLID",color: { r: 0, g: 0.5, b: 1 }, // 藍色按鈕}];// 創建登錄按鈕文本const buttonText = figma.createText();await loadFont("Inter");  // 確保字體加載buttonText.characters = "Login";buttonText.fontSize = 16;buttonText.textAlignHorizontal = "CENTER";buttonText.textAlignVertical = "CENTER"; // 垂直居中loginButton.appendChild(buttonText);loginFrame.appendChild(loginButton);// 將創建的登錄頁面添加到當前頁面figma.currentPage.appendChild(loginFrame);
}// 調用創建登錄頁面的函數
createLoginPage();

生成的效果,不理想:
在這里插入圖片描述
然后繼續叫chatGpt修改結果,讓其美觀一點:
在這里插入圖片描述
生成的代碼:

// 加載字體的異步函數
async function loadFont(fontName) {await figma.loadFontAsync({ family: fontName, style: "Regular" });
}// 創建一個美觀的登錄頁面
async function createLoginPage() {// 加載必要的字體await loadFont("Inter");// 創建框架const loginFrame = figma.createFrame();loginFrame.resize(400, 600); // 設置框架大小loginFrame.name = "Login Page";loginFrame.layoutMode = "VERTICAL"; // 垂直排列loginFrame.primaryAxisAlignItems = "CENTER"; // 垂直居中loginFrame.counterAxisAlignItems = "CENTER"; // 水平居中loginFrame.paddingTop = 40;loginFrame.paddingBottom = 40;loginFrame.paddingLeft = 20;loginFrame.paddingRight = 20;loginFrame.cornerRadius = 20; // 設置圓角loginFrame.fills = [{type: "SOLID",color: { r: 1, g: 1, b: 1 }, // 背景顏色為白色}];// 添加標題const title = figma.createText();await loadFont("Inter");  // 確保字體加載title.characters = "Welcome Back!";title.fontName = { family: "Inter", style: "Regular" };title.fontSize = 32;title.textAlignHorizontal = "CENTER";title.textAlignVertical = "CENTER";title.y = 20; // 設置標題位置loginFrame.appendChild(title);// 創建用戶名標簽const usernameLabel = figma.createText();await loadFont("Inter");usernameLabel.characters = "Username";usernameLabel.fontSize = 14;usernameLabel.textAlignHorizontal = "LEFT";usernameLabel.textAlignVertical = "CENTER";usernameLabel.y = 80;loginFrame.appendChild(usernameLabel);// 創建用戶名輸入框(矩形)const usernameBox = figma.createRectangle();usernameBox.resize(320, 40);usernameBox.cornerRadius = 8; // 設置圓角usernameBox.fills = [{type: "SOLID",color: { r: 0.95, g: 0.95, b: 0.95 }, // 輸入框顏色}];usernameBox.y = 100;loginFrame.appendChild(usernameBox);// 創建密碼標簽const passwordLabel = figma.createText();await loadFont("Inter");passwordLabel.characters = "Password";passwordLabel.fontSize = 14;passwordLabel.textAlignHorizontal = "LEFT";passwordLabel.textAlignVertical = "CENTER";passwordLabel.y = 160;loginFrame.appendChild(passwordLabel);// 創建密碼輸入框(矩形)const passwordBox = figma.createRectangle();passwordBox.resize(320, 40);passwordBox.cornerRadius = 8;passwordBox.fills = [{type: "SOLID",color: { r: 0.95, g: 0.95, b: 0.95 },}];passwordBox.y = 180;loginFrame.appendChild(passwordBox);// 創建登錄按鈕(需要將矩形和按鈕文本放入同一個框架中)const loginButtonFrame = figma.createFrame();loginButtonFrame.resize(320, 48); // 按鈕大小loginButtonFrame.cornerRadius = 8; // 設置圓角loginButtonFrame.fills = [{type: "SOLID",color: { r: 0, g: 0.5, b: 1 }, // 藍色按鈕}];loginButtonFrame.y = 240;// 創建按鈕文本const buttonText = figma.createText();await loadFont("Inter");buttonText.characters = "Login";buttonText.fontSize = 16;buttonText.textAlignHorizontal = "CENTER";buttonText.textAlignVertical = "CENTER";buttonText.fills = [{type: "SOLID",color: { r: 1, g: 1, b: 1 }, // 白色文本}];loginButtonFrame.appendChild(buttonText); // 將文本添加到按鈕框架loginFrame.appendChild(loginButtonFrame); // 將按鈕框架添加到登錄頁面// 將創建的登錄頁面添加到當前頁面figma.currentPage.appendChild(loginFrame);
}// 調用創建登錄頁面的函數
createLoginPage();

運行結果:
在這里插入圖片描述
在這里插入圖片描述
可以看到以上的控件見的距離還是有些緊湊了。自己手動改改,也還可以。

總結:
總體思路是,

  1. 使用ai生成腳本代碼
  2. figma 執行代碼,生成界面。

反思:

  1. 提示詞過于簡單,如果在提示詞中增加布局要求、顏色搭配要求、控件間的間隔等等(也就是ui設計師,在設計界面時,所考慮的幾個方面)產生的效果會更好(個人實驗,寫的詳細的,生成效果好一些)
  2. 商用級別的實現思路猜測:1.提示詞模板對于ui考慮的各方面寫得比較詳細。2.用描述很詳細的ui界面的文字描述和對應的腳本代碼數據進行訓練,從而得到一個ai模型。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/894767.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/894767.shtml
英文地址,請注明出處:http://en.pswp.cn/news/894767.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

iOS 老項目適配 #Preview 預覽功能

前言 iOS 開發者 最憋屈的就是UI 布局慢,一直以來沒有實時預覽功能,雖然swiftUI 早就支持了,但是目前主流還是使用UIKit在布局,iOS 17 蘋果推出了 #Preview 可以支持UIKit 實時預覽,但是僅僅是 iOS 17,老項目怎么辦呢?于是就有了這篇 老項目適配 #Preview 預覽 的文章,…

【分布式架構理論2】分布式架構要處理的問題及解決方案

文章目錄 1. 應用服務拆分2. 分布式調用3. 分布式協同4. 分布式計算5. 分布式存儲6. 分布式資源管理與調度7. 高性能與可用性優化8. 指標與監控 將分布式架構需要解決的問題按照順序列舉為如下幾步 問題分類具體內容應用服務拆分分布式是用分散的服務和資源代替集中的服務和資…

【PyQt】pyqt小案例實現簡易文本編輯器

pyqt小案例實現簡易文本編輯器 分析 實現了一個簡單的文本編輯器,使用PyQt5框架構建。以下是代碼的主要功能和特點: 主窗口類 (MyWindow): 繼承自 QWidget 類。使用 .ui 文件加載用戶界面布局。設置窗口標題、狀態欄消息等。創建菜單欄及其子菜單項&…

Unity中的虛擬相機(Cinemachine)

Unity Cinemachine詳解 什么是Cinemachine Cinemachine是Unity官方推出的智能相機系統,它提供了一套完整的工具來創建復雜的相機運動和行為,而無需編寫大量代碼。它能夠大大簡化相機管理,提高游戲開發效率。 Cinemachine的主要組件 1. Vi…

【PyQt】getattr動態訪問對象的屬性

問題 使用qtdesigner設計好大體的軟件結構,需要使用代碼進行批量修改控件樣式,self.ui.x 會被解釋為訪問 self.ui 中名為 x 的屬性,而不是將 x 作為變量名來解析,此時需要通過字符串動態訪問 self.ui 中的按鈕對象 for i in range(20):x f…

【電腦系統】電腦突然(藍屏)卡死發出刺耳聲音

文章目錄 前言問題描述軟件解決方案嘗試硬件解決方案嘗試參考文獻 前言 在 更換硬盤 時遇到的問題,有時候只有卡死沒有藍屏 問題描述 更換硬盤后,電腦用一會就卡死,藍屏,顯示藍屏代碼 UNEXPECTED_STORE_EXCEPTION 軟件解決方案…

DEEPSEKK GPT等AI體的出現如何重構工廠數字化架構:從設備控制到ERP MES系統的全面優化

隨著深度學習(DeepSeek)、GPT等先進AI技術的出現,工廠的數字化架構正在經歷前所未有的變革。AI的強大處理能力、預測能力和自動化決策支持,將大幅度提升生產效率、設備管理、資源調度以及產品質量管理。本文將探討AI體&#xff08…

【大模型LLM面試合集】大語言模型架構_Transformer架構細節

Transformer架構細節 1.Transformer各個模塊的作用 (1)Encoder模塊 經典的Transformer架構中的Encoder模塊包含6個Encoder Block. 每個Encoder Block包含兩個?模塊, 分別是多頭?注意?層, 和前饋全連接層. 多頭?注意?層采?的是?種Scaled Dot-Pr…

【華為OD-E卷 - 113 跳格子2 100分(python、java、c++、js、c)】

【華為OD-E卷 - 跳格子2 100分(python、java、c、js、c)】 題目 小明和朋友玩跳格子游戲,有 n 個連續格子組成的圓圈,每個格子有不同的分數,小朋友可以選擇以任意格子起跳,但是不能跳連續的格子&#xff…

訂單狀態監控實戰:基于 SQL 的狀態機分析與異常檢測

目錄 1. 背景與問題 2. 數據準備 2.1 表結構設計 3. 場景分析與實現 3.1 場景 1:檢測非法狀態轉換

說一下JVM管理的常見參數

Java虛擬機&#xff08;JVM&#xff09;有許多常見參數&#xff0c;用于控制其行為和性能。以下是一些常見的JVM參數及其說明&#xff1a; 1. 內存管理參數 -Xms<size> START 設置初始堆內存大小。例如&#xff0c;-Xms512m表示初始堆大小為512MB。 -Xmx<size>…

驗證工具:GVIM和VIM

一、定義與關系 gVim&#xff1a;gVim是Vim的圖形界面版本&#xff0c;提供了更多的圖形化功能&#xff0c;如菜單欄、工具欄和鼠標支持。它使得Vim的使用更加直觀和方便&#xff0c;尤其對于不習慣命令行界面的用戶來說。Vim&#xff1a;Vim是一個在命令行界面下運行的文本編…

4 HBase 的高級 shell 管理命令

4 HBase 的高級 shell 管理命令 1.status 例如&#xff1a;顯示服務器狀態 hbase(main):058:0> status node012.whoami 顯示 HBase 當前用戶&#xff0c;例如&#xff1a; hbase> whoami3.list 顯示當前所有的表 hbase> list4.count 統計指定表的記錄數&#xff0c…

Web - CSS3基礎語法與盒模型

概述 這篇文章是關于 Web 前端 CSS3 的基礎語法與盒模型的講解。包括 CSS3 層疊性及處理沖突規則、偽元素和新增偽類元素、屬性選擇器等。還介紹了文本與字體屬性&#xff0c;如段落和行相關屬性、字體文本屬性。最后闡述了盒子模型&#xff0c;如元素隱藏、行內與塊元素轉換、…

國防科大:雙目標優化防止LLM災難性遺忘

&#x1f4d6;標題&#xff1a;How to Complete Domain Tuning while Keeping General Ability in LLM: Adaptive Layer-wise and Element-wise Regularization &#x1f310;來源&#xff1a;arXiv, 2501.13669 &#x1f31f;摘要 &#x1f538;大型語言模型&#xff08;LLM…

Verilog基礎(一):基礎元素

verilog基礎 我先說,看了肯定會忘,但是重要的是這個過程,我們知道了概念,知道了以后在哪里查詢。語法都是術,通用的概念是術。所以如果你有相關的軟件編程經驗,那么其實開啟這個學習之旅,你會感受到熟悉,也會感受到別致。 入門 - 如何開始 歡迎來到二進制的世界,數字…

一次線程數超限導致的hive寫入hbase作業失敗分析

1.集群配置 操作系統:SuSe操作系統 集群節點:100臺相同配置的服務器 單臺:核心112Core,內存396G 2.問題現象 現象1:跑單個入庫任務報錯,批量提交任務后出現OOM異常 執行12個hivesql,將數據寫入hbase.hbase入庫有近一半的任務報錯。 每次報錯的任務不是同一個,hivesql…

優化fm.jiecao.jcvideoplayer_lib中視頻橫豎屏自動適配原視頻方案

fm.jiecao:jiecaovideoplayer:x.x.x 優化fm.jiecao.jcvideoplayer_lib中視頻橫豎屏自動適配原視頻方案&#xff1a; 僅優化關鍵代碼部分&#xff0c;源碼&#xff1a; public void startWindowFullscreen() {Log.i(TAG, "startWindowFullscreen " " [" …

多無人機--強化學習

這個是我對于我的大創項目的構思&#xff0c;隨著時間逐漸更新 項目概要 我們的項目平臺來自挑戰杯揭綁掛帥的無人機對抗項目&#xff0c;但是在由于時間原因&#xff0c;并未考慮強化學習&#xff0c;所以現在通過大創項目來彌補遺憾 我們項目分為三部分&#xff0c;分為虛…

工業相機常用詞語解釋

線陣相機和面陣相機&#xff1a; 線陣相機&#xff0c;是采用線陣圖像傳感器的相機。線陣圖像傳感器以CCD為主&#xff0c; 一行的數據可以到幾K甚至幾十K&#xff0c;但是高度只有幾個像素&#xff0c;行頻很高&#xff0c;可以到每秒幾萬行&#xff0c;適合做非常高精度、寬…