画像を9分割
画像を9分割にしてそれぞれファイルにするという処理が必要になったので、30分プログラミング。
PILとDirectory Listing of /filesにあるjpegsrc.7v ってのが必要です。これのインストールにハマった。。。
後、PILのcropメソッドが、(x,y,width,height)ではなく、(left-x,upper-y,right-x,lower-y1)となってて、right-xが取り出す画像の右辺にあたる場所のピクセルポイントなのに、元画像の右辺からのピクセル数と勘違いしたぐらいで。。。
画像分割はこんな感じに。
+-----+-----+-----+ | | | | | 1 | 2 | 3 | | | | | +-----+-----+-----+ | | | | | 4 | 5 | 6 | | | | | +-----+-----+-----+ | | | | | 7 | 8 | 9 | | | | | +-----+-----+-----+
処理結果としてはこんな感じ。
Python のソースコード
#!/usr/bin/python # -*- encoding:utf-8 -*- from PIL import Image import os import sys def nineSplit(im): width, height = im.size w1, h1 = 0,0 buff = [] print "w(%f), h(%f)" % (width, height) for h1 in [0.0, (height*(1/3.0)), (height*(2/3.0))]: for w1 in [0.0, (width*(1/3.0)), (width*(2/3.0))]: w2,h2 = (w1 + (width*(1/3.0))), (h1 + (height*(1/3.0))) print "crop (%f, %f, %f, %f)" % (w1, h1, w2, h2) c = im.crop((int(w1), int(h1), int(w2), int(h2))) buff.append(c) return buff if __name__ == '__main__': im = Image.open(sys.argv[1]) num = 1 for ig in nineSplit(im): ig.save("%d.jpg"%num, "JPEG") num += 1