画像ファイルを分割して別々のファイルとして保存する
1つの画像ファイルを読み込んで、15パズル用に4x4の16分割したファイルとして保存したい。PIL(Python Imaging Library)を使えば、この処理も簡単にできてしまうのがPythonの凄いところ。
今回行う処理内容は上の図の通り。1枚の絵を16分割する。
一連の処理を行うコードを見ていく。
import Image #im = Image.open("test.png") im = Image.open("test.bmp") w = im.size[0] h = im.size[1] rsize = min(w, h) box = (0, 0, rsize, rsize) region= im.crop(box) ...
まずはコードの前半部分。何はなくともPILモジュールをimportする。それから、画像ファイルをopenする。sizeメソッドで、画像サイズ(単位はピクセル)をタプルとして取り出せる。横(w)、縦(h)のサイズを確認してから、小さい方(min(w,h))のサイズに合わせて読み込んだ画像をトリムする(im.crop(box))。
15パズル用の画像は正方形がいいので(そうでもないか?)、ここでは読み込んだ画像のサイズを調整した。
... subregion = list() ds = float(rsize)/4.0 for i in xrange(4): wmin = int(ds*i) wmax = int(ds*(i+1)) for j in xrange(4): k = 4*i + j hmin = int(ds*j) hmax = int(ds*(j+1)) box = (wmin, hmin, wmax, hmax) subregion.append(region.crop(box)) for num in xrange(16): subregion[num].save(str(num)+'.jpg', "JPEG")
そして、コードの後半部分。調整後の画像サイズを4等分して、16分割される画像の左上と右下の座標を指定する(box=のところ)。原点は左上であり、heightは下方向に増加することに注意する。2つのfor文で、16分割(region.crop(box))している。
それら、16枚の絵をファイルに保存しているのが最後の部分。番号をファイル名として、JPEG形式のファイルとしている。