【チャレンジ精神】シェルプログラミング実用テクニックを(一部だけ)やってみる | 一人男子会

一人男子会

何となく思った事を書いていきます。(ピグ関連含む)

# 結果

 

 

これ作った

 

# 導入

 

ついこの間シェル芸勉強会に行ってきた。

実際に行ってみる前までは「なんかすごいエンジニアがしのぎを削る集まり」

みたいなイメージだったけど、実際行ったら違った。

良い意味で「楽しんで行こう」みたいな集まりだった。

 

シェルって何?みたいな感じでも入っていけるので、

とりあえず世界広げる意味でも行ってみるといいと思う。

 

そんなシェル芸勉強会でおススメされたのが、

シェルプログラミング実用テクニック

 

実際に買って読んでみたのだが、大変良いもの。

初心者向けの内容から始まって、

懇切丁寧に幅広く書いてある。

楽しみながら学ぶのにも丁度良いと思う。

 

# 本題

 

この中で「シェルで画像合成をやってみる」ってのがあった。

これやってみたい。

ちなみにbash on windowsなので、windowsユーザでも行けるハズ。

本のない内容をそのままやってしまうと、本書いてる人に申し訳ないので自分流にアレンジしてやる。

 

# 準備

 

やる事は下記ソフトのインストール

 

 + ImageMagick

 + python2.x

 + Open usp tukubai

 

まずはImageMagickをインストール

 

```bash

apt-get update

apt-get -y install imagemagick

```

 

早速ヘルプを

 

```bash

imagemagick --help

```

でると思った?残念。imagemagickというコマンドは存在しない。

imagemagickはconvertとidentifyという2つのコマンドで構成されている。

 

このconvert色々できる。

 

 + フォーマット変換

 + サイズ変換

 + 回転

 + GIFアニメ作成

 + あとなんか(知らない)

 

あとはシェル書く人から聞いたTukubaiを入れる。

ちなみにこのTukubaiはMITライセンスのOpen usp tukubaiと試用版のpersonal tukubai(商用使用不可)がある。

今回はOpen usp tukubaiを入れる。
 

尚、仕事でもバリバリシェルを使う方はこれを機にpersonal tukubaiを買ってもいいんじゃなかろうか。

6カ月使えるライセンスで2000円。一年で4000円だ。買わない手はない。

尚、商用不可なので実際に開発で利用する際はご注意を。

 

tukubaiはpython2.x系とかmakerとかが必要なので入れる
 

```bash

apt-get -y install python

apt-get -y install build-essential

# open usp tukubaiからcurlなりでdownloadして解凍

cd open....

make

make install

```

 

# 本処理

 

今回は画像の重ね合わせをやってみる。

 

これ(sample.jpg)に

 

これ(sample_override.jpg)を重ね合わせる

 

重ね合わせる時にいったんppm形式に変換する。

 

```bash

convert -compress none sample.jpg sample.ppm

convert -compress none sample_override.jpg sample_override.ppm

```

 

ppm形式をなかなか知らない方も多いと思う。

俺も知らなかったので、ppm形式の説明はこちら

 

今回はppm形式を下記の様なデータに変換する。

 

 + コメント削除

 + から行削除

 + 縦,横,RGBのフォーマットにする

 

変換を含めた合成が下記の通りになる。

 

```bash

#!/bin/bash

rm -f *.ppm

function createData() {
  TARGET="${1}"
  echo "create ppm file: ${TARGET}"
  convert -compress none "${TARGET}" "${TARGET}.ppm"
  cat "${TARGET}.ppm" | \
    sed 's/#j."$//' | \
    tr ' ' '\n' | \
    awk 'NF==1' | \
    awk 'NR==2{w=$1}NR>=5{printf("%d ", $1);if(NR%3==1){print w}}' | \
    awk '{n=NR-1;print int(n/$4),n%$4,$1,$2,$3}' | \
    awk '{print sprintf("%04d %04d",$1,$2),$3,$4,$5}' > "${TARGET}.data"
}

TARGETS=`cat << EOF
sample.jpg
sample_override.jpg
EOF
`
TARGETS=(${TARGETS})
for target in "${TARGETS[@]}" ; do
  createData "${target}"
done

loopj num=2 sample.jpg.data sample_override.jpg.data > ./tmp
cat tmp | 
  awk '{print $3*$6/255,$4*$7/255,$5*$8/255}' |
  sed 's/\.[0-9]*//g' > ./body
rm -f ./tmp
head -n 3 sample.jpg.ppm | cat - body > result.ppm
rm -f ./body 
convert -compress none ./result.ppm ./result.png
rm -f ./result.ppm

```

 

そのままは良くないとか言いながら、がっつり同じコードはいってる。。。

これはアレだな本に書いてあるコードが良すぎるんだ。

 

# 振り返り

 

シェルでも画像作ったりWebサービス作ったり色々やれる。

が、それは色々なコマンドとかオプションに精通しての話。

なので、色々やろうと思う方は、まず「シェル芸勉強会」に飛び込んでみてほしい。

 

ちなみに、福岡のシェル芸勉強会はお菓子食べながら回答読んでワイワイやってたよ。

 

あとは下記点位。

 

1.apt-get update忘れてて404ばっかりでた

2.ImageMagickは脆弱性多いって言われているらしい

3.ファイル消すのmktempとかtrapとかでやるんだろけど面倒だった
 

#BashOnWindows

#imagemagick

#シェル芸

#シェルスクリプト実用テクニック