ASCII 藝術產生器會將 JPG、PNG 或 WebP 圖片轉換成多列等寬文字字元,其密度反映每個取樣像素的亮度,整個過程完全不需將檔案上傳到伺服器。轉換時會讀取每個像素、計算其相對亮度,再將該數值對映到所選字元集中的某個字符:像 @ 和 # 這類視覺上較重的字元代表暗部,而點或空白這類細小符號則代表亮部。由於每個輸出字元都佔據固定大小的字元儲存格,產生的文字區塊可以貼到程式碼區塊、終端機記錄,或任何其他等寬容器中而不會破壞對齊。整個流程都在當前的瀏覽器分頁中執行,文字轉 ASCII 藝術產生器會在本機解碼來源圖片、將它繪製到小型取樣畫布上,並透過標準的 getImageData API 讀取像素。不需要帳號、也無需排隊或遠端複製檔案,因此無論是私人草稿或快速實驗都非常實用。

瀏覽器如何將像素轉換為字元
ASCII 轉換是一種詮釋,而非無損格式,因此每張圖片都會經過相同的幾個步驟。瀏覽器首先會拒絕非 JPG、PNG 或 WebP 的檔案,或超過 15 MB 的檔案,接著在任何畫布作業開始前先讀取解碼後的尺寸。通過這道關卡後,來源會被繪製到一個寬度符合所要求的輸出字元數、長寬比自然的取樣畫布上,使結果中的每個儲存格都精確對應到一個取樣像素。
每個取樣像素都會與白色進行合成以中和透明度,再依據 WCAG 2.2 所描述的閾值與轉換函式,將其 sRGB 通道線性化。三個線性值會分別乘上紅色 0.2126、綠色 0.7152、藍色 0.0722 的係數,合併為一個介於零到一之間的相對亮度數值。接著該數值會透過一個密度序列來決定要選用哪個字符。
依據 WCAG 2.2,sRGB 值為 (255, 0, 0) 的純紅像素會線性化為 (1.0, 0.0, 0.0),產生的亮度為 0.2126 × 1.0 + 0.7152 × 0.0 + 0.0722 × 0.0 = 0.2126。純綠像素會產生 0.7152,純藍像素則產生 0.0722,這就是為什麼綠色主導的照片看起來會明顯比同樣像素值的藍色主導照片更亮,也說明了若來源色彩平衡偏斜,最終的 ASCII 肖像為何可能顯得不均勻。
選擇寬度、密度與明暗方向
決定圖片如何呈現為文字的三項控制項,分別是字元寬度、密度組合,以及可選的反向切換。寬度是以等寬欄數而非來源像素來衡量,是最直接用來在細節與行長之間取捨的槓桿。較大的數值保留更多細微特徵,但會產生較長的行與較多的總字元數;較小的數值則產生精簡的結果,較容易貼入狹窄的版面。
下表比較三種可用的密度組合,協助你為主題選擇合適的起點。
| 密度組合 | 色調表現 | 適用情境 |
|---|---|---|
| 標準 | 在整個亮度範圍上分布均衡的序列 | 一般肖像、標誌、各類混合主題 |
| 詳細 | 更多色調階數,漸層更細膩 | 柔和陰影、細微漸層、人臉 |
| 簡單 | 符號較少,每個字符的對比度更高 | 剪影、高對比圖示、粗獷形狀 |
反向切換會交換密度序列中對應亮部與暗部的端點。當最終目的地使用保留空白的深色背景(例如終端機面板,或以深色主題呈現的程式碼區塊)時,請啟用此功能。當目的地為淺色主題(如 README 檔、Markdown 註解、或會顯示在白底上的聊天訊息)時,則請關閉。一個不錯的初次嘗試是先用標準組合、接近 80 欄的設定開始,再依據第一次產生後最重要的邊緣與可辨識特徵是否清晰,來調高或調低寬度。
將圖片轉換為 ASCII 藝術文字
依照下列步驟將本機圖片轉換為可複製的 ASCII 文字。
- 開啟文字轉 ASCII 藝術產生器,點擊檔案選擇器來挑選 JPG、PNG 或 WebP 圖片。瀏覽器會在解碼完成後立刻顯示來源尺寸;超過 15 MB 或格式不支援的檔案會在進入任何像素處理前就被拒絕。
- 以等寬欄數選擇字元寬度。先從接近 80 開始以取得平衡的預覽,再依第一次結果中主題的辨識度與行長來調高或調低。
- 挑選密度組合。標準組合適用於大多數圖片;詳細組合提供更多色調階數以處理柔和漸層;簡單組合則以較少符號達成更粗獷、高對比的結果。
- 只有在目的地使用深色背景且保留空白時才啟用反向;否則請保持關閉,讓暗部仍對應到較重的字符。
- 點擊「產生」並檢視等寬預覽。重點檢查最重要的邊緣與可辨識特徵,而非平均區塊,因為單一清晰的剪影通常比平滑的中間色更為重要。
- 使用「複製」將精確的文字放入剪貼簿,或使用「下載 TXT」儲存一個以來源圖片命名的 UTF-8 純文字檔,方便日後在任何文字編輯器中重新開啟。
輸出限制、透明像素與長寬比校正
產生器設有幾項互相牽制的限制,會影響特定圖片是否能產生可用結果。15 MB 上限與 JPG、PNG、WebP 類型檢查會在瀏覽器解碼檔案前進行,因此過大或不支援的來源會立即失敗,不會耗用畫布記憶體。另外還有一條 40 megapixel 的規則會在讀取尺寸後檢查,用以限制瀏覽器願意建立的取樣畫布大小。在受限裝置上,關閉佔用大量記憶體的分頁或使用較小的來源會有所幫助,特別是當來源是高度壓縮但尺寸很大的檔案時。
取樣畫布建立後,產生器會依據來源長寬比計算列數,並套用高度校正,因為等寬字元通常比寬度更高。若沒有這個校正,正方形圖片在轉換後會看起來被垂直拉長。如果校正後的格點會產生超過 800 列或 100,000 字元,工具會要求使用者縮小寬度或裁切來源,以避免產生不切實際的大塊文字。
透明像素會被視為出現在白色背景上來處理。這個步驟可避免某些編輯工具在透明 PNG 內部遺留的不可見黑色值,在合成並讀取後變成深色記號。因此,完全沒有可見內容的透明 PNG 會產生空白輸出;而含有標誌的透明 PNG 則會如同在一般網頁上一樣,於白底上顯示。
複製、下載與貼上結果
「複製」會將精確的字元格點(含連接每一列的換行字元)放入系統剪貼簿。「下載 TXT」會產生一個以來源圖片命名的 UTF-8 純文字檔,僅包含產生的各列內容,方便在任何文字編輯器中開啟,或串接到其他本機工作流程。兩種輸出都不會保留原始像素資料;唯一的產出物就是字元格點本身。
文字貼到哪裡,與轉換本身同樣重要。等比例字型會破壞視覺格點,部分平台會合併連續空白,除非文字置於預格式化區塊中。請貼入三個反引號的程式碼區塊、<pre> 元素,或任何使用等寬字型且保留空白的容器中,以維持對齊。這條規則同樣適用於終端機面板、程式碼註解以及 Markdown 預覽;在這些情境下,被合併的空白會把清晰的肖像變成鋸齒狀的輪廓。
ASCII 轉換無法保留的內容
ASCII 轉換始終是有損的,因為輸出是以從有限密度序列中選出的單一字元來代表每個儲存格。細緻紋理、精確顏色、可閱讀的小字、透明效果以及攝影細節都無法在轉換過程中存活;結果也會受到目的地的字型、行高與可用寬度影響。在某裝置上看起來清晰的預覽,在另一裝置上可能顯得被拉長,而等比例字型會悄悄破壞產生器所依賴的儲存格對齊。
若要取得可靠的結果,請保留原始圖片、測試幾種不同的輸出寬度,並在依賴其外觀前,於預定目的地預覽貼上後的效果。當主題缺乏清晰度時,請提高寬度或切換到詳細組合;當輸出過於雜亂時,請改用簡單組合或較窄的寬度。像素讀取步驟會使用 Canvas API 中標準的 getImageData 呼叫,從畫布讀取取樣像素。
延伸閱讀:為動態 GIF 添加文字。
延伸閱讀:從任何圖片將文字轉換為 ASCII 藝術。