テキストファイルを画像に変換する方法


17

プレーンテキストファイルがある場合、コマンドラインから画像ファイルに変換するにはどうすればよいですか?(ASCIIアートのレイアウトを保持します)


私は等幅フォントでテキストをレンダリングするために自動的な方法を探し始めるだろう(GIMPやLaTeXのは、移動するための方法かもしれません)
RSFalcon7

これはい解決策ですが、なぜそれだけcatでスクリーンショットを撮らないのですか?
プシモン14年

それはあまりにもく、スクリーンショットにはプロンプトのような追加情報が含まれます。
QuoraのFeans

プロンプトだけが問題である場合、これを試してください:clear && cat file。しかし、はい、それはいです。
プシモン14年

いいえ、それでもユーザー名が表示されます...そして、コマンドラインからスクリーンショットを作成する方法を見つけない限り、それは受け入れられません。
Quora Feans 14年

回答:


8

それにはopenoffice(libreoffice)を使用できます。

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

テキストファイルでも機能します。


すごいです!OpenOfficeがJPG ...またはPNGに変換できるとは思っていませんでした。おそらく他の形式も同様です。(--help出力にこれに関する言及やヒントさえないことは助けになりません。)テキストがページよりも長い場合は、しわだけで、最初のページしか表示されないように見えます。(他のページや複数のファイルを出力するように指示する方法があれば、それはすぐにはわかりません。パスし--outdirても違いはありません。)しかし、短いテキストの場合、それは非常にうまく機能し、自動折り返しさえします。いいね!
FeRD

これにより、テキストが小さい場合、潜在的に小さなテキストを含む固定サイズのページが作成されます。
Ciro Santilli新疆改造中心法轮功六四事件

1
@CiroSantilli新疆改造中心法轮功六四事件固定サイズのページ、真、それはImageMagickの自動トリミングが再び便利になるの:soffice --convert-to jpg ascii.txt && mogrify -trim -bordercolor "#FFF" -border 10 +repage ascii.jpg
FeRD

26

imagemagickあなたの友達です。次のような何かがあなたを助けるかもしれません:-

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

ascii.txtascii-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オフセット位置です)。また、変換される実際のテキストが引用符で囲まれていることを確認してください。一重引用符でも二重引用符でもかまいませんが、問題を混乱させるため、それらがアスキーアートの一部として使用されないようにしてください。

選択するフォントは等幅フォントである必要があります。そうしないと、テキストが整列しません。

これにより、以下が生成されます。

ここに画像の説明を入力してください


有効なフォント名のリストを取得する方法についてのヒントはありますか?Free Monoはシステムにインストールされているようですが、imagemagickはそれを認識しません。
ラファエル

1
@Raphael:-listオプションを使用して、ImageMagickコマンド(変換を含む)から現在利用可能なフォントのリストを取得できます。したがって、たとえばconvert -list font、可能な引数のすべてを表示します-font
FeRD

を使用してこのプログラムをインストールすることもでき sudo yum install ImageMagickます。
ランジマン

@ R.Ketkaewこのコマンドは、Fedora 21以前またはRHELの一部のリビジョン(最新版がまだyumを使用しているかどうかさえわからない)を実行している人に有効です。Fedora 22以降では、インストールコマンドはsudo dnf install ImageMagickであり、他のほとんどの一般的なLinuxディストリビューションでは、いくつかのsudo apt-get install ...コマンドになります。とにかく、上記の情報は確かに問題のシステムにImageMagickがインストールされていると仮定しています。
FeRD

18

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プリミティブの。

引数を指定する

-fontFreeMonoを使用できない場合(または単に望ましくない場合)は、サポートされている任意のフォント名を引数に指定できます。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のツールはその規則に従います。)


1
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"普遍的にサポートされていません)。
アレックジェイコブソン

1
修正:convert -list fontは正しい構文であり、ではありませんconvert -list fonts
ソパラホデアリエレス

1
@CiroSantilli新疆改造中心法轮功六四事件うーん、いい質問です。私のIM7インストールには/etc/ImageMagick-7/policy.txt、これらの変換フォームのいずれかを妨げるポリシーが設定されていません。変換をブロックしているポリシーと、それが設定されている理由を知っていますか?(また、ストローで把握することは:パイプで連結されていfmt ...?もしそうなら、あなただけ置き換えることができ、万が一、コマンドの仕事の形をfmtしてcat、そして同じ結果を得る@ascii.txt。バージョン)
FeRD

1
@CiroSantilli新疆改造中心法轮功六四事件ああ、もう1つ質問があります。「failいメタデータのないタキシードで失敗しました」と指定しました。それは、@ garethTheRedのフォームを使用して位置決めコマンドをファイルに挿入するとconvert 成功するということですか?それが当てはまる場合、それはかなり奇妙です。なぜなら、インポートされたテキストファイルのコンテンツを処理するときに、セキュリティの懸念が適用されないことを想像するのが難しいからです。-drawascii.txt-annotate-draw
FeRD

1
メタデータがいので、私はGarethの答えさえ試していませんでしたが、今ではうまくいきました。私/etc/ImageMagick-6/policy.xmlが含む<policy domain="path" rights="none" pattern="@*"/>ので、私はそれが1つだと推測しています。stdinも機能しません。おそらく@-パターンも含まれているためです。必死の人にとっては、"$(cat ascii.txt)"CLIの長さが伸びない場合に機能します。
Ciro Santilli新疆改造中心法轮功六四事件
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.