画像DIFFを取得するimgdiffというgemを作りました
コマンドラインで使えて画像DIFFが取得できます
https://github.com/bonbon0605/imgdiff
前から作りたいと思っていたのですが、一念発起して作成しました。
rubygemsの登録もしたので、gem install imgdiff
で使えます。
CLIにて、
$ imgdiff 対象のイメージ1 対象のイメージ2 (出力先)
という感じで使うことを想定しています。
同じところは黒くなるので、黒くないところが差分になります。 画像の差分取得には、rmagick(ImageMagick)を使っているのですが、 色の差の絶対値を取得しているようで、同じだったら差が0で黒、ということみたいです。
参考にさせて頂いた情報
この2つのサイトのおかげで、rubygemsに登録する勇気が持てました。多謝。
- GitHub - erikhuda/thor: Thor is a toolkit for building powerful command-line interfaces.
- Ruby gemでのコマンドライン・ツールの作り方 - IT探検記
はまったところ
コマンドラインツールのテストの書き方
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での画像差分について
こちらの記事を参照ください。
- 作者: Rubyサポーターズ,すがわらまさのり,寺田玄太郎,三村益隆,近藤宇智朗,橋立友宏,関口亮一
- 出版社/メーカー: 技術評論社
- 発売日: 2013/08/10
- メディア: 大型本
- この商品を含むブログ (22件) を見る
APIデザインケーススタディ ~Rubyの実例から学ぶ。問題に即したデザインと普遍の考え方 (WEB+DB PRESS plus)
- 作者: 田中哲
- 出版社/メーカー: 技術評論社
- 発売日: 2015/12/16
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (2件) を見る