画像DIFFを取得するimgdiffというgemを作りました

コマンドラインで使えて画像DIFFが取得できます

https://github.com/bonbon0605/imgdiff

前から作りたいと思っていたのですが、一念発起して作成しました。

rubygemsの登録もしたので、gem install imgdiffで使えます。

CLIにて、

$ imgdiff 対象のイメージ1 対象のイメージ2 (出力先)

という感じで使うことを想定しています。

同じところは黒くなるので、黒くないところが差分になります。 画像の差分取得には、rmagick(ImageMagick)を使っているのですが、 色の差の絶対値を取得しているようで、同じだったら差が0で黒、ということみたいです。

参考にさせて頂いた情報

この2つのサイトのおかげで、rubygemsに登録する勇気が持てました。多謝。

コマンドラインツールにするのにThorを使いました

はまったところ

コマンドラインツールのテストの書き方

CLIでのコマンド実行を前提としていたので、どうやってテストを書くのか良く分かっていませんでした。 コマンドライン引数も渡すし、、、ということで、

system "bundle exec imgdiff A.jpg B.jpg"

みたいに、外部コマンド実行の形で最初書いていたのですが、色々無理があるなと思い調べたところ

ImgDiff.new(["ImageA","ImageB"]).invoke(:method)

というような形で実行できることが分かりました。(newの引数の配列がコマンドライン引数になる)

travisのテストがpassしない

ローカルではテストがpassするのに、travisでテストが落ち続け、何故か分からずに嵌まりました。 DIFFの画像を保存する権限がないのかとか色々考えたのですが、解決せず、、、結局、全然違う理由でした。

テストとして、正解のファイルリポジトリ内に用意しておいて、 それと比較して同じものかどうかで結果が正しいと判断しようとしていたのですが、 (出力結果「ImageC」は用意してある「ImageD」と同一のファイルだから正しい結果だ、というような考え)

どうやらリモートリポジトリの画像がちょっと期待しているものと違ってしまっていたようで、一致しなくてNGという内容でした。(正解が正解ではなかった)

なぜ違ってしまったのかはよく分かっていないのですが(劣化?)、「用意してあるファイルと同じ」という思想を改めることでpassできました。

rmagickでの画像差分について

こちらの記事を参照ください。

genius.hateblo.jp

パーフェクトRuby (PERFECT SERIES 6)

パーフェクトRuby (PERFECT SERIES 6)