Pythonで画像処理(Python Imaging Library)

brightkiteというサービスを最近実験的に使ってみてます。 http://brightkite.com/

twitterが、"What are you doing?"なサービスに対して、brightkiteは、"What's Happening?"というサービスで、チェックイン機能、ひとことメモ機能、写真&メモ投稿機能、コメント投稿機能、メッセージ機能が詰め込まれた簡易投稿サービスです。

そこで、この3カ月の学習を締めくくる今回のプログラミングの成果物として、brightkiteを模倣したひとこと写真投稿サービスを作ることにしました。birightkiteでいうところの写真&メモ投稿機能の部分です。(出来ればコメント投稿も)
ギリギリ"What's Happening?"と問いかけることができる最小限の機能でのリリースを目指します。残り期間があと20日になりましたが、残りの期間で一気に作り上げていきたいと思います。

さて、写真を使うっていうことで、今日はWebプログラミングでは不可欠ともいえる画像加工のスクリプトを学んでいくことにします。オリジナルサイズで投稿された写真を、特定のサイズ内で収まるよう、写真を縮小する必要があるので。

Pythonの場合、「PIL(Python Imaging Library)」というツールを使っていくことになります。これを使うと、かなり便利です。

【PILのダウンロード】こちらより⇒http://www.pythonware.com/products/pil/
英語でゾッとしますが、青字のDownloadsの下にあるPython Imaging Library 1.1.6 for Python 2.6 (Windows only)というテキストリンクをクリックしてPythonディレクトリにインストールしてください。インストール終了後は、Pythonシェルで確認してください。

>>> import PIL.Image
>>>

Import文の次の行に何も表示されていなければOKです。(入力待ちの状態ってこと)


PILは、約20種類のモジュールで構成されてます。今回の自分の成果物は、取り込んだ画像に加工を施すためImageモジュールを利用します。

画像サイズの変換には、2種類の関数が準備されており、resizeメソッドとthumbnaildメソッドがあるようですが、縦横比を維持するということでthumbnaildメソッドを使うことにします。

def save_thumbnail(infile, outfile):
	img = Image.open(infile)
	img = thumbnail((160,90))
	img.save(outfile, "JPEG")
	return img

黄金比といわれている16:9のサイズにとりあえず指定。thumbnaildメソッドは縦横比を維持してくれるので、160:90という枠の中に縦横の比率を変えずに収まってくれます。

また、きっとこれはさらに上級者の試みることだと思いますが、サムネイル写真をキレイに見せるためのconvertメソッドというのもあるようです。深入りしすぎるとずっとこだわっていそうなので、今回はカラーの写真を、白黒の写真にする程度にとどめておきます。

def sirokuro(infile, outfile):
	img = Image.open(infile)
	sirokuro_img = img.convert("L")
	sirokuro_img.save(outfile, "JPEG")
	return sirokuro_img

def sirokuro_show():
	infile = 'test.jpg'
	outfile = 'test_mod.jpg'
	sirokuro(infile, outfile).show()

おそらく、写真の画像のリサイズとサムネイルの作成などは、この部分だけを押さえておけばなんとかなるはず。というわけで、今回はここまで。
次回は、データベースを作成していくことにします。