🍁

[Python] Pillowで長方形を描画する

2021/05/03に公開

はじめに

Pythonで画像処理といえば、Pillowですが、普段使わないだけに中々使いこなせません。なので体系的に学ぶような記事ではなく、長方形に特化した内容を書きたいと思います

環境

  • Python: 3.9系
  • Pillow: 8.0.1

Pillowがインストールされていない場合はインストールしてください

pip install Pillow

Pillowで長方形を描画する方法

サンプルコード

from PIL import Image, ImageDraw

rect = Image.new("RGBA", (1280, 720), (0, 0, 255))

rect_d = ImageDraw.Draw(rect)
rect_d.rectangle(
    [(200, 100), (500, 300)], fill=(255, 0, 0), outline=(0, 255, 0), width=10
)

rect.show()
rect.save("sample.png")

解説します

手順

手順は以下のような感じです。その中からピックアップして詳しく説明します。

  • importする
  • ベースになる画像を生成する(もしくは読み込む)
  • ImageDrawインスタンスを生成して図形を描画できるようにする
  • rectangleメソッドを使って描画する
  • (任意)プレビューを表示
  • (任意)保存する

Image.newの引数

塗り潰し色のを指定しない場合は、透明なPNGになります。塗り潰しの指定でfill=とは書かないので注意

# 1280x720の透明の画像を生成
rect = Image.new("RGBA", (1280, 720))

# 塗り潰しをしたいなら第3引数を指定する(この場合は黒)
rect = Image.new("RGBA", (1280, 720), (0, 0, 0))

rectangleの指定方法

# 図形を描画できるように、ImageDrawインスタンスを生成
rect_d = ImageDraw.Draw(rect)

# [(200, 100), (500, 300)]の座標に画像を生成して
# fillで指定した色で塗り潰して(この場合は赤)
# outlineで指定した色で境界線をひく(この場合は緑)
rect_d.rectangle(
    [(200, 100), (500, 300)], fill=(255, 0, 0), outline=(0, 255, 0), width=10
)
引数名 意味
第1引数(必須) 描画する長方形の座標 座標はベース画像の左上が起点になる →右方向:+x ↓下方向:+y
fill(任意) 図形の塗り潰しの色 指定しない場合は透明
outline(任意) 境界線の色 fillの指定がない場合は、白の境界線が勝手に描画される
width(任意) 境界線の太さを指定する。境界線は長方形の内側に描画される width=0にしておけば境界線は表示されない

参考

参考:https://pillow.readthedocs.io/en/stable/reference/ImageDraw.html?highlight=rectangle#PIL.ImageDraw.ImageDraw.rectangle

Discussion