2020年4月16日木曜日

【Pillow】画像の回転、反転(rotate, transpose)

 画像処理ライブラリPillowのImage.rotateを使うと画像を任意の角度に回転できる。また、Image.transposeを使うと画像の左右、上下の反転、90°、180°、270°の回転ができる。

Pillow(PIL)を使うためにはインポートが必要。PIL.Imageモジュールは通常以下の形式でインポートされる。

from PIL import Image

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


1. 画像回転(Image.rotate)

 画像に対してrotateメソッドを適用し引数として角度を与えると指定の角度で反時計回りに回転した画像を生成できる。
反時計回りに45°回転させる例。読み出す画像ファイル名'image.jpg'の部分は実際の画像のパスを入力する。

from PIL import Image

# 元画像の読み出し
im = Image.open('image.jpg')  
# 回転
im_rotate = im.rotate(45)
# ファイルの保存
im_rotate.save('image_rotate.jpg', quality=95)

実行結果




 上の例では元画像のサイズが維持されるため回転した画像のはみ出た部分は表示されない。回転した画像を全て表示させる場合はImage.rotateの引数にexpand=1を追加する。

from PIL import Image

# 元画像の読み出し
im = Image.open('image.jpg')  
# 回転
im_rotate = im.rotate(45, expand=1)
# ファイルの保存
im_rotate.save('image_rotate.jpg', quality=95)  

実行結果




2. 画像反転・回転(Image.transpose)

 transposeにより画像の反転や回転が可能。処理内容は与える引数(method)により以下の通り。

method 処理内容
Image.FLIP_LEFT_RIGHT 左右反転
Image.FLIP_TOP_BOTTOM 上下反転
Image.ROTATE_90 反時計回りに90°回転
Image.ROTATE_180 反時計回りに180°回転
Image.ROTATE_270 反時計回りに270°回転

Image.FLIP_LEFT_RIGHTによる左右反転

from PIL import Image

# 元画像の読み出し
im = Image.open('image.jpg')  
# 回転
im_FLIP_LEFT_RIGHT = im.transpose(Image.FLIP_LEFT_RIGHT)
# ファイルの保存
im_FLIP_LEFT_RIGHT.save('image_FLIP_LEFT_RIGHT.jpg', quality=95)  

実行結果




Image.FLIP_TOP_BOTTOMによる上下反転

from PIL import Image

# 元画像の読み出し
im =Image.open('image.jpg')  
# 回転
im_FLIP_TOP_BOTTOM = im.transpose(Image.FLIP_TOP_BOTTOM)
# ファイルの保存
im_FLIP_TOP_BOTTOM.save('image_FLIP_TOP_BOTTOM.jpg', quality=95)

実行結果




Image.ROTATE_90による反時計回り90°回転

from PIL import Image

# 元画像の読み出し
im = Image.open('image.jpg')  
# 回転
im_ROTATE_90 = im.transpose(Image.ROTATE_90)
# ファイルの保存
im_ROTATE_90.save('image_ROTATE_90.jpg', quality=95)      

実行結果




Image.ROTATE_180による180°回転

from PIL import Image

# 元画像の読み出し
im = Image.open('image.jpg')  
# 回転
im_ROTATE_180 = im.transpose(Image.ROTATE_180)
# ファイルの保存
im_ROTATE_180.save('image_ROTATE_180.jpg', quality=95)    

実行結果




Image.ROTATE_270による反時計回り270°回転

from PIL import Image

# 元画像の読み出し
im = Image.open('image.jpg')  
# 回転
im_ROTATE_270 = im.transpose(Image.ROTATE_270)
# ファイルの保存
im_ROTATE_270.save('image_ROTATE_270.jpg', quality=95)    

実行結果




3. リファレンス

Pillow (PIL Fork) > PIL.Image.Image.rotate
Pillow (PIL Fork) > Image.transpose(method)

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

0 件のコメント:

コメントを投稿