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)を使ってチェッカーパターン(チェッカーボード)を作成する方法を紹介します。
ではでは今回はこんな感じで。
コメント