Python Imaging Library(PIL)をOSX Lionにセットアップ

Pythonで画像処理をやってみたいと思ったので、Python Imaging Library (PIL)なるライブラリを導入してみました。
導入の際に参考にさせて頂いたのは以下のページです。

まず、上記ページを参考にしながら以下をインストールします。

次にPILのインストール作業に入ります。僕の環境ではこの段階でPILのBuildを実行すると以下のようなSETUP SUMMARYが表示され、Little CMSがサポートされていないと怒られました。この段階でもBuildは正常に終了しているように見えるのですが、やはり気持ちが悪いのでLittle CMSの環境を構築する事にします。

macbook:~ ox$ python setup.py build
    :
--------------------------------------------------------------------
PIL 1.1.7 SETUP SUMMARY
--------------------------------------------------------------------
version       1.1.7
platform      darwin 2.6.6 (r266:84292, Jun 16 2011, 16:59:16)
              [GCC 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2335.15.00)]
--------------------------------------------------------------------
--- TKINTER support available
--- JPEG support available
--- ZLIB (PNG/ZIP) support available
--- FREETYPE2 support available
*** LITTLECMS support not available
--------------------------------------------------------------------
    :

Little CMSの環境を構築するため少し調べてみた結果、とりあえずMacPortsでインストールする事が可能と言う情報を見つけたのでインストール。

macbook:~ ox$ port list | grep lcms
lcms                           @1.19           graphics/lcms
lcms2                          @2.2            graphics/lcms2
macbook:~ ox$ sudo port install lcms

MacPortsで入手できるLittle CMSは1系と2系が存在していますが、PILで必要とされているのは1系のようです。Little CMSのインストールが無事に完了した後に再度Buildを実行するとSETUP SUMMARY上でLITTLECMSもサポートされていると表示が変更になりました。

--------------------------------------------------------------------
PIL 1.1.7 SETUP SUMMARY
--------------------------------------------------------------------
version       1.1.7
platform      darwin 2.6.6 (r266:84292, Jun 16 2011, 16:59:16)
              [GCC 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2335.15.00)]
--------------------------------------------------------------------
--- TKINTER support available
--- JPEG support available
--- ZLIB (PNG/ZIP) support available
--- FREETYPE2 support available
--- LITTLECMS support available
--------------------------------------------------------------------

Setupが問題なく終了したら次はselftest.pyを実行しましょう。

macbook:Imaging-1.1.7 ox$ python selftest.py
--------------------------------------------------------------------
PIL 1.1.7 TEST SUMMARY 
--------------------------------------------------------------------
Python modules loaded from ./PIL
Binary modules loaded from ./PIL
--------------------------------------------------------------------
--- PIL CORE support ok
--- TKINTER support ok
--- JPEG support ok
--- ZLIB (PNG/ZIP) support ok
--- FREETYPE2 support ok
--- LITTLECMS support ok
--------------------------------------------------------------------
Running selftest:
--- 57 tests passed.

この時、"importError: No module named _imagingmath"とエラーが出た場合は次のようにBuildオプションを変更して再Buildして下さい。(参考情報
僕の環境ではこれでエラーがなくなりました。

python setup.py build_ext -i

その後インストールまで完了させた後、Tutorial(PDF)に従ってライブラリをimportしようとしましたがエラーが出てしまいます。色々試してみた結果、PILをトップディレクトリとしたパッケージとしてimportしないと駄目なようです。

macbook:~ ox$ python
Python 2.6.6 (r266:84292, Jun 16 2011, 16:59:16) 
[GCC 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2335.15.00)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import Image
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named Image
>>> 
>>> import PIL.Image as Image
>>>

他の方々のサンプルコードを実行する場合はimport ~ asをするように修正してあげればそのまま実行できると思います。

導入環境

ソースからビルドしたものは括弧内にDLしたファイル名を記載しています。

  • Mac OS X Lion version 10.7
  • Python version 2.6.6
  • freetype version 2.4.5 (freetype-2.4.5.tar.bz2)
  • libjpeg version 8c (jpegscr.v8c.tar.gz)
  • Little CMS version 1.1.9
  • PIL version 1.1.7 (Imagign-1.1.7.tar.gz)

サンプルコードを実行する

Tutorial(PDF)の中からサムネイル作成のコードがあったのでサンプルとして実行してみました。サンプルコードからはimport文のみ変更しています。

Example: Create JPEG Thumbnails
import os, sys
import PIL.Image as Image
for infile in sys.argv[1:]:
    outfile = os.path.splitext(infile)[0] + ".thumbnail"
    if infile != outfile:
        try:
            im = Image.open(infile)
            im.thumbnail((128, 128))
            im.save(outfile, "JPEG")
        except IOError:
            print "cannot create thumbnail for", infile
実行ログ
macbook:tmp ox$ ls
create_jpeg_tumbnails.py	image.jpg
macbook:tmp ox$ python create_jpeg_tumbnails.py image.jpg 
macbook:tmp ox$ ls
create_jpeg_tumbnails.py	image.thumbnail image.jpg

create_jpeg_tumbnails.pyにimage.jpgを渡して実行すると、大きい画像のimage.jpgに対して128x128サイズのimage.thumbnailファイルが新たに作成されました。

image.jpg


image.thumbnail


サンプルコードも問題なく実行できたので、これでPILの導入完了です。