2016年2月15日

画像ライブラリPIL

Python にて画像を扱うライブラリ PIL を紹介します。

PIL は標準ライブラリには含まれていませんが、Python において画像処理と言えばまず PIL の名が挙げられるほどに有名なライブラリです。
なお、元祖PIL は Python 3 に対応しておらず、有志により引き継がれた Pillow が Python 3 用のライブラリとなっています。Python 3 でも、旧名である PIL と呼ばれることの方が多いです。


以下に画像整理向けの4つの使い方を紹介します。
どれも直感的で分かりやすいインターフェースになっていることが見て取れるかと思います。


1)画像を切り抜く
crop() 関数を使うことで、画像を切り抜くことができます。
デスクトップのスクリーンショットから所定のウィンドウを切り抜く場合などに使えると思います。

import PIL.Image
import glob

dir_name = 'screenshot/'

for png in glob.glob(dir_name + '*.png'):
    # 画像を開く
    src = PIL.Image.open(png)

    # crop()で切り抜き
    dst = src.crop((0, 0, 250, 400))

    # 切り抜かれた画像を保存
    dst.save(png)

2)画像を小さくする
resize() 関数を使うことで、画像のサイズを変更できます。画質を保つために、resize() の第二引数として PIL.Image.ANTIALIAS を指定するのが一般的です。
デジカメ画像を小さくする場合などに使えると思います。
import PIL.Image
import glob

dir_name = 'photo/'

for jpg in glob.glob(dir_name + '*.jpg'):
    # 画像を開く
    src = PIL.Image.open(jpg)

    # resize()でサイズ変更
    dst = src.resize((800, 600), PIL.Image.ANTIALIAS)

    # サイズ変更された画像を保存
    dst.save(jpg)

3)JPEG のクオリティを落とす
JPEG ファイルは保存時にクオリティを指定できます。オリジナルの画像のクオリティが高すぎて容量が気になる場合には、クオリティを落とすのも一つの手です。ちなみに、PIL のデフォルト値は 75 です。
import PIL.Image
import glob

dir_name = 'photo/'

for jpg in glob.glob(dir_name + '*.jpg'):
    # 画像を開く
    src = PIL.Image.open(jpg)

    # save()にquality引数を与える
    src.save(jpg, quality=60, optimize=True, progressive=True)

4)画像フォーマットを変換する
save() 関数の第二引数で画像フォーマットを指定できます。
import PIL.Image
import glob

dir_name = 'img/'

for bmp in glob.glob(dir_name + '*.bmp'):
    # 画像を開く
    src = PIL.Image.open(bmp)

    # ファイル名を'*.bmp' → '*.png'
    png = '.png'.join(bmp.rsplit('.bmp', 1))

    # PNGとして保存
    src.save(png, 'PNG')

0 件のコメント:

コメントを投稿