2012年9月13日

Python 画像処理ライブラリ Pillow を使ってみる

概要

Python の画像処理ライブラリはPIL(Python Imaging Library)が有名だが、正式リリースは2009年11月15日にリリースされた1.1.7が最後になっている。
アルファ版の1.2a0が2011年1月8日にBitbucket上でリリースされている(effbot / pil-2009-raclette / downloads — Bitbucket)が、ソースの改修は2011年6月28日で止まっている。

Pillow」は PIL を setuptools 対応にするために fork して開発されているライブラリで、現在も活発にメンテナンスされている。
ただし、PIL も Pillow も正しくは Python 3 に対応していない。Pillowは Python 3対応を徐々にコミットしているようだ。
Pillow」の方が品質が良さげなので、使ってみる。

インストール

Pillow は setuptools 対応しているので PIL と異なりちゃんと pip でインストールできる。
別途、「libjpeg」、「zlib」、「freetype2」、「littleCMS」を事前にインストールしておくこと。

pip install pillow

Windows を利用している人は、shimizukawa / Pillow / downloads — Bitbucketからビルド済みのライブラリをダウンロードすることも可能。

ドキュメント

ドキュメントは「The Python Imaging Library — Pillow」にある。
また、基本APIはPILと同じなので、動作をためす場合、「PIL Tutorial」はかなり役に立つ。

サンプル

画像処理をする場合のサンプル画像は「SIPI Image Database」から持ってくるのが良い。
おそらくこの手の画像で一番有名なのが、「Lena, or Lenna」の画像だろう。
Pillowのレポジトリ(Pillow/Images at master · python-imaging/Pillow · GitHub)にも存在している。

本当に簡単なサンプルを以下に示す。PIL と使い方に違いはない。

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import unittest

import Image


class TestPillow(unittest.TestCase):

    def setUp(self):
        self.image = Image.open('lena.ppm')

    def test_open(self):
        """画像を開く"""
        self.assertEqual('PPM', self.image.format)
        self.assertEqual((128, 128), self.image.size)
        self.assertEqual('RGB', self.image.mode)

    def test_tojpeg(self):
        """画像を リサイズして JPEG に変換"""
        small = self.image.resize([32, 32])
        small.save('lena_small.jpg', 'JPEG')

if __name__ == '__main__':
    unittest.main()

まとめ

画像を簡単に処理する Python のライブラリ Pillow を使ってみた。画像処理はちょっとした時に必要になるので、覚えておいて損はない。

blog comments powered by Disqus