初階圖片轉 ASCII 轉換會將一張解碼後的靜態幀,透過把每個縮放像素的 W3C 相對亮度對應到一組固定的十個字元密度漸層,轉成一格純文字的網格,並在當前的瀏覽器分頁中產生完整結果,包含可複製的文字以及可下載的 TXT 檔案。對第一次嘗試這項技巧的人來說,實際意義很短:把一張 PNG、JPEG、GIF 或 WebP 交給工具,輸入一個整數作為輸出寬度,頁面就會列印出完成的 ASCII 網格,外加一個可以儲存在本機的純文字檔。來源圖片中的內容不會被當作語言讀取;轉換器不會辨識字母、單字、物件或場景。結果中的每個字符,都是根據來源在縮小並重繪到符合你所選寬度的小畫布後,對應取樣點的亮度來挑選。由於解碼、縮放、像素取樣、亮度運算、複製操作以及 TXT 檔案建立都在你的當前分頁內執行,因此你的原始圖片與產生的文字絕不會離開這個頁面。這個網格純粹是視覺化的 ASCII 藝術,因此能在聊天視窗、程式碼註解、README 及其他接受純文字的地方使用。

image to ascii for beginners
初階圖片轉 ASCII:首次操作完整教學

「圖片轉 ASCII」對初學者的真正含義

對初學者來說,「ASCII 藝術」這個詞只是指用一般鍵盤字元而非像素繪成的圖片。來源圖片會被縮減成一個小網格,每個格子放一個字元,而字元的選擇完全取決於縮放後該點的亮度。圖片轉 ASCII 工具使用一組固定的十個字元密度漸層,從暗端的密集符號一路排到亮端的空白,因此來源中較暗的區域會得到較密集的字元,較亮的區域則得到較稀疏的字元。反轉模式會把漸層顛倒,讓亮區變密集、暗區變稀疏。這只是視覺上的轉換,並非光學字元辨識:工具不會去讀取或轉錄圖片裡已有的文字,也不會標註物件。後續用途是為了呈現,因此結果能乾淨地貼進只接受文字的地方。

開始之前需要準備什麼

在你按下任何按鈕之前,先了解什麼才算是有效的輸入會很有幫助。轉換器只接受正好四種靜態格式,其他一概拒絕。用一張小表來記住這點最簡單。

格式是否接受給初學者的備註
PNG是常見的無損來源;轉換時透明度會與白色進行合成。
JPEG / JPG是常見的照片格式;在極小的寬度下,有損壓縮可能會讓 ASCII 網格顯得較模糊。
GIF是動畫 GIF 會擷取為單一靜態,因此預覽不會持續變動。
WebP是現代網頁格式,透過與其他格式相同的瀏覽器管線進行解碼。
其他副檔名否瀏覽器必須實際解碼該檔案;格式錯誤或不支援的內容會在解碼階段失敗。

除了格式檢查之外,還有三項數值上限,用來防止瀏覽器意外處理到巨大的解碼位圖。你的檔案在解碼前最多只能是 15 MiB。瀏覽器實際解碼後,任一邊不得超過 8,192 像素,總像素面積不得超過 24,000,000 像素。一張壓縮過的 JPEG 在位元組上可能很小,解碼後卻仍可能是大張圖片,因此這兩項檢查會獨立執行。不支援或超出上限的圖片會清掉先前的所有輸出,且不會產生半成品的 ASCII 網格,因此永遠不會出現讀到一半的結果。

你會用到的三個控制項

一旦手中有了合適的圖片,畫面上剩下的部分刻意保持精簡。初學者只需要學會三個控制項。

  • 寬度欄位。 一個介於 10 到 200 的整數,用來設定 ASCII 結果的寬度(以字元計)。工具在邊界 10 與 200 都會接受,但範圍以外的任何輸入都會被拒絕,包括小數、符號、單位、科學記號、空白字元以及帶前導零的格式。
  • 反轉漸層切換。 選用。開啟後,同一組十個字元的漸層會由亮到暗讀取,因此來源中較亮的區域會變成密集字元,較暗的區域變成空白。在高調照片上預設結果看起來偏淡時很實用。
  • 執行動作。 一次產生完整的 ASCII 預以及可下載的 TXT 檔案。編輯任何控制項都會立即撤銷舊的下載連結、清除先前的預覽,並重設任何「已複製」的指示。

三個步驟將你的第一張圖片轉成 ASCII

只要你準備好來源檔案,初學者的實際操作流程大約只要一分鐘。

  1. 在瀏覽器中開啟圖片轉 ASCII 工具,並選擇一個符合上述大小與尺寸限制的本地 PNG、JPEG、GIF 或 WebP 檔案。
  2. 在寬度欄位中輸入一個介於 10 到 200 的整數輸出寬度,除非想反轉亮暗,否則保持密度漸層為預設方向,然後觸發轉換。
  3. 閱讀填滿頁面的 ASCII 預,並使用複製或下載控制項,將同一份網格以純文字形式或本地 TXT 檔案抓下來。

每次執行時,每個取樣點都遵循相同的流程:解碼後的圖片會繪製到一塊尺寸正好符合你所選欄數與列數的 Canvas 上,每個輸出字元對應到一個取樣像素,最後由亮度值在十個字元的漸層(或其反轉版本)中挑選一個位置。不同的輸出寬度會以不同尺寸重繪畫布,這代表重取樣本身會重新進行,而不是在幕後重複使用快取的位圖。

列數與 50,000 字元預算是如何計算的

大多數初學者很快就會注意到,結果的高度並非直接選擇,而是由來源長寬比與你所輸入的寬度推導而來。公式為 列數 = round(來源高度 ÷ 來源寬度 × 輸出寬度 × 0.5),且至少為一列。0.5 這個係數模擬的是典型的等寬字元格,其高度大約是寬度的兩倍,這也是為什麼結果能保留來源形狀而不是被拉長的原因。

列數確定後,序列化文字的預算就是 寬度 × 列數 + (列數 − 1) 個字元,其中最後一項是列與列之間的換行分隔符。完整的序列化輸出最多只能有 50,000 個字元。工具不會默默截斷任何內容;在其他條件都符合的情況下,較瘦長的長寬比仍可能觸及這個上限,此時轉換器會回報上限並且不產生預覽或下載。

以一個熟悉的形狀作為範例,一張 1,200 像素高、800 像素寬的圖片,在輸出度 = 120 時:

  • 高 ÷ 寬 = 1,200 ÷ 800 = 1.5
  • 1.5 × 120 = 180
  • 180 × 0.5 = 90
  • 列數 = round(90) = 90 列
  • 序列化 = 120 × 90 + (90 − 1) = 10,800 + 89 = 10,889 個字元,遠低於 50,000 上限

如果你曾經看到一張瘦長的來源在沒有任何預覽的情況下被拒絕,幾乎一定是預算檢查造成的。選擇較小的輸出度可以讓列數下降,同時保留相同的來源形狀。

預覽與下載的 TXT 之間的差異

你在瀏器中看到的預覽是以 1:2 字元格的近似值來調整大小的,這是一個實用的簡化方式,而不是對每個等寬字型的精確量測。下載的 TXT 在你的編輯器中最終可能比頁面上看起來更高或更矮,視顯示時使用的字型、行高、縮放層級與字距而定。在大多數情況下,貼到程式碼區塊或等寬聊天頻道會與預覽相當接近,但在比例字型中或在使用瀏覽器預設樣式的網頁中渲染則不會。當你需要視覺保真度或封存資訊(例如中繼資料)時,請把原始圖片留在身邊,因為 TXT 檔案只包含 ASCII 字元與換行分隔符;色彩、透明度、動畫、圖層以及壓縮後的影像本身都不會保留。

工具強制執行的初學者規則

進行實驗時請把這些規則放在手邊,因為契約會強制執行它們,而不是猜測你的意思。

  • 寬度輸入很嚴格。「100」可以通過;「+100」、「100.0」、「 100 」、「0100」以及「1e2」都不行,這些會直接失敗,而不是被自動夾在範圍內。
  • 透明像素會變成白色。 在執行亮度公式之前,Alpha 通道會先與白色進行合成,因此完全透明的區域在預設方向下會對應到最亮的漸層位置。
  • 編輯會清除先前狀態。 變更來源、寬度或反轉切換會撤銷先前的文字下載網址,並清除任何「已複製」的指示,因此舊的剪貼簿承諾不會跨編輯洩漏。
  • 格式檢查是必要但非充分條件。 副檔名或 MIME 類型符合只通過第一道關卡,但瀏覽器必須實際解碼該檔案。格式錯誤的內容與不支援的編解碼設定檔仍會在解碼階段失敗,並清掉任何既有的 ASCII。
  • 網格以字元為界,而非位元組。 50,000 字元的上限與檔案大小無關;一個小型的壓縮檔仍可能解碼為超過上限的瘦長網格。

若想更深入了解像素如何變成文字,圖片轉 ASCII 完整解析指南會更詳細地說明 W3C 相對亮度公式以及畫布重取樣步驟。

開始產生之前快速檢查清單

幾分鐘的準備能讓首次嘗試更順利。

  • 儲存一張靜態幀的 PNG、JPEG、GIF 或 WebP,磁碟上大小上限為 15 MiB,邊長不超過 8,192 像素,面積不超過 2,400 萬像素。
  • 決定你想要直向、橫向或正方形的 ASCII 網格形狀,並挑選一個輸出寬度,使寬度 × 列數落在你來源長寬比的 50,000 字元上限之內。
  • 準備好一套緊湊的等寬字型來查看結果,讓預覽與其他讀者在終端機或聊天用戶端上看到的內容一致。

最後一點很重要,因為同一個 TXT 檔案在等寬終端機與比例感知的網頁字型中看起來會明顯不同。請把頁面上的預視為一種方便的呈現方式,把 TXT 視為可以張貼到任何接受文字之處的正式版本。

相關閱讀:為圖片加上浮水印:初學者入門指南。