コードDE描画

プログラミングで図を描く練習

【pythonista3】Pillowモジュールで画像を編集する(回転とリサイズ)メソッドの使用例7選

pythonスクリプトでjpgやpmgなどの画像を加工、作成することが出来る。

簡単な画像処理にPillowモジュールが使われる。このモジュールは、読み込んだ画像をもとに新たな画像の作成、保存が出来る。

iOSアプリのpythonista3には標準でこのモジュールがあるがver1.1.7と古い。(2020年3月アップデート版現在。)

pythonista3内でPillowモジュールが出来ることを紹介する。

以下では、次の2つの操作を説明する。

  • リサイズ
  • 回転

使用環境

使っているアプリの都合上、Pillowモジュールが古い。そのため関数の引数など現在の仕様が若干異なる場合がある。

Pythonista3では最初からPillowモジュールが入っているためインストールは必要がない。

使い方

お借りした画像のリソース

以下では、次の画像をベースに説明する。

sample.jpg
sample.jpg

上の画像をsample.jpgとする。

リサイズ

画像のサイズを変更する。

例1

画像を2倍にする。

  • 実行結果

2倍にした画像
2倍にした画像

from PIL import Image

# 画像読み込み
img=Image.open('sample.jpg')

# サイズ取得
w,h=img.width,img.height

out=img.resize((w*2,h*2))

# 画像を保存
out.save('pillow-resize-1.png')
  • 解説

引数でリサイズ後のサイズを指定する。 幅と高さをピクセル単位でtupleにして渡す。 戻り値はリサイズされた画像オブジェクトになる。

output = Imageオブジェクト.resize((画像の幅,画像の高さ))

元の画像のサイズを利用することで、縦横比を保ったまま拡大、縮小出来る、

例2

任意のサイズにすることも出来るが、縦横に引き伸ばされてしまうことがある。

  • 実行結果

四角くリサイズした画像
四角くリサイズした画像

from PIL import Image

# 画像読み込み
img=Image.open('sample.jpg')

# サイズ取得
w,h=img.width,img.height

out=img.resize((300,300))

# 画像を保存
out.save('pillow-resize-2.png')

回転

画像を回転させる。

例3

90度左回転させる。

90度単位で回転させると、画像の縦横幅は自動的に調整される。

  • 実行結果

90度回転した画像
90度回転した画像

from PIL import Image

# 画像読み込み
img=Image.open('sample.jpg')

out=img.rotate(90)

# 画像を保存
out.save('pillow-rotate-1.png')
  • 解説

引数に回転角度を入れる。 正の値では左回転、負の値では右回転になる。

output = Imageオブジェクト.rotate(回転角度)
例4

90度右回転(-90度左回転)させる。

  • 実行結果

-90度回転した画像
-90度回転した画像

from PIL import Image

# 画像読み込み
img=Image.open('sample.jpg')

out=img.rotate(-90)

# 画像を保存
out.save('pillow-rotate-2.png')
例5

180度回転させる。

  • 実行結果

180度回転した画像
180度回転した画像

from PIL import Image

# 画像読み込み
img=Image.open('sample.jpg')

out=img.rotate(180)

# 画像を保存
out.save('pillow-rotate-3.png')
例6

斜めに回転も出来る。

30度右回転させる。

  • 実行結果

30度回転した画像
30度回転した画像

from PIL import Image

# 画像読み込み
img=Image.open('sample.jpg')

out=img.rotate(30)

# 画像を保存
out.save('pillow-rotate-4.png')
  • 解説

斜めに回転させるとはみ出る部分は切り取られる。 また、余白は黒く塗りつぶされる。 余白の色の指定は出来ない。

例7

斜めにして全体を表示させる。

  • 実行結果

30度回転して全体表示した画像
30度回転して全体表示した画像

from PIL import Image

# 画像読み込み
img=Image.open('sample.jpg')
# 回転後全体を出力
out=img.rotate(30,expand=True)

# 画像を保存
out.save('pillow-rotate-5.png')
  • 解説

引数expand=Trueとすると、はみ出した部分まで収まる画像になる。

まとめ

今回紹介したPillowモジュールの画像処理メソッドをまとめる。

  • リサイズ:resize
    • 引数:タプル型:(幅,高さ)
  • 回転:rotate
    • 引数:数値:回転角道

参考リンク