※ この記事は 2022年6月 に作成したものを一部改稿したものです。
本記事のテーマは 画像生成 です。
特にWeb系の開発をされている方の中には、ページ上にサンプルとして表示する画像が欲しくなったり、決められたサイズの画像を用意する必要に迫られたりしたことのある方が多いのではないでしょうか。
そんな時、Google で画像を検索してダウンロードしたり、MSペイントなどのツールで画像を作成することもできますが、コマンドラインで簡単に画像を生成できるととても便利です。
ここでは、コマンドラインで画像を生成できるツールをいくつか紹介したいと思います。
ターミナル上に画像を表示する
せっかくコマンドラインで画像を生成できても、生成した画像を確認するためにいちいちビューアを起動するのはやや面倒です。
そこで、画像生成ツールの紹介に入る前に、ターミナル上に画像を表示する方法を紹介します。
ターミナル上に画像を表示する方式・ツールは色々ありますが、おすすめは Sixel です。
Sixel は Digital Equipment Corporation (DEC) によって導入されたプリンタおよび端末イメージング用の画像フォーマットの1つで、エスケープシーケンスを使用してデータを表現することからターミナルでの表示に適しています。
Sixel で画像を表示するためには、mintty や RLogin, xterm といった Sixel Graphics をサポートするターミナルを利用する必要があります。
WSL (Windows Subsystem for Linux) を使っている方には、WSL向けの mintty である WSLtty がおすすめです。
画像を表示するには、img2sixel
コマンドを使用します。
Ubuntu の場合、apt
を使用してインストールできます。
$ sudo apt install libsixel-bin
パッケージマネージャーでインストールできない場合、ソースからビルドすることも可能です。
以下のようにファイルを指定するか、標準入力にデータを流し込むことでターミナル上に画像を表示できます。
画像生成ツール
ここからは画像生成ツールを紹介していきます。
ImageMagick
まずは ImageMagick です。
ImageMagick は画像を操作したり表示したりするためのソフトウェアで、多数のコマンドラインツールを含んでいます。
ファイル形式の変換やリサイズといった基本的な操作から、合成、変形、GIFアニメーションの作成など非常に多くの操作が可能で、ゼロから画像を生成することもできます。
Ubuntu の場合、apt
を使用してインストールできます。
$ sudo apt install imagemagick
以下は画像生成の例です。
convert
コマンドは ImageMagick で1番頻繁に使用するコマンドで、-size
オプションでサイズを指定し、xc:
で背景色を指定して画像を生成しています。
2色を重ね合わせた画像を生成するには、以下のように -composite
オプションを使用して画像シーケンスを合成します。
この例では img2sixel
コマンドにパイプで渡すために、出力先に標準出力 (-
) を指定しています。
ゼロから生成した画像を標準出力に出力する場合、ファイル形式が分からないため png:-
のように指定する必要があります。
また、複数の画像からアニメーションGIFを生成することも可能です。
Graphviz
続いて紹介するのは Graphviz です。
Graphviz はトランジスタの発明などで知られるAT&T研究所が開発したソフトウェアで、DOT 言語というデータ記述言語を用いてグラフを描画することができます。
Ubuntu の場合、apt
を使用してインストールできます。
$ sudo apt install graphviz
以下は、簡単な DOT ファイルを作成しグラフ画像を生成した例です。
上の例では dot
コマンドを使用してグラフを作成していますが、他にも作成されるグラフのレイアウトが異なる neato
や fdp
といったコマンドが使用できます。
以下の例では sed
コマンドで FizzBuzz の結果から DOT 言語のスクリプトを組み立て、fdp
コマンドを使用してグラフ化しています。
gnuplot
続いて紹介するのは gnuplot です。
gnuplot はデータや数式からグラフを生成することができるソフトウェアで、学術研究でも広く利用されています。
Ubuntu の場合、apt
を使用してインストールできます。
$ sudo apt install gnuplot
以下は、媒介変数表示を用いて半径1の円を描画した例です。
gnuplot は対話的にコマンドを実行することもできますが、上の例ではコマンドを circle.plt
というファイルに保存して引数として指定しています。
また、pm3d というスタイルを使用すると3次元のグラフを立体的に描画することができます。
以下の例では、ループ処理を利用して3次元グラフからアニメーションGIFを生成しています。
wordcloud
続いて紹介するのは wordcloud です。
wordcloud は Python 製のワードクラウド生成ツールで、Python のパッケージマネージャーである pip
などを使用してインストールできます。
$ sudo apt install python3-pip
$ pip install wordcloud
wordcloud をインストールすると wordcloud_cli
というコマンドが使用できるようになります。
以下は、wordcloud の README からワードクラウド画像を生成する例です。
qrencode
続いて紹介するのは qrencode です。
qrencode は、任意の文字列からQRコード画像を生成できるユーティリティツールです。
Ubuntu の場合、apt
を使用してインストールできます。
$ sudo apt install qrencode
以下は、Qiita のトップページ のURLからQRコード画像を生成する例です。
textimg
最後に紹介するのは textimg です。
Go 製のコマンドラインツールで、ターミナル上の色付きのテキストを画像に変換することができます。
Go がインストールされている場合、以下のコマンドでインストールできます。
$ go get -u github.com/jiro4989/textimg/v3
以下は、ANSIエスケープシーケンスを使用して出力した256色の背景色付きテキストを画像に変換する例です。