pgmagick tips
2011-03-27 - ⧖ 1.0 min他人のふんどしでばかり相撲をとってすみません(´Д`。)
pgmagick でもできるか試してみたかったので、以下2つの記事をなぞってみました。
image diff (2つの画像の差分をとる)
pgmagickで2つの画像の差分をとるコードは以下のようになります。
from pgmagick import Image
from pgmagick import CompositeOperator as co
img_a = Image ('a.jpg' )
img_b = Image ('b.jpg' )
img_c = Image ('c.jpg' )
print img_a .compare (img_b )
print img_a .compare (img_c )
#img_a.composite(img_b, 0, 0, co.DifferenceCompositeOp)
img_a .composite (img_c , 0 , 0 , co .DifferenceCompositeOp )
img_a .write ('diff.jpg' )



画像がシュール。
画像の縮小を高速化する
pgmagickではBlobから読み出すことで画像の縮小を高速化できました。
import pgmagick
# fast read
img = pgmagick .Image (pgmagick .Blob (open ('org.jpg' ).read ()), pgmagick .Geometry (180 , 120 ))
img .scale ('180x120' )
img .write ('t.jpg' )
# slow read
img = pgmagick .Image ('org.jpg' )
img .scale ('180x120' )
img .write ('t.jpg' )
Imageクラスの1パラ目にBlobデータ、2パラ目にGeometryでサイズを指定すると JPEGの読み込みサイズがサイズ指定した値に近くなり、結果メモリ確保サイズが 少なくなるため高速化できるようです。 pgmagick(GraphicsMagick)は -define jpeg:size は指定できませんので、 mirakuiさんの記事でいうところの -size オプション付加したときと同等ですね。 JPEG、縮小サイズが分かっている時限定です。
以前測定したベンチマーク をアップデートしてみました。
おお、スケールに限定するとpgmagickいい勝負してるよ!!
おわりに
pgmagickでもできましたー、と。 Pythonを使っていてシステム関数でconvertコマンドたたいたりしたくないときとかはpgmagickをどうぞ。
