【Linux】コマンドラインで画像を生成する

※ この記事は 2022年6月 に作成したものを一部改稿したものです。

本記事のテーマは **画像生成** です。

特にWeb系の開発をされている方の中には、ページ上にサンプルとして表示する画像が欲しくなったり、決められたサイズの画像を用意する必要に迫られたりしたことのある方が多いのではないでしょうか。

そんな時、Google で画像を検索してダウンロードしたり、MSペイントなどのツールで画像を作成することもできますが、コマンドラインで簡単に画像を生成できるととても便利です。

ここでは、コマンドラインで画像を生成できるツールをいくつか紹介したいと思います。

## ターミナル上に画像を表示する
せっかくコマンドラインで画像を生成できても、生成した画像を確認するためにいちいちビューアを起動するのはやや面倒です。
そこで、画像生成ツールの紹介に入る前に、ターミナル上に画像を表示する方法を紹介します。

ターミナル上に画像を表示する方式・ツールは色々ありますが、おすすめは **Sixel** です。
Sixel は Digital Equipment Corporation (DEC) によって導入されたプリンタおよび端末イメージング用の画像フォーマットの1つで、エスケープシーケンスを使用してデータを表現することからターミナルでの表示に適しています。

Sixel で画像を表示するためには、mintty や RLogin, xterm といった Sixel Graphics をサポートするターミナルを利用する必要があります。

https://github.com/saitoha/libsixel#terminal-requirements

WSL (Windows Subsystem for Linux) を使っている方には、WSL向けの mintty である [WSLtty](https://github.com/mintty/wsltty) がおすすめです。

画像を表示するには、`img2sixel` コマンドを使用します。
Ubuntu の場合、`apt` を使用してインストールできます。
```
$ sudo apt install libsixel-bin
```
パッケージマネージャーでインストールできない場合、ソースからビルドすることも可能です。

以下のようにファイルを指定するか、標準入力にデータを流し込むことでターミナル上に画像を表示できます。

![2024-04-07 23_43_07-WSL.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3765253/10a2a821-4df5-2aa8-7baf-b622acde0c90.png)

## 画像生成ツール
ここからは画像生成ツールを紹介していきます。

### ImageMagick
まずは **ImageMagick** です。
ImageMagick は画像を操作したり表示したりするためのソフトウェアで、多数のコマンドラインツールを含んでいます。
ファイル形式の変換やリサイズといった基本的な操作から、合成、変形、GIFアニメーションの作成など非常に多くの操作が可能で、ゼロから画像を生成することもできます。

Ubuntu の場合、`apt` を使用してインストールできます。
```
$ sudo apt install imagemagick
```
以下は画像生成の例です。

![2024-04-07 23_44_40-WSL.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3765253/4410a26e-157f-9268-7835-7cc2d220b382.png)

`convert` コマンドは ImageMagick で1番頻繁に使用するコマンドで、`-size` オプションでサイズを指定し、`xc:` で背景色を指定して画像を生成しています。

2色を重ね合わせた画像を生成するには、以下のように `-composite` オプションを使用して画像シーケンスを合成します。

![2024-04-07 23_46_28-WSL.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3765253/094278d6-84b9-5cbc-b2a4-2d9e4f6bc97d.png)

この例では `img2sixel` コマンドにパイプで渡すために、出力先に標準出力 (`-`) を指定しています。
ゼロから生成した画像を標準出力に出力する場合、ファイル形式が分からないため `png:-` のように指定する必要があります。

また、複数の画像からアニメーションGIFを生成することも可能です。

![imagemagick.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3765253/df3ba572-6e75-9674-143b-2ec02db5dea1.gif)

### Graphviz
続いて紹介するのは **Graphviz** です。
Graphviz はトランジスタの発明などで知られるAT&T研究所が開発したソフトウェアで、DOT 言語というデータ記述言語を用いてグラフを描画することができます。

Ubuntu の場合、`apt` を使用してインストールできます。
```
$ sudo apt install graphviz
```
以下は、簡単な DOT ファイルを作成しグラフ画像を生成した例です。

![2024-04-07 23_57_01-WSL.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3765253/d28d154f-67e9-8507-8a71-6a5b9054835d.png)

上の例では `dot` コマンドを使用してグラフを作成していますが、他にも作成されるグラフのレイアウトが異なる `neato` や `fdp` といったコマンドが使用できます。
以下の例では `sed` コマンドで FizzBuzz の結果から DOT 言語のスクリプトを組み立て、`fdp` コマンドを使用してグラフ化しています。

![2024-04-08 00_01_38-WSL.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3765253/5494cf84-c265-375e-b2e7-fb6e1f0646f2.png)

### gnuplot
続いて紹介するのは **gnuplot** です。
gnuplot はデータや数式からグラフを生成することができるソフトウェアで、学術研究でも広く利用されています。

Ubuntu の場合、`apt` を使用してインストールできます。
```
$ sudo apt install gnuplot
```
以下は、媒介変数表示を用いて半径1の円を描画した例です。

![2024-04-08 00_04_24-WSL.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3765253/3cc9733d-5f71-ebe0-7b12-9d6d3fe871e8.png)

gnuplot は対話的にコマンドを実行することもできますが、上の例ではコマンドを `circle.plt` というファイルに保存して引数として指定しています。

また、pm3d というスタイルを使用すると3次元のグラフを立体的に描画することができます。
以下の例では、ループ処理を利用して3次元グラフからアニメーションGIFを生成しています。

![gnuplot.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3765253/a9bc993e-d1ea-f5f0-01a5-2b9faece6b1d.gif)

### wordcloud
続いて紹介するのは **wordcloud** です。
wordcloud は Python 製のワードクラウド生成ツールで、Python のパッケージマネージャーである `pip` などを使用してインストールできます。
```
$ sudo apt install python3-pip
$ pip install wordcloud
```
wordcloud をインストールすると `wordcloud_cli` というコマンドが使用できるようになります。
以下は、wordcloud の [README](https://raw.githubusercontent.com/amueller/word_cloud/master/README.md) からワードクラウド画像を生成する例です。

![2024-04-08 00_10_59-WSL.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3765253/fff23bd1-9adb-d0ae-98e9-cf32efaacf2c.png)

### qrencode
続いて紹介するのは **qrencode** です。
qrencode は、任意の文字列からQRコード画像を生成できるユーティリティツールです。

Ubuntu の場合、`apt` を使用してインストールできます。
```
$ sudo apt install qrencode
```
以下は、[Qiita のトップページ](https://qiita.com/) のURLからQRコード画像を生成する例です。

![2024-04-08 00_12_26-WSL.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3765253/f680dd0e-1d61-35e1-317a-94101a516369.png)

### textimg
最後に紹介するのは **textimg** です。
Go 製のコマンドラインツールで、ターミナル上の色付きのテキストを画像に変換することができます。

Go がインストールされている場合、以下のコマンドでインストールできます。
```
$ go get -u github.com/jiro4989/textimg/v3
```
以下は、ANSIエスケープシーケンスを使用して出力した256色の背景色付きテキストを画像に変換する例です。

![2024-04-08 00_16_00-WSL.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3765253/58840e76-6e06-6114-34cc-1f412a7cd80a.png)