2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Rmagickで画像の差分を取得する

Last updated at Posted at 2016-09-29

differenceメソッド

# 画像読み込み
image1 = Magick::Image.read('http://example.com/image1.jpg')[0]
image2 = Magick::Image.read('http://example.com/image2.jpg')[0]

p image1.difference(image2)
# => [0.0, 0.0, 0.0]
# 同じ画像だと0

参考: http://genius.hateblo.jp/entry/2016/02/12/131823

compositeメソッド

# 画像読み込み
image1 = Magick::Image.read('http://example.com/image1.jpg')[0]
image2 = Magick::Image.read('http://example.com/image2.jpg')[0]

p image1.composite(image2, 0, 0, Magick::DifferenceCompositeOp)
# => 0
# 同じ画像だと0

うまくいかないとき

no decode delegate for this image format

Magick::Image.read に画像URLを指定すると次のようなエラーが出るときがあります。

Magick::ImageMagickError: no decode delegate for this image format

これは指定された画像のフォーマットは扱えないというエラーです。(サンプルの場合だとjpgが扱えないということ)下記のページの通り、ライブラリをインストールすれば解決するはずなんですが私の場合はこのエラーが消えず。。
http://dqn.sakusakutto.jp/2013/10/no_decode_delegate_for_this_image_format.html

同じように画像を読み込めない方はMagick::Image.from_blobを使ってみてください。
私はこれで画像を読み込むことができました。

Magick::Image.from_blob(open('http://example.com/image1.jpg').read)

参考: http://tech.itandi.co.jp/2016/04/image_diff_with_imagemagick/

違う画像なのに差分が0になる

differenceで差分を取得すると全く違う画像なのに差分が0になってしまうということがありました。
そういう時はcompositeを使ってみましょう。

# 画像読み込み
image1 = Magick::Image.from_blob(open('http://example.com/image1.jpg').read).first
image2 = Magick::Image.from_blob(open('http://example.com/image2.jpg').read).first

p image1.composite(image2, 0, 0, Magick::DifferenceCompositeOp)

若干differenceで取得した時の値とはズレがありますが許容できる範囲だと思います。

終わりに

画像の差分を取得したかっただけなのに丸2日使ってしまいました。というのもローカルだと普通に動くんですよね。サーバに入ってるImageMagickのアップデートにも多大な時間を使ってしまいました(結局できず)。こういう問題へのアプローチはもっと考えないと無駄に時間つかちゃうなと思いました。

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?