4 枚の図のデータは以下のような感じ。
$ identify fig1-* fig1-a.jpg JPEG 3264x2448 3264x2448+0+0 8-bit DirectClass 1.547MB 0.000u 0:00.000 fig1-b.jpg[1] JPEG 3264x2448 3264x2448+0+0 8-bit DirectClass 1.516MB 0.000u 0:00.000 fig1-c.jpg[2] JPEG 3264x2448 3264x2448+0+0 8-bit DirectClass 1.323MB 0.000u 0:00.000 fig1-d.jpg[3] JPEG 3264x2448 3264x2448+0+0 8-bit DirectClass 1.533MB 0.000u 0:00.000
これらを 1 枚の図にまとめるには montage を使う。以下のようにすることで、j
$ time montage -tile 2x2 -geometry 50% fig1-?.jpg fig1.jpg real 8m35.769s user 0m36.154s sys 0m7.816s $ identify fig1.jpg fig1.jpg JPEG 1632x1224 1632x1224+0+0 8-bit DirectClass 500KB 0.010u 0:00.000
このようにするほうが圧倒的に速い。
$ time convert -geometry 25% fig1-a.jpg fig1-a_.jpg real 0m6.096s user 0m5.760s sys 0m0.236s $ time convert -geometry 25% fig1-b.jpg fig1-b_.jpg real 0m6.024s user 0m5.656s sys 0m0.332s $ time convert -geometry 25% fig1-c.jpg fig1-c_.jpg real 0m6.018s user 0m5.496s sys 0m0.472s $ time convert -geometry 25% fig1-d.jpg fig1-d_.jpg real 0m6.139s user 0m5.740s sys 0m0.272s $ time montage -tile 2x2 -geometry 100% fig1-?_.jpg fig1_.jpg real 0m1.721s user 0m1.484s sys 0m0.228s $ identify fig1_.jpg fig1_.jpg JPEG 1632x1224 1632x1224+0+0 8-bit DirectClass 437KB 0.000u 0:00.000
結果的に得られる画像の見た目はほとんど同じだし画像の解像度も同じだけど、cmp や diff で比較すると違うものであることが分かる。しかし libpuzzle で 2 つの画像同士の距離 (類似度) を計算してもらうと 0、つまり同じと判定される。
$ cmp fig1_.jpg fig1.jpg fig1_.jpg fig1.jpg differ: byte 184, line 6 $ diff fig1_.jpg fig1.jpg Binary files fig1_.jpg and fig1.jpg differ $ puzzle-diff fig1_.jpg fig1.jpg 0
いちいち中間ファイルを作るのが面倒なので以下のようにすることもできる。これでも最初に比べたらいくらかまし。
$ time montage -geometry 25% fig1-?.jpg -tile 2x2 -geometry 100% fig1.jpg real 1m26.412s user 0m23.893s sys 0m3.120s $ identify fig1.jpg fig1.jpg JPEG 1632x1224 1632x1224+0+0 8-bit DirectClass 498KB 0.000u 0:00.019 $ puzzle-diff fig1_.jpg fig1.jpg 0