プレーンテキスト ファイルがある場合、コマンド ラインを使用してそれを画像ファイルに変換するにはどうすればよいでしょうか (ASCII アートのレイアウトを保持したまま)
答え1
imagemagick
はここであなたの友達です。次のようなものが役立つかもしれません:-
convert -size 360x360 xc:white -font "FreeMono" -pointsize 12 -fill black -draw @ascii.txt image.png
ascii.txt
ASCII アート ファイルはどこにありますか:-
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 の演算子は、入力ファイルの変更を必要としないという単純な理由で、garethTheRed が提案した方法-annotate
よりも少し便利だと思います。 ほど強力ではありませんが、テキスト ファイルの内容を画像に丸ごとダンプするには十分です。-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
。
引数の指定
FreeMono が利用できない場合 (または単に不要である場合)、 の引数-font
には、サポートされている任意のフォント名を指定できます。 演算子を使用して、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 は読み込み時にオフセットを適用するかどうかを尋ねるダイアログ ボックスを表示します。
(明らかに、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 列の幅に再フォーマットします。(URL のように 75 文字を超える長い連続文字列がある場合は、その文字列は拡張されます。)
テキストが再フォーマットされるとfmt
、 に渡され、ファイルを直接読み込んだ場合と同じように、convert
パイプ出力がレンダリングされます。( のファイル名を指定することは、「任意の名前付きディスク ファイルではなく標準入力から読み取る」という、かなり一般的な UNIX シェルの省略形であり、ImageMagick のツールはこの規則に従います。)fmt
-
答え3
それには openoffice (libreoffice) を使うことができます。
soffice --convert-to jpg "Textfile.doc"
テキストファイルでも動作します。