在 Android 上將影像轉成 ASCII,是把手機相簿中的照片轉成一格一格的文字字元,不需要額外安裝專屬應用程式,只要在行動瀏覽器中執行即可。輸出結果是一段等寬字型的文字區塊,由字母、符號和空格組成,會對應原始圖片的明暗區域,你可以把這段文字複製到記事 app、貼到聊天視窗,或下載成純文字的 TXT 檔。在 Android 上之所以行得通,是因為現代行動瀏覽器內建了和桌機相同的影像解碼、Canvas 和剪貼簿 API,因此從你的相簿選出的 PNG、JPEG、GIF 或 WebP 檔案可以全程在本機處理。不需要上傳到任何伺服器、不需要登入帳號,除了正常的檔案存取權限外也不會要求其他權限。Image To Ascii 工具正是為 Android 使用者提供這個完整流程:選擇一張圖片、設定介於 10 到 200 字元之間的輸出寬度、視需要反轉密度遞增方向、產生預覽,然後複製或下載本機產生的文字。

image to ascii on android
在 Android 上把影像轉成 ASCII:在瀏覽器中轉換照片

在 Android 手機上以瀏覽器進行 ASCII 轉換

大多數搜尋「影像轉 ASCII」轉換器的 Android 使用者,都以為必須從 Play 商店安裝一個新的 app。改用瀏覽器的方式就能跳過這個限制。在 Chrome、Samsung Internet、Firefox 或任何其他現代 Android 瀏覽器中開啟 Image To Ascii,從你的相簿或檔案 app 中挑選一個檔案,轉換作業就會在當前的分頁中於本機執行。這個工具把這支手機當成桌機一樣處理:請瀏覽器解碼影像、對每個輸出字元取樣一個縮放後的像素、把該像素的亮度對應到固定的密度遞增表,然後交給你一段可複製、可下載的文字結果。

這件事在 Android 上之所以重要,有兩個原因。第一,它避開了獨立 app 動輒要求大量權限的問題,這些 app 常常會索取超出實際轉換需求的儲存、相機和網路存取權限。第二,它讓檔案保留在裝置上。解碼、Canvas 縮放、亮度計算、寫入剪貼簿、以及產生 TXT Blob,全程都發生在你手機的瀏覽器分頁中,影像本身和產生的文字都不會被傳送到遠端伺服器。

你的手機可以處理的檔案格式與大小限制

Android 手機會以多種格式拍攝與儲存照片,而這個工具接受其中最常見的四種:PNG、JPEG、GIF 和 WebP。初始的格式畫面會檢查副檔名或 MIME 類型,但真正的考驗發生在瀏覽器實際解碼檔案的時候。副檔名與內容不符的檔案可能通過第一關,卻在解碼階段失敗,所以這個工具並不會單純依據檔名就保證一定成功。

在任何像素取樣開始之前,這個工具會強制執行三項硬性上限。編碼後的檔案大小上限為 15 MiB、解碼後的邊長上限為 8,192 像素、解碼後的總像素數上限為 2,400 萬像素。後兩項限制之所以存在,是因為一個小的壓縮檔可能會展開成大得多的未壓縮點陣圖,而轉換過程中真正重要的是瀏覽器的工作記憶體。不支援的格式、超過編碼上限的檔案,或是解碼後超過邊長或總像素數上限的影像,都會清除先前所有的 ASCII 結果,而且不會產生部分結果。

限制項目最大值
編碼後的檔案大小15 MiB
解碼後的邊長(寬或高)8,192 px
解碼後的總像素數(寬 × 高)24,000,000 px
支援的輸入格式PNG, JPEG, GIF, WebP

如何把 Android 上的照片轉成 ASCII

只要影像已經在你的手機上、且符合上述限制,實際的轉換就是一連串簡短的點擊動作。

  1. 在你的 Android 瀏覽器中開啟 Image To Ascii 工具,並點選檔案選擇器。從你的相簿、檔案 app 或最近的下載項目中選擇單一的 PNG、JPEG、GIF 或 WebP 檔案。
  2. 等待瀏覽器解碼影像。在 Android 上,對於一般手機照片通常只需不到一秒;對於非常大或是動畫來源的檔案,則會稍微久一點。工具會把動畫 GIF 快照成單一靜態畫面,以便後續設定能夠安全地調整。
  3. 輸入一個介於 10 到 200 字元之間的整數輸出寬度。這個數值必須是不帶正負號、不帶單位、不帶小數點、也不使用科學記號的純十進位整數。超出 10 到 200 範圍的值會直接被拒絕,而不是被強制調整到範圍內。
  4. 決定要保留預設的密度遞增表,還是將其反轉。反轉模式會把同一組十個字元的遞增表翻過來,讓亮部區域對應到密度高的字元、暗部區域對應到密度低的字元,這樣可以在不改變底層數學運算的情況下,反轉視覺感受。
  5. 點選「generate」來產生完整的 ASCII 表格。工具會把來源影像繪製到一個以白底為背景、尺寸符合規劃欄數與列數的 Canvas 上,使用 CanvasRenderingContext2D.getImageData 為每個輸出字元讀取一組 RGBA 樣本、把透明區域與白色合成、再套用 W3C 相對亮度公式,然後將結果四捨五入為遞增表的索引。
  6. 用「copy」按鈕把顯示出來的文字複製到剪貼簿,或把結果下載成本機的 TXT 檔。這兩個動作都有保護機制,避免較舊的複製承諾或過期的下載連結覆蓋到較新的結果。

ASCII 寬度、列數與 50,000 字元上限

你輸入的寬度決定了每一列的字元數。列數則會根據來源影像的長寬比計算,並針對等寬字型的字元格進行明確的校正,因為等寬字型在 Android 與桌機上的高度通常大約是寬度的兩倍。列數的計算方式是 round(來源高度除以來源寬度,乘以輸出寬度,再乘以 0.5),且最少為一列。

舉一個具體的計算範例:假設來源影像為 1200 × 800、輸出寬度為 100 字元,則列數等於 round(800 除以 1200,乘以 100,再乘以 0.5),也就是 round(33.33...),四捨五入為 33。序列化後的輸出包含 100 乘以 33 個字元,再加上列與列之間的 32 個換行分隔符,總計 3,332 個字元,遠低於 50,000 字元的上限。

這個上限會在產生預覽或下載檔案之前先進行檢查。在有效的寬度下,如果來源影像的長寬比非常高,就可能會超過這個預算上限;遇到這種情況,工具會回報這個限制而且不會回傳任何結果,而不是默默截斷圖文內容。輸出絕對不會被無聲地縮短。

一般與反轉的密度遞增表

固定的密度遞增表從 @ 符號開始,依序遞增到越來越淺的字元,最後是一個純粹的空格。在預設方向下,來源的暗部區域會對應到像 @ 或 # 這類密度高的字元,而亮部區域則會對應到像點號或空格這類密度低的字元。反轉模式則把同一組十個字元的遞增表翻過來,讓亮部區域對應到密度高的字元、暗部區域對應到密度低的字元。

來源色調(sRGB 亮度)預設遞增表反轉遞增表
接近全黑 (0.0)@ (密度最高)空格 (密度最低)
中間灰 (~0.5)遞增表中間的字元遞增表中間的字元
接近全白 (1.0)空格 (密度最低)@ (密度最高)
完全透明先與白色合成,再依白色對應先與白色合成,再依白色對應

在 Android 上,當你把 ASCII 區塊貼到深色聊天背景時,反轉遞增表就特別好用,因為這樣可以讓原始影像中的亮部呈現為「較粗」的筆觸。兩種方向的像素運算完全相同,差別只在查找表。

讓整個流程都保留在你的手機本機

對於把私人照片(特別是人像、截圖和文件)餵給轉換器的 Android 使用者來說,隱私往往是主要的考量。這個工具不會把來源影像、解碼後的像素、產生的文字,或是原始檔名上傳到任何地方。解碼會優先使用瀏覽器提供的 createImageBitmap,而該 ImageBitmap 會在取代、過期的完成事件、或元件卸載時被關閉;若瀏覽器不支援,則會透過一個短暫的本機 Object URL 載入檔案,無論解碼成功或失敗,該 URL 都會立刻被撤銷。

TXT 下載檔是在瀏覽器分頁中建立的 Blob,透過 Object URL 對外提供,而這個 Object URL 本身會在結果變更或頁面卸載時被撤銷。寫入剪貼簿的動作受到世代計數器和掛載狀態檢查的保護,因此即使你已經變更了寬度或來源影像,較舊的複製動作也不會彈出過期的「已複製」提示。在 Android 上,這代表離開裝置的唯一東西,只有你親自按下對應按鈕所複製的片段或下載的檔案。

在 Android 螢幕上顯示 ASCII 輸出

ASCII 藝術一旦進入剪貼簿或存成 TXT 檔,實際的呈現方式就會取決於你貼上或開啟它的 app。等寬字型(例如系統等寬字型、Termux 或程式碼編輯器 app)能保留列數計算所依據的欄位對齊。變寬字型則會壓縮或拉長每一列,破壞長寬比,因此在重視視覺還原度的場合應該避免使用。

縮放等級、行高與字距都會改變結果的視覺高度。列數公式中的 0.5 校正只是典型 Android 字型中等寬字元格的實務近似值,而不是針對你特定檢視器的精確測量。如果你希望下載的成果與預覽時所見一致,請在具備緊湊行高的等寬字型 app 中開啟該 TXT。先透過 Android 瀏覽器上的黑白照片轉換器 對影像進行前處理,通常可以產生更乾淨的 ASCII 表格,因為亮度遞增表只會看到單一通道,而不是三個互相競爭的色相。如果你只在意底層的字元表格,那來源影像本身仍是保真度更高的紀錄,因為 TXT 保留了亮度和遞增表索引,但會捨棄顏色、透明、動畫與中繼資料。

這個工具不會做的事

有必要把範圍講清楚。所謂的轉換,是對縮放後的像素資料進行「亮度對字元」的對應,而不是光學字元辨識。它不會辨識照片中剛好出現的文字、不會為影像產生說明,也不會擷取任何文字圖層或中繼資料。下載的 TXT 檔只包含 ASCII 字元與換行分隔符。顏色、透明、動畫時序、EXIF 資料、嵌入的 ICC 設定檔,以及原始的壓縮影像都不會被保留。

這也意味著,與其把結果視為影像的忠實拷貝,不如把它想成是一種風格化的預覽。如果你需要保存用的完整檔案,請保留原始照片。ASCII 輸出適合用於在純文字中分享、在終端機列印、嵌入到程式碼註解中,或在不方便使用完整影像時作為快速的視覺參考。