Symfoware

Symfowareについての考察blog

Python + Pillow(PIL)で画像の回転を行う(rotate, transpose)

Python + Pillowで画像を回転してみます。
回転元の画像はこちら。

500_01.png


こちらを参考にさせていただきました。
Python Imaging Libraryの使い方


rotateとtranspose



rotateは任意の角度で回転。
transposeは引数を指定して回転効果を得ます。


  1. # -*- coding:utf-8 -*-
  2. from PIL import Image
  3. img = Image.open( 'original.png' )
  4. # 左右反転
  5. tmp = img.transpose(Image.FLIP_LEFT_RIGHT)
  6. tmp.save('FLIP_LEFT_RIGHT.png')
  7. # 上下反転
  8. tmp = img.transpose(Image.FLIP_TOP_BOTTOM)
  9. tmp.save('FLIP_TOP_BOTTOM.png')
  10. # 90°回転
  11. tmp = img.transpose(Image.ROTATE_90)
  12. tmp.save('ROTATE_90.png')
  13. # 180°回転
  14. tmp = img.transpose(Image.ROTATE_180)
  15. tmp.save('ROTATE_180.png')
  16. # 270°回転
  17. tmp = img.transpose(Image.ROTATE_270)
  18. tmp.save('ROTATE_270.png')
  19. # 45°回転
  20. tmp = img.rotate(45)
  21. tmp.save('45.png')





FLIP_LEFT_RIGHTとFLIP_TOP_BOTTOMの結果。

500_02.png


ROTATE_90、ROTATE_180、ROTATE_270の結果。

500_03.png


rotate(45)の結果。

500_04.png

画像が見きれてしまいます。




綺麗に45度回転



見きれず45度回転させるには、一旦大きめのイメージを用意して
中央に回転させたい画像を貼り付け。
回転後、必要サイズを切り出せば良さそうです。

試行錯誤しながらだったので、綺麗ではないですがこんな感じになりました。
久しぶりに三平方の定理を使って計算した気がします。


  1. # -*- coding:utf-8 -*-
  2. from PIL import Image
  3. import math
  4. img = Image.open( 'original.png' )
  5. # 元画像のサイズを取得
  6. width = img.size[0]
  7. height = img.size[1]
  8. # 回転用に、元画像の倍のサイズの画像を用意
  9. # デバッグ用に背景を赤に
  10. tmp_size = width * 2
  11. tmp = Image.new('RGB', (tmp_size, tmp_size), (255, 0, 0) )
  12. # 用意したテンポラリ画像の中央に貼り付け
  13. posx = int((tmp_size - width) / 2)
  14. posy = int((tmp_size - height) / 2)
  15. tmp.paste(img, (posx, posy))
  16. # 45度回転
  17. tmp = tmp.rotate(45)
  18. # 必要サイズを計算 
  19. cuts = int(math.floor((width + height) / math.sqrt(2)))
  20. # 中央座標を計算して、必要な矩形を切り出す
  21. pos = int((tmp_size - cuts) / 2)
  22. tmp = tmp.crop( (pos, pos, pos + cuts, pos + cuts) )
  23. # 結果を保存
  24. tmp.save('rotate.png')




出来ました。

500_05.png



【参考URL】

Tutorial - Using the Image class

関連記事

テーマ:プログラミング - ジャンル:コンピュータ

  1. 2014/11/04(火) 23:49:36|
  2. Python
  3. | トラックバック:0
  4. | コメント:0
  5. | 編集
<<FreeBSD 10にR言語をインストールする(pkg install使用) | ホーム | Python + Pillow(PIL)で、透過したpng画像を作成する>>

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバック URL
http://symfoware.blog68.fc2.com/tb.php/1533-4a8dfc32
この記事にトラックバックする(FC2ブログユーザー)