Pillow (PIL) - 画像を回転、反転させる方法について
概要
Pillow (PIL) で画像を回転、反転させる方法を整理する。
任意の角度回転させる。
Image.rotate で画像を回転できる。
Image.rotate(angle, resample=0, expand=0)
- 引数
- angle: 反時計回りの回転角度 (度) を指定する。
- resample: 補完方法を指定する。
- PIL.Image.NEAREST: 最近傍補間
- PIL.Image.BILINEAR: バイリニア補間
- PIL.Image.BICUBIC: バイキュビック補間
- expand: True を指定した場合、画像が収まるように回転後に調整を行う。
- 返り値
- dst: 回転した画像
from PIL import Image # 画像を読み込む。 img = Image.open("sample.jpg") # 反時計回りに画像の中心回りに120度回転する。 dst = img.rotate(129, center=(img.size[0] / 2, img.size[1] / 2))
回転した結果、元の画像にあった画素の一部ははみ出してしまっている。
expand=True を指定することで、元の画像にあった画素がすべて収まるように調整される。
from PIL import Image # 画像を読み込む。 img = Image.open("sample.jpg") # 反時計回りに画像の中心回りに120度回転する。 dst = img.rotate(129, center=(img.size[0] / 2, img.size[1] / 2), expand=True)
画素の情報がない部分はデフォルトでは黒で埋められるが、fillcolor を指定することで他の色で埋められる。
from PIL import Image # 画像を読み込む。 img = Image.open("sample.jpg") # 反時計回りに画像の中心回りに120度回転する。 dst = img.rotate( 120, center=(img.size[0] / 2, img.size[1] / 2), fillcolor=(0, 200, 255) )
画像を 90°、180°、270° 回転させる
Image.transpose で画像を90度単位で画像を回転できる。
Image.transpose(method)
- 引数
- method: 変換方法を指定する。
- PIL.Image.FLIP_LEFT_RIGHT: 左右反転する。
- PIL.Image.FLIP_TOP_BOTTOM: 上下反転する。
- PIL.Image.ROTATE_90: 反時計回りに90° (時計回りに270°) 回転させる。
- PIL.Image.ROTATE_180: 反時計回りに180° (時計回りに180°) 回転させる。
- PIL.Image.ROTATE_270: 反時計回りに270° (時計回りに90°) 回転する。
- PIL.Image.TRANSPOSE: 反時計回りに90° (時計回りに270°) 回転させる。
- PIL.Image.TRANSVERSE: 反時計回りに270° (時計回りに90°) 回転する。
- method: 変換方法を指定する。
- 返り値
- dst: 変換した画像
反時計回りに90° (時計回りに270°) 回転させる。
from PIL import Image # 画像を読み込む。 img = Image.open("sample.jpg") # 反時計回りに90° (時計回りに270°) 回転させる。 dst = img.transpose(Image.ROTATE_90)
反時計回りに180° (時計回りに180°) 回転させる。
from PIL import Image # 画像を読み込む。 img = Image.open("sample.jpg") # 反時計回りに180° (時計回りに180°) 回転させる。 dst = img.transpose(Image.ROTATE_180)
反時計回りに270° (時計回りに90°) 回転する。
from PIL import Image # 画像を読み込む。 img = Image.open("sample.jpg") # 反時計回りに270° (時計回りに90°) 回転する。 dst = img.transpose(Image.ROTATE_270)
画像を反転する。
Image.transpose で画像を上下左右反転できる。
左右反転する。
from PIL import Image # 画像を読み込む。 img = Image.open("sample.jpg") # 左右反転する。 dst = img.transpose(Image.FLIP_LEFT_RIGHT)
上下反転する。
from PIL import Image # 画像を読み込む。 img = Image.open("sample.jpg") # 上下反転する。 dst = img.transpose(Image.FLIP_TOP_BOTTOM)
上下左右反転する。
上下左右反転することは180°回転させることと等価なので、PIL.Image.ROTATE_180 を指定すればよい。
from PIL import Image # 画像を読み込む。 img = Image.open("sample.jpg") # 上下左右反転する。 dst = img.transpose(Image.ROTATE_180)