Pythonの画像処理ライブラリ Pillow


このページは以下のURLに移転しました。5秒後に自動で移動します。
新URL: https://note.nkmk.me/python-pillow-basic/

Pillowは、開発が停止しているPIL(Python Image Library)からフォークされた画像処理ライブラリ。

インストール

pipでインストール。

1
$ pip install Pillow

PillowとPILは共存出来ない。両方インストールしてしまった場合は、まず両方ともアンインストールしてから片方だけをインストールし直すのが良い。

何がインストールされているかわからない場合は、

1
$ pip list

で確認できる。アンインストールは、

1
$ pip uninstall <package>

使い方

公式リファレンスがしっかりしていて分かりやすい。

画像読み込み、処理、保存

各色の最小値と最大値を取得したり、変換や回転、フィルターなどの処理をかけたりできる。そのほかにもcropresizeなど色々ある。

ファイルを読み込み。

pillow_image.pylink
1
2
3
from PIL import Image, ImageFilter
im = Image.open('data/src/lenna_square.png')

フォーマット、サイズ、モードなどのメタ情報を取得。サイズは(width, height)

pillow_image.pylink
7
8
print(im.format, im.size, im.mode)
# PNG (512, 512) RGB

RGB各色の最小値と最大値を取得。

pillow_image.pylink
10
11
print(im.getextrema())
# ((54, 255), (3, 248), (8, 225))

指定した座標の色を取得。座標の原点(0, 0)は左上。

pillow_image.pylink
13
14
print(im.getpixel((256, 256)))
# (180, 65, 72)

白黒に変換(convert('L'))、90度回転(rotate(90))、ガウシアンブラー(filter())の処理を行う。

pillow_image.pylink
16
new_im = im.convert('L').rotate(90).filter(ImageFilter.GaussianBlur())

OSデフォルトのソフトで画像を表示。

pillow_image.pylink
18
new_im.show()

画像を保存。

pillow_image.pylink
20
new_im.save('data/dst/lenna_square_pillow.jpg', quality=95)

save()で保存する際は拡張子に応じて引数が異なる。詳細はImage file formatを参照。jpgの場合は引数qualityで品質を指定できる。1(最低)から95(最高)まででデフォルトは75

元画像と処理後の画像は以下の通り。

originalprocessed

図形描画

図形の描画もできる。

ImageDraw Moduleを使う。

まずベタ画像を作成。

pillow_image_draw.pylink
1
2
3
from PIL import Image, ImageDraw, ImageFont
im = Image.new("RGB", (512, 512), (128, 128, 128))

Drawオブジェクトを生成。

pillow_image_draw.pylink
5
draw = ImageDraw.Draw(im)

直線、長方形、楕円を描画。

pillow_image_draw.pylink
7
8
9
draw.line((0, im.height, im.width, 0), fill=(255, 0, 0), width=8)
draw.rectangle((100, 100, 200, 200), fill=(0, 255, 0))
draw.ellipse((250, 300, 450, 400), fill=(0, 0, 255))

テキストを描画。フォントを指定して使う。

pillow_image_draw.pylink
11
12
font = ImageFont.truetype('/Library/Fonts/Arial Bold.ttf', 48)
draw.multiline_text((0, 0), 'Pillow sample', fill=(0, 0, 0), font=font)

こんな感じ。

pillow_sample

この例では最初にベタ画像を生成しているが、画像ファイルを読み込んで、その上に図形やテキスト描画することも可能。

関連記事