ぬのシェル芸

# ぬのシェル芸とは？
こういう画像を生成するシェル芸です。
タイトルは変更するかも。
![x.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/143996/c18e2b9d-06ee-289c-9d4c-cb2ff62dd2e8.png)
# 前提条件
imagemagickとtextimgがインストールされていること。
# コマンド
```bash
$ c=-composite;textimg ぬ -F100|convert -compose add -size 160x160 xc:black \( - -trim -scale 100x60! \) $c \( +clone -rotate 90 -roll +0-20 \) $c \( +clone -rotate 180 -roll +20-20 \) $c -define distort:viewport=800x800 -virtual-pixel tile -distort srt 0 /images/x.png
```
これで /images/x.png に画像が保存されます。
# コマンドができるまで
textimgコマンドでぬの画像を作ります。

```bash
$ textimg ぬ -F100 -o/images/0.png
```
![0.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/143996/f66cd986-2acf-3118-2ab4-dd2f3445bd23.png)
imagemagickに渡して縦横比を変えます。

```bash
$ textimg ぬ -F100|convert - -trim -scale 100x60! /images/1.png
```
![x.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/143996/5e3610a2-5f54-f284-0acf-61a13c0e1031.png)
画像周縁部の黒い余白を -trim で除去して、 -scale で画像サイズを変更しています。

完成画像は160X160のタイルを単位として繰り返したものになります。
タイルを赤く縁取るとこんなかんじ。
![z.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/143996/811c8bc8-3d42-b719-4408-bdf2173e30b1.png)
なので、タイルを作っていきます。タイルの背景を用意して、そこにぬを乗せます。

```bash
$ textimg ぬ -F100|convert -size 160x160 xc:black \( - -trim -scale 100x60! \) -composite /images/2.png
```
![2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/143996/9f0a890e-a009-1f1f-8660-07587ed3a8a2.png)
タイルに2個めのぬを乗せます。

```bash
$ textimg ぬ -F100|convert -compose add -size 160x160 xc:black \( - -trim -scale 100x60! \) -composite \( +clone -rotate 90 -roll +0-20 \) -composite /images/3.png
```
![3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/143996/076edc9d-d432-8b92-58d6-f1e80a2e0d94.png)
+clone で画像を複製して、 -rotate で回転、 -roll で二つのぬの中心高さを揃えて、 -composite で重ねています。
同じ要領で3,4個めのぬを乗せます。

```bash
$ textimg ぬ -F100|convert -compose add -size 160x160 xc:black \( - -trim -scale 100x60! \) -composite \( +clone -rotate 90 -roll +0-20 \) -composite \( +clone -rotate 180 -roll +20-20 \) -composite /images/4.png
```
![4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/143996/797ffbc2-13d4-5e68-615e-0715573b51a1.png)
これをタイルとして繰り返します。

```bash
$ textimg ぬ -F100|convert -compose add -size 160x160 xc:black \( - -trim -scale 100x60! \) -composite \( +clone -rotate 90 -roll +0-20 \) -composite \( +clone -rotate 180 -roll +20-20 \) -composite -define distort:viewport=800x800 -virtual-pixel tile -distort srt 0 /images/5.png
```
![5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/143996/4124b038-5eda-30bd-381a-d6ac9848b7c1.png)
画像としてはこれで完成ですが、すこし縮めるとシェル芸botに1ツイートで投げられるので、 -composite を変数に入れて縮めます。

```bash
$ c=-composite;textimg ぬ -F100|convert -compose add -size 160x160 xc:black \( - -trim -scale 100x60! \) $c \( +clone -rotate 90 -roll +0-20 \) $c \( +clone -rotate 180 -roll +20-20 \) $c -define distort:viewport=800x800 -virtual-pixel tile -distort srt 0 /images/x.png
```
これで完成とします。
↓シェル芸botでの実行結果。
<blockquote class="twitter-tweet"><p lang="und" dir="ltr"><a href="https://t.co/sSWGuU5XGC">https://t.co/sSWGuU5XGC</a> <a href="https://t.co/VuSKfPG1jZ">pic.twitter.com/VuSKfPG1jZ</a></p>&mdash; シェル芸bot (@minyoruminyon) <a href="https://twitter.com/minyoruminyon/status/1197086703007092736?ref_src=twsrc%5Etfw">November 20, 2019</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
# ぬ以外
ぬを他の文字に変えても面白い画像ができます。
炎

```bash
$ textimg 炎 -F100|convert -compose add -size 160x160 xc:black \( - -trim -scale 100x60! \) -composite \( +clone -rotate 90 -roll +0-20 \) -composite \( +clone -rotate 180 -roll +20-20 \) -composite -define distort:viewport=800x800 -virtual-pixel tile -distort srt 0 /images/炎.png
```
![炎.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/143996/be724e86-0a74-91ea-3ef4-9e90dd38828b.png)
💩

```bash
$ echo -e "\n💩 "|textimg -F100|convert -compose add -size 160x160 xc:black \( - -trim -scale 100x60! \) -composite \( +clone -rotate 90 -roll +0-20 \) -composite \( +clone -rotate 180 -roll +20-20 \) -composite -define distort:viewport=800x800 -virtual-pixel tile -distort srt 0 /images/💩.png
```
![💩.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/143996/ef95e929-1048-f05f-4ba3-c95dc5b5f4cc.png)

# 潰さなくてもいいかも
100x60の長方形に潰してますけど、字によっては正方形でもいいかも

```bash
$ textimg -F100 肉|convert - -trim -scale 100x100! \( +clone -rotate 90 \) +append \( +clone -rotate 180 \) -append -write mpr:a +delete -size 1000x1000 tile:mpr:a /images/肉.png
```
![肉.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/143996/afc6892e-51e9-720c-e20f-ff29089803c4.png)

# 所感
街でCOACHのバッグを見て、「あれ、imagemagickでできませんか？」と脳内のimagemagickおじさんが言ってきたので、いじっているうちにこういう結果になりました。
https://japan.coach.com/goods/78487?color=B4NQ4&DISP_NO=005001003003
COACHとは字の並べ方が微妙に違うんですけど、これはこれで面白いのでよしとしました。
これ「こういう画像作りたいなー」って思った人がいても、検索でこのページ見つけるの難しそう。