Lizely 的 Lenny 臉部產生器將 8 種眼睛、8 種嘴巴與 6 種配對手臂的有限調色盤,組合成 3,072 種直接的 Unicode 組合,你可以預覽、複製,並以純文字貼上。由於左右眼睛是獨立的,介面會顯示 8 × 8 × 8 × 6 = 3,072 個臉部,這些臉部是在固定的透明模板上組裝而成:左側手臂(選用)、左括號、左眼、一個空格、嘴巴、一個空格、右眼、右括號,以及右側手臂(選用)。每個部件都是純 Unicode 文字,而非圖片、表情符號、SVG 或 canvas 匯出,這表示完成的臉部會繼承目的地的文字顏色與字型,並能透過任何接受文字的管道傳送。選擇、隨機化、組裝與剪貼簿寫入全部都在你的瀏覽器中本地完成,不會上傳、不需要帳號、沒有伺服器歷史紀錄,也不會有分析酬載將臉部傳出去。成功訊息會確認真實的剪貼簿寫入;若頁面權限阻擋寫入,則會明確顯示拒絕訊息,而非靜默成功。

lenny face generator copy and paste
Lenny 臉部產生器複製與貼上:3,072 種 Unicode 組合

產生器的結構設計

在控制項背後,採用的是刻意精簡的調色盤,而非龐大的符號堆。介面中提供 8 個眼睛字串、8 個嘴巴字串與 6 個配對手臂物件,你所設定的四個索引會在渲染前對照這些精確的調色盤進行驗證。調色盤之所以有限,是為了可讀性:一小組具名的部件易於理解,而冗長且無結構的字母表則容易隱藏意外。

臉部是使用固定的透明模板組成,因此所選部件絕不會被悄悄重新排序。確切順序為:左側手臂(選用)、左括號、左眼、一個空格、嘴巴、一個空格、右眼、右括號,以及右側手臂(選用)。眼睛與嘴巴部件之間的單一空格是模板的一部分,而括號始終是字面意義的括號——絕不會是方括號、大括號或角括號。此工具不會偷偷更改選定的字元、調換組合記號,或在應該顯示文字之處替換成圖形影像。

由於四個索引是獨立的,每次手動選擇都會產生一個具確定性的臉部,而且即使最近使用的是「Random face」(隨機臉部),手動控制項之後仍會顯示已選定的部件。重新載入頁面時,React 狀態會從預設元件選擇開始,而非還原先前的階段作業。

組合數學:8 × 8 × 8 × 6 = 3,072

臉部總數是各獨立選擇的直接乘積。每個左眼選擇 (8) 可與每個右眼選擇 (8)、每個嘴巴選擇 (8),以及每個配對手臂樣式 (6) 配對,共得出 8 × 8 × 8 × 6 = 3,072 種直接組合。

使用四個控制項的具體計算範例:

  • 從 8 個眼睛的調色盤中選擇左眼索引 3。
  • 從 8 個眼睛的調色盤中選擇右眼索引 7。
  • 從 8 個嘴巴的調色盤中選擇嘴巴索引 2。
  • 從 6 個手臂的調色盤中選擇配對手臂物件索引 5。

由於四個索引會經過驗證,且模板是固定的,因此在結果面板中出現的臉部,是這四個索引所能產生的唯一臉部。組合數學並不會重複計算外觀重複的臉部,且單元測試會強制每個調色盤內的唯一性,以及在第一與最後邊界的精確組成,因此超出範圍的索引會在測試邏輯中回傳錯誤,而非未定義的文字。

調色盤位置大小獨立於
左眼8右眼、嘴巴、手臂
右眼8左眼、嘴巴、手臂
嘴巴8雙眼、手臂
配對手臂6雙眼、嘴巴
直接組合數3,0728 × 8 × 8 × 6

如何用三個步驟建立並複製 Lenny 臉部

對大多數讀者來說,工作流程就是三個動作:設定部件、檢視結果、複製。Lenny 臉部產生器頁面正是圍繞這三個動作所打造。

  1. 選擇左眼、右眼、嘴巴與配對手臂樣式,或選擇「Random face」以取得新組合。一旦任何控制項變動,目前的臉部會立即在結果面板中更新。
  2. 檢視結果面板中顯示的確切 Unicode 文字。你在該處看到的,就是會被複製的內容——此工具不會重新排序記號、加入隱藏字元,或在文字之處替換成圖形影像。
  3. 複製臉部,並在貼到其他地方之前確認剪貼簿成功訊息。若瀏覽器權限或頁面內容拒絕剪貼簿存取,此工具會顯示明確訊息,要求你手動選取並複製可見的臉部;在這種情況下,它絕不會回報靜默成功。

這三個步驟完全在瀏覽器中執行。元件選擇、選用的「Random face」擲骰、在固定模板上的組裝,以及剪貼簿寫入,都在當前頁面上進行;產生過程不涉及任何伺服器歷史紀錄或外部影像請求。

為什麼貼上的臉部看起來與你建立的不同

Unicode 文字的外觀高度依賴字型回退、塑形、行高、平台、應用程式與周圍方向。在結果面板中看起來正確的臉部,一旦進入聊天用戶端、個人檔案簡介或程式碼註解,可能會有微妙變化,因為接收端應用程式使用了不同的字型堆疊與不同的塑形引擎。

  • 熟悉的 emoticon 部件所使用的組合記號,在不同字型中可能會以不同方式附加,因此在某個系統中位於眼睛上方的插入號或附加符號,在另一個系統中可能會飄得更遠。
  • 視目的地字型的行高與括號寬度而定,手臂可能會看起來離臉部更近或更遠。
  • 在缺少相關 Unicode 區段的較舊系統上,某些符號可能會遺失,此時目的地通常會顯示豆腐方塊或回退字符。
  • 目的地也可能過濾字元或折疊模板內的單一空格,這正是產生器不依賴隱藏間隔字元的原因。

由於臉部是純文字而非表情符號影像或貼圖,它會自動繼承目的地的文字顏色與字型。這正是其可攜性的來源,但也代表產生器無法保證在每個接收端應用程式中都能呈現像素級一致的效果。

手動選擇與「Random face」的比較

介面提供兩種方式來得到臉部:逐一建立部件,或讓工具一次選取全部四個索引。這兩種途徑各有取捨,整理如下表。

模式索引的選擇方式可重複性最適合
手動控制項你分別設定四個索引給定四個值時完全具確定性建立你心中已預想的特定臉部
Random face瀏覽器 crypto.getRandomValues 選取全部四個索引偶爾可能因機率而重複創意探索與驚喜組合

「Random face」是創意控制項,而非安全性或統計服務——之所以使用加密隨機來源,是因為它在瀏覽器中已經可用,而不是因為輸出結果需要因為任何安全理由而不可預測。再次選擇「Random」有可能因機率而產生相同組合,且手動控制項之後總會更新以顯示已選定的部件,因此「Random」擲骰絕非黑盒子。如果你需要的臉部不在調色盤中,請直接在目的地輸入或貼上——此工具並不會假裝涵蓋所有網路文字藝術文化。

適合貼上 Lenny 臉部的場合

臉部是純文字,因此能在多數接受 Unicode 的管道中流通:記事應用程式、聊天用戶端、社群個人檔案與簡介、照片說明、程式碼註解、論壇文章,以及文書處理器文件。顯示在結果面板中的同一字串,能在上述任何介面中流通,無需上傳步驟。

  • 目的地可能會過濾字元或折疊模板內的單一空格,這可能會改變臉部在抵達時的外觀。
  • 臉部是創意表達,而非情緒的客觀編碼,因此某些組合的詮釋可能與創作者的原意不同。在專業或重視審查的場域中,重複或非自願的 emoticon 可能造成干擾,且部分平台對特定字元設有規範。

此工具本身不會傳送訊息,也不在任何地方發布內容。它只在手動執行「Copy face」動作後寫入你的本機剪貼簿,因此除非你自行貼上,否則不會發布任何內容。

瀏覽器端與伺服器端的分工

所有與臉部相關的敏感作業都在當前頁面執行。四個索引存在於 React 狀態中,並在組裝前對照有限調色盤進行驗證,而組裝完成的字串就是寫入剪貼簿的內容。「Random face」控制項使用 crypto.getRandomValues 進行四次挑選,而「Copy face」會呼叫標準的 Clipboard writeText 路徑——兩者都是已記載的公開 Web 平台 API。

與臉部相關的資料完全不會傳送至伺服器:沒有伺服器歷史紀錄、沒有夾帶臉部的分析酬載、沒有遠端符號目錄、沒有語言模型呼叫,產生過程也不涉及外部影像請求。重新載入頁面會清除 React 狀態,並回到預設元件選擇。如果你想要更廣泛的工作流程,以便將 Unicode 字元移至聊天與個人檔案簡介,表情符號複製與貼上指南涵蓋了相同複製步驟在跨裝置方面的內容。