【Pillow(PIL)】四角形や多角形、丸、円弧などの図形を描く方法[Python]

  • URLをコピーしました!
目次

Pillow(PIL)

前回、matplotlibで四角形や丸、円弧、多角形などの図形を描く方法を紹介しました。

今回はPillow(PIL)を使って、四角形や多角形、丸、円弧などの図形を描く方法を紹介します。

それでは始めていきましょう。

Pillow(PIL)で図形を描く準備

まずはPillow(PIL)で図形を描く準備をしていきます。

まずPILのImageモジュールとImageDrawモジュールをインポートします。

from PIL import Image, ImageDraw

そしてまずは画像サイズ(描写エリア)を定義するため、ベタ塗りの画像を準備します。

「Image.new(“画像モード”, (縦のピクセル数, 横のピクセル数), 画面全体の色)」で作成できます。

img = Image.new("RGB", (800, 600), (255, 255, 255))

作成した描写エリアオブジェクト(ここではimg)をImageDraw.Drawに渡すとImageDrawオブジェクトが作成されます。

from PIL import Image, ImageDraw

img = Image.new("RGB", (800, 600), (255, 255, 255))
draw = ImageDraw.Draw(img)

img.show()

このImageDrawオブジェクトに図形を書き込んでいきます。

四角形

四角形を描くには「draw.rectangle((左上のXの値, 左上のYの値, 右下のXの値, 右下のYの値))」を用います。

ただこのままだと真っ白な四角形となってしまいます。

そのため中を塗りつぶした四角形としたい場合は「fill=(R, G, B)」を、四角形の枠を表示したい場合は「outline=(R, G, B), width=線の幅」を追加します。

from PIL import Image, ImageDraw

img = Image.new("RGB", (800, 600), (255, 255, 255))
draw = ImageDraw.Draw(img)

draw.rectangle((100, 100, 200, 200), fill=(0, 128, 256))

img.show()
from PIL import Image, ImageDraw

img = Image.new("RGB", (800, 600), (255, 255, 255))
draw = ImageDraw.Draw(img)

draw.rectangle((100, 100, 200, 200), outline=(0, 0, 0), width=10)

img.show()

この塗りつぶし「fill=(R, G, B)」と枠線「outline=(R, G, B), width=線の幅」は他の図形でも共通ですので、これ以降は使えるものを追加した形で紹介していきます。

角が丸い四角形

Pillowでは角が丸い四角形も描写できて、その場合は「draw.rounded_rectangle((左上のXの値, 左上のYの値, 右下のXの値, 右下のYの値), fill=(R, G, B), outline=(R, G, B), width=線の幅, radius=角の丸みの半径)」を使います。

from PIL import Image, ImageDraw

img = Image.new("RGB", (800, 600), (255, 255, 255))
draw = ImageDraw.Draw(img)

draw.rounded_rectangle((100, 100, 200, 200), fill=(0, 128, 256), outline=(0, 0, 0), width=10, radius=20)

img.show()

多角形

多角形を描写するには「draw.polygon(((点1のX, 点1のY), (点2のX, 点2のY), (点3のX, 点3のY)), fill=(R, G, B), outline=(R, G, B), width=線の幅)」を用います。

from PIL import Image, ImageDraw

img = Image.new("RGB", (800, 600), (255, 255, 255))
draw = ImageDraw.Draw(img)

draw.polygon(((100, 100), (300, 300), (100, 300)), fill=(0, 128, 256), outline=(0, 0, 0), width=10)

img.show()

円、楕円

円、楕円を描写するには「draw.ellipse((左上のXの値, 左上のYの値, 右下のXの値, 右下のYの値), fill=(R, G, B), outline=(R, G, B), width=線の幅)」を用います。

from PIL import Image, ImageDraw

img = Image.new("RGB", (800, 600), (255, 255, 255))
draw = ImageDraw.Draw(img)

draw.ellipse((100,100, 200, 200), fill=(0, 128, 256), outline=(0, 0, 0), width=10)

img.show()

円弧

円弧を描写するには「draw.arc((左上のXの値, 左上のYの値, 右下のXの値, 右下のYの値), start=開始の角度, end=終了の角度, fill=(R, G, B), width=線の幅)」を用います。

from PIL import Image, ImageDraw

img = Image.new("RGB", (800, 600), (255, 255, 255))
draw = ImageDraw.Draw(img)

draw.arc((100, 100, 200, 200), start=0, end=270, fill=(0, 128, 256), width=10)

img.show()

扇形

扇形を描写するには「draw.pieslice((左上のXの値, 左上のYの値, 右下のXの値, 右下のYの値), start=開始の角度, end=終了の角度, fill=(R, G, B), outline=(R, G, B), width=線の幅)」を用います。

from PIL import Image, ImageDraw

img = Image.new("RGB", (800, 600), (255, 255, 255))
draw = ImageDraw.Draw(img)

draw.pieslice((100,100, 200, 200), start=0, end=270, fill=(0, 128, 256), outline=(0, 0, 0), width=10)

img.show()

線を描写するには「draw.line((始点のX, 始点のY, 終点のX, 終点のY), fill=(R, G, B), width=線の幅)」を用います。

from PIL import Image, ImageDraw

img = Image.new("RGB", (800, 600), (255, 255, 255))
draw = ImageDraw.Draw(img)

draw.line((100, 100, 200, 200), fill=(0, 128, 256), width=10)

img.show()

次回はPillow(PIL)を使ってチェッカーパターン(チェッカーボード)を作成する方法を紹介します。

ではでは今回はこんな感じで。

よかったらシェアしてね!
  • URLをコピーしました!

コメント

コメントする

目次