2020年4月26日日曜日

【Pillow】ImageOpsモジュールによる画像拡大縮小・トリミング・パディング

画像処理ライブラリPillowのPIL.ImageOpsモジュールには様々な画像処理機能が用意されている。その中からImageOps.scaleによる画像の拡大縮小、ImageOps.cropによる画像トリミング、ImageOps.padによるパディング処理を説明する。
Pillow(PIL)を使うためにはインポートが必要。PIL.ImageOpsモジュールは通常以下の形式でインポートされる。

from PIL import ImageOps

例に用いる画像'image.jpg'は以下を使用(フリー写真素材ぱくたそより)






1. 画像の拡大縮小(ImageOps.scale)

ImageOps.scaleにより画像が拡大縮小される。factorが拡大縮小の倍率にあたる。書式は以下の通り。

PIL.ImageOps.scale(image, factor, resample=3)

factor=1.2の場合。

from PIL import Image, ImageOps

# 元画像の読み出し
im = Image.open('image.jpg')  

# posterize処理
im_scale = ImageOps.scale(im, 1.2)

# ファイルの保存
im_scale.save('im_scale.jpg', quality=95)

実行結果




factor=0.5の場合。

from PIL import Image, ImageOps

# 元画像の読み出し
im = Image.open('image.jpg')  

# posterize処理
im_scale = ImageOps.scale(im, 0.5)

# ファイルの保存
im_scale.save('im_scale.jpg', quality=95)

実行結果




2. 画像トリミング(ImageOps.crop)

ImageOps.cropにより画像がトリミングされる。borderに指定したピクセル数分画像の四方が削除される。書式は以下の通り。

PIL.ImageOps.crop(image, border=0)

borderを40とし、上下左右40ピクセル削る場合。

from PIL import Image, ImageOps

# 元画像の読み出し
im = Image.open('image.jpg')  

# 40ピクセルcrop処理
im_crop = ImageOps.crop(im, 40)

# ファイルの保存
im_crop.save('im_crop.jpg', quality=95)

実行結果




3. パディング処理(ImageOps.pad)

ImageOps.padにより画像がパディング(余白が追加)される。sizeをタプルで(width, height)を指定、元画像のアスペクト比と指定したwidth, heightによるアスペクト比が縦長なら画像の上下に、横長なら画像の左右に枠が追加される。書式は以下の通り。

PIL.ImageOps.pad(image, size, method=3, color=None, centering=(0.5, 0.5))

元画像のwidth = 480、height = 320に対して、width = 480、height = 360を指定した場合。アスペクト比が縦長になるため上下に黒枠が追加される。

from PIL import Image, ImageOps

# 元画像の読み出し
im = Image.open('image.jpg')  

# pad
im_pad = ImageOps.pad(im, (480, 360))

# ファイルの保存
im_pad.save('im_pad.jpg', quality=95)

実行結果




元画像のwidth = 480、height = 320に対して、width = 520、height = 320を指定した場合。アスペクト比が横長になるため左右に黒枠が追加される。

from PIL import Image, ImageOps

# 元画像の読み出し
im = Image.open('image.jpg')  

# pad
im_pad = ImageOps.pad(im, (520, 320))

# ファイルの保存
im_pad.save('im_pad.jpg', quality=95)

実行結果




4. リファレンス

Pillow (PIL Fork) > ImageOps Module

使用バージョン:Python 3.7.0 / Pillow 7.1.2

0 件のコメント:

コメントを投稿