【pythonista3】Pillowモジュールで図形を使った画像を作る(円弧)
pythonスクリプトでjpgやpmgなどの画像を加工、作成することが出来る。
簡単な画像処理にPillowモジュールが使われる。このモジュールは、図形描画をして画像の保存が出来る。
iOSアプリのpythonista3には標準でこのモジュールがあるがver1.1.7と古い。(2020年3月アップデート版現在。)
pythonista3内でPillowモジュールが出来ることを紹介する。
以下では、次の2つの図形を描く方法を紹介する。
- 扇形
- 円弧
使用環境
- ハード: iPad第6世代
- OS: iOS13.4.1 (17E262)
- 開発環境:pythonista3 app
- python ver 3.6.1
- モジュール Pillow ver 1.1.7
使っているアプリの都合上、Pillowモジュールが古い。そのため関数の引数など現在の仕様が若干異なる場合がある。
Pythonista3では最初からPillowモジュールが入っているためインストールは必要がない。
使い方
以下、さまざまな角度で円弧や扇形を描く。text関数で角度を説明する。stが開始角度で0にした。edが終了角度。後に解説する。
円弧を描く
chord関数で円弧を描く。
- 実行結果

from PIL import Image,ImageDraw,ImageFont W,H=1024,768 r=128 # 画像オブジェクト生成 img=Image.new('RGB',(W,H),(51,51,51)) # 描画オブジェクト生成 draw=ImageDraw.ImageDraw(img) for x in range(8): for y in range(6): angle=90*(x+y*8-15) draw.chord((x*r,y*r,(x+1)*r,(y+1)*r),0,angle,fill=(0,0,255),outline=(255,255,0)) draw.multiline_text(((x+0.3)*r,(y+0.4)*r),f'st=0\ned={angle}',fill=(255,255,0)) # 画像を保存 img.save('pillow-arc-2.png')
扇形を描く
pieslice関数で扇形を描く。
- 実行結果

from PIL import Image,ImageDraw,ImageFont W,H=1024,768 r=128 # 画像オブジェクト生成 img=Image.new('RGB',(W,H),(51,51,51)) # 描画オブジェクト生成 draw=ImageDraw.ImageDraw(img) for x in range(8): for y in range(8): angle=90*(x+y*8-15) draw.pieslice((x*r,y*r,(x+1)*r,(y+1)*r),0,angle,fill=(0,0,255),outline=(255,255,0)) draw.multiline_text(((x+0.3)*r,(y+0.4)*r),f'st=0\ned={angle}',fill=(255,255,0)) # 画像を保存 img.save('pillow-arc-3.png')
円弧の線を描く
arc関数で円弧の線のみを描く。
- 実行結果

from PIL import Image,ImageDraw,ImageFont W,H=1024,768 r=128 # 画像オブジェクト生成 img=Image.new('RGB',(W,H),(51,51,51)) # 描画オブジェクト生成 draw=ImageDraw.ImageDraw(img) for x in range(8): for y in range(6): angle=90*(x+y*8-15) draw.arc((x*r,y*r,(x+1)*r,(y+1)*r),0,angle,fill=(255,255,0)) draw.multiline_text(((x+0.3)*r,(y+0.4)*r),f'st=0\ned={angle}',fill=(255,255,0)) # 画像を保存 img.save('pillow-arc-1.png')
解説
chord,pieslice,arc関数の構文は類似している。各関数の構文は次のようになる。
chord(xy=座標2つ,start=開始角度,end=終了角度,fill=塗り潰しの色,outline=線の色) pieslice(xy=座標2つ,start=開始角度,end=終了角度,fill=塗り潰しの色,outline=線の色) chord(xy=座標2つ,start=開始角度,end=終了角度,fill=線の色)
arc関数のみ塗り潰しが存在しないため、引数fillが線の色を指定し、outline引数が存在しない。
各引数を解説する。
xy:2つの座標を対角とした四角形の範囲に円弧を描く。- 例えば点
(1,1)と点(3,5)を指定すると、点(2,3)を中心に幅2,高さ4の楕円の円弧や扇形を描く。 - 2つの点は左上、右下の順序で記述する。
- 座標の指定方法は2通りある。2つの座標を
(x1,y1)と(x2,y2)とする(x1,y1,x1,y1):4つの値のタプル((x1,y1),(x1,y1)):2つの座標のタプルをネスト
- 例えば点
start,end:円弧や扇形の開始角と終了角。角度は360度数。0が右向きで時計回りがプラス。角度の差end-startの値によって次のように描かれる。0<=end-start:開始角道から終了角まで描く。360度を超えたら枠線は円になる。塗り潰しは360度ごとに、startからendまで塗るのと、endからstartまで塗るのを交互に繰り返す。end-start<0:end>=startになるまでendを360度(一周)ずつ足して描く。差分が丁度360の倍数だった場合、end==startとなり何も描かれない。fill(arc関数はない):塗り潰しの色、色のRGB値(0から255まで)のタプルを使う- (R成分,G成分,B成分)
outline:(arc関数はfill)枠線の色、指定方法は塗り潰しと同じ。
補足
新しいバージョンのPillowオブジェクトでは、線の太さを指定する引数widthが追加されているようだ.。