プレーンテキストファイルがある場合、コマンドラインから画像ファイルに変換するにはどうすればよいですか?(ASCIIアートのレイアウトを保持します)
cat
でスクリーンショットを撮らないのですか?
clear && cat file
。しかし、はい、それはいです。
プレーンテキストファイルがある場合、コマンドラインから画像ファイルに変換するにはどうすればよいですか?(ASCIIアートのレイアウトを保持します)
cat
でスクリーンショットを撮らないのですか?
clear && cat file
。しかし、はい、それはいです。
回答:
それにはopenoffice(libreoffice)を使用できます。
soffice --convert-to jpg "Textfile.doc"
テキストファイルでも機能します。
--help
出力にこれに関する言及やヒントさえないことは助けになりません。)テキストがページよりも長い場合は、しわだけで、最初のページしか表示されないように見えます。(他のページや複数のファイルを出力するように指示する方法があれば、それはすぐにはわかりません。パスし--outdir
ても違いはありません。)しかし、短いテキストの場合、それは非常にうまく機能し、自動折り返しさえします。いいね!
soffice --convert-to jpg ascii.txt && mogrify -trim -bordercolor "#FFF" -border 10 +repage ascii.jpg
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オフセット位置です)。また、変換される実際のテキストが引用符で囲まれていることを確認してください。一重引用符でも二重引用符でもかまいませんが、問題を混乱させるため、それらがアスキーアートの一部として使用されないようにしてください。
選択するフォントは等幅フォントである必要があります。そうしないと、テキストが整列しません。
これにより、以下が生成されます。
-list
オプションを使用して、ImageMagickコマンド(変換を含む)から現在利用可能なフォントのリストを取得できます。したがって、たとえばconvert -list font
、可能な引数のすべてを表示します-font
。
sudo yum install ImageMagick
ます。
sudo dnf install ImageMagick
であり、他のほとんどの一般的なLinuxディストリビューションでは、いくつかのsudo apt-get install ...
コマンドになります。とにかく、上記の情報は確かに問題のシステムにImageMagickがインストールされていると仮定しています。
ImageMagickの-annotate
演算子-draw
は、入力ファイルの変更を必要としないという単純な理由から、garethTheRedが提案した方法よりも少し便利だと思います。これはほど強力ではありません-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シフト)は任意の正の整数にすることができますが、数ピクセルより大きくする必要はありません。第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
最後には、GIMPは、それがオフセットを適用すべきかどうかを尋ねる負荷のダイアログがポップアップするでしょうそうでない原因の画像オフセットで作成された出力PNGを防止します。
(明らかに、小さなテキストファイルでは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 のコンテンツをレンダリングします。コマンドのデフォルトモードでは、ワードラッピングによって入力を75カラムの幅に再フォーマットします。(URLのように75文字を超える長い連続した文字列がない場合、その場合は文字列が拡張されます。)fmt
一度fmt
テキストを再フォーマットしている、ために渡されますconvert
その後、パイプで連結されたレンダリングれるfmt
ことが直接ファイルを読んでいたかのように同じ出力を、。(ファイル名を指定すること-
は、「名前付きディスクファイルの代わりに標準入力から読み取る」ためのかなり一般的なUNIXシェルの省略形であり、ImageMagickのツールはその規則に従います。)
annotate
引数のyコンポーネントは、 すべてが表示されるようにポイントサイズよりも大きくする必要があります。希望のサイズはconvert -size 1000x2000 xc:white -font "FreeMono" -pointsize 123 -fill black \ -annotate +0+123 "@ascii.txt" -trim -bordercolor "#FFF" -border 10 +repage image.png
どこにありますか123
。また、convert -list font
どのフォントがサポートされているかを調べるために使用できます("FreeMono"
普遍的にサポートされていません)。
convert -list font
は正しい構文であり、ではありませんconvert -list fonts
。
/etc/ImageMagick-7/policy.txt
、これらの変換フォームのいずれかを妨げるポリシーが設定されていません。変換をブロックしているポリシーと、それが設定されている理由を知っていますか?(また、ストローで把握することは:パイプで連結されていfmt ...
?もしそうなら、あなただけ置き換えることができ、万が一、コマンドの仕事の形をfmt
してcat
、そして同じ結果を得る@ascii.txt
。バージョン)
convert
成功するということですか?それが当てはまる場合、それはかなり奇妙です。なぜなら、インポートされたテキストファイルのコンテンツを処理するときに、セキュリティの懸念が適用されないことを想像するのが難しいからです。-draw
ascii.txt
-annotate
-draw
/etc/ImageMagick-6/policy.xml
が含む<policy domain="path" rights="none" pattern="@*"/>
ので、私はそれが1つだと推測しています。stdinも機能しません。おそらく@-
パターンも含まれているためです。必死の人にとっては、"$(cat ascii.txt)"
CLIの長さが伸びない場合に機能します。