プレーンテキストファイルがある場合は、コマンドラインでどのように画像ファイルに変換しますか? (そして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アートの一部として使用しないでください。
選択したフォントは固定幅フォントでなければなりません。それ以外の場合、テキストはソートされません。
これは以下を生成します。
答え2
入力ファイルを変更する必要がないという単純な理由から、ImageMagickの-annotate
演算子はgarethTheRedが提案した方法よりも便利であると思います。-draw
強力ではありませんが、-draw
テキストファイルの内容をイメージに一括ダンプするのは問題ありません。
convert -size 360x360 xc:white -font "FreeMono" -pointsize 12 -fill black \
-annotate +15+15 "@ascii.txt" image.png
指定されたファイルの内容のレンダリングされたバージョンを出力しますが、基本要素text 15x15
の一部を含むように "ascii.txt"ファイルを変更しません-draw
。
パラメータの指定
-font
FreeMonoが利用できない場合、またはまったく必要ない場合、パラメータはサポートされているフォント名になることがあります。演算子を使用すると、ImageMagickコマンドで使用できるフォントのリストを取得できるため、すべての可能な引数が-list
表示convert -list font
されます-font
。
-annotate
(レンダリングされたテキストがキャンバスの端から移動する距離)パラメータは、それぞれ水平ピクセルと垂直ピクセルオフセットで構成されています。最初のオフセット(水平xオフセット)は正の整数にすることができますが、数ピクセルを超える必要はありません。 2番目のオフセット(垂直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がロード時にオフセットを適用する必要があるかどうかを尋ねるダイアログボックスが表示されます。
convert
(明らかに1000x2000は、小さなテキストファイルの場合は大きすぎて長いテキストファイルの場合は少なくとも縦サイズを増やす必要があるかもしれません。
入力前処理
テキストファイルがレンダリングに必要な方法でまだフォーマットされていない場合(たとえば、非常に長い行を使用している場合)、ImageMagickに渡す前にこれを行う必要がありますconvert
。テキストは全長に拡張されます。幸い、必要なコマンドラインフォーマッタを介してファイルを実行し、ファイル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圧縮コンテンツがレンダリングされます。後ろにfmt
これは、デフォルトの動作モードで自動単語改行を使用して入力形式を75列の幅に変更するコマンドによって処理されました。 (ただし、URLのように75文字を超える長い連続文字列がある場合は拡張されます。)
テキスト形式が再指定されると、ファイルから直接読み取ったかのようにレンダリングパイプライン出力fmt
に渡されます。 (ファイル名を指定するのは、「名前付きディスクファイルではなく標準入力から読み取る」という非常に一般的なUNIXシェルの略語であり、ImageMagickのツールはこの規則に従います。)convert
fmt
-
答え3
これにはオープンオフィスを使用できます。
soffice --convert-to jpg "Textfile.doc"
テキストファイルでも機能します。