如何將文字檔轉換為圖片

如何將文字檔轉換為圖片

如果我有一個純文字文件,如何透過命令列將其轉換為圖像文件? (並保留其中 ASCII 藝術的佈局)

答案1

imagemagick是你的朋友嗎?類似於以下內容可能會對您有所幫助:-

convert -size 360x360 xc:white -font "FreeMono" -pointsize 12 -fill black -draw @ascii.txt image.png

ascii.txt你的 ascii-art 檔案在哪裡:-

text 15,15 "                 .88888888:. 
                88888888.88888. 
              .8888888888888888. 
              888888888888888888 
              88' _`88'_  `88888 
              88 88 88 88  88888 
              88_88_::_88_:88888 
              88:::,::,:::::8888 
              88`:::::::::'`8888 
             .88  `::::'    8:88. 
            8888            `8:888. 
          .8888'             `888888. 
          .8888:..  .::.  ...:'8888888:. 
        .8888.'     :'     `'::`88:88888 
       .8888        '         `.888:8888. 
      888:8         .           888:88888 
    .888:88        .:           888:88888: 
    8888888.       ::           88:888888 
    `.::.888.      ::          .88888888 
   .::::::.888.    ::         :::`8888'.:. 
  ::::::::::.888   '         .:::::::::::: 
  ::::::::::::.8    '      .:8::::::::::::. 
 .::::::::::::::.        .:888::::::::::::: 
 :::::::::::::::88:.__..:88888:::::::::::' 
  `'.:::::::::::88888888888.88:::::::::' 
        `':::_:' -- '' -'-' `':_::::'`  
    "

新增text 15,15為文字的第一行(15,15 是位置偏移)。另外,請確保要轉換的實際文字用引號引起來。單引號或雙引號都可以,但請確保它們不會用作您的 ascii-art 的一部分,因為它會造成混亂。

您選擇的字體應該是等寬字體,否則文字將無法對齊。

這會產生:-

在此輸入影像描述

答案2

我發現 ImageMagick 的-annotate運算子比 garethTheRed 建議的方法更方便-draw,原因很簡單,它不需要修改輸入檔。它不像 那樣強大-draw,但對於將文字檔案的內容批量轉儲到圖像中來說,它就可以了。

convert -size 360x360 xc:white -font "FreeMono" -pointsize 12 -fill black \
-annotate +15+15 "@ascii.txt" image.png

將輸出給定檔案內容的渲染版本,但無需修改「ascii.txt」檔案以包含基元text 15x15的部分-draw

指定參數

-font如果 FreeMono 不可用(或根本不需要),參數可以是任何受支援的字體名稱。可以使用運算子取得任何 ImageMagick 指令可用的字型列表-list,因此convert -list font將顯示 的所有可能參數-font

-annotate(渲染文字從畫布邊緣移動多遠)的參數分別由水平和垂直像素偏移組成。第一個偏移(水平 x 偏移)可以是任何正整數,但不必大於幾個像素。第二個偏移(垂直 y 偏移)必須至少等於所選字體的點大小( 的參數-pointsize),因為 ImageMagick 將放置基線給定偏移處的字體。因此,如果您不將字體向下移動至少pointsize像素,則第一行的頂部將被切斷。

我建議至少增加幾個像素,所以如果您正在使用,-pointsize 64那麼您應該將其與類似-annotate +15+80. (沒有理由用較大的字體大小來增加水平偏移,它與文字尺寸沒有關係。)

需要猜測輸出影像的必要尺寸也可能很乏味。我通常只是選擇過多的值,然後利用 ImageMagick-trim-border自動裁剪結果。以下命令:

convert -size 1000x2000 xc:white -font "FreeMono" -pointsize 12 -fill black \
-annotate +15+15 "@ascii.txt" -trim -bordercolor "#FFF" -border 10 +repage image.png

將渲染成 1000x2000 的盒子,然後修剪掉文字周圍除了 10 像素邊框之外的多餘空白。最後+repage防止使用影像偏移建立輸出 PNG,否則會導致 GIMP 在載入時彈出一個對話框,詢問是否應該套用偏移。

(顯然,1000x2000 對於小文本文件來說太大了,對於較長的文本文件,至少可能需要增加垂直尺寸。不過,高估更容易,因為唯一的成本是convert在處理時消耗稍多的CPU 和內存。

預處理輸入

如果您的文字檔案尚未按照渲染所需的方式進行格式化(例如,如果它使用很長的行),那麼您可能需要在將其傳遞給convert. ImageMagick 不會自動換行文本,因此每行文本都會水平延伸其完整長度。幸運的是,可以透過您想要的任何命令列格式化程式運行該文件,然後將處理後的文字透過管道傳輸到其中,convert而不是直接從文件中讀取:

fmt < ascii.txt | convert -size 1000x2000 xc:white -font "DejaVu-Sans-Condensed" \
-pointsize 24 -fill black -annotate +15+30 "@-" -trim -bordercolor "#FFF" \
-border 10 +repage image.png

ascii.txt這將渲染24 點 DejaVu Sans Condensed的內容,它已由該fmt命令處理,該命令在預設操作模式下將透過自動換行將其輸入重新格式化為 75 列的寬度。 (除非有超過 75 個字元的長連續字串,例如 URL,在這種情況下它們會擴展。)

一旦fmt重新格式化文本,它將被傳遞到convert渲染管道fmt輸出,就像直接讀取文件一樣。 (指定檔案名稱-是相當常見的 UNIX shell 簡稱,表示“從標準輸入讀取,而不是任何命名的磁碟檔案”,ImageMagick 的工具遵循該約定。)

答案3

您可以使用 openoffice (libreoffice) 來完成此操作。

soffice --convert-to jpg "Textfile.doc"

它也適用於文字檔案。

答案4

一個簡單的解決方案是使用pango-view提供的潘戈,您可能已經安裝了 GTK 中使用的文字渲染庫:

pango-view --font=mono -qo image.png file

您可以創建SVG也!

pango-view --font=mono -qo image.svg file

pango-view有許多自訂和佈局選項,請參閱其手冊頁。

相關內容