2020年11月8日日曜日

Python+Pillowでいろいろな大きさの円を描く

最近、お出かけすることが減って、Pythonを勉強しています。 
そのPython言語の、Pillowという画像ライブラリを使ったスクリプトです。 
Pythonをインストールして、Pillowのライブラリをpipでインストールしておく
必要があります。 
記事を書いている時点のPythonは3.8です。

前回は同じ大きさの円形を並べて描画するスクリプトを作りましたが、 
今回はランダムな位置に、違う大きさの円形を描画します。 
円形を描画するには、Pilowの ImageDraw.Drawクラスの ellipse メソッド を使います。 以下にスクリプトのコードを書きます。

"""
Pillowで大きさを変えた円を多数描画する
"""

import random
from PIL import Image, ImageDraw

def main():
    """
    画像作成処理
    """

    IMG_WIDTH = 640                    # 画像の幅
    IMG_HEIGHT = 640                   # 画像の高さ
    BLOCK_SIZE = 15                    # 円の直径
    BLOCK_MIN = 10                     # 円の直径の最小値
    BACKGROUND = (255, 255, 255)       # 背景色
    NUM_CIRCLES = 100                  # 描画する円の個数

    # 画像を作成
    im = Image.new("RGB", (IMG_WIDTH, IMG_HEIGHT), BACKGROUND)
    draw = ImageDraw.Draw(im)

    # 円を繰り返し描画する
    for i in range(NUM_CIRCLES):
        pos_x = int(random.random() * IMG_WIDTH)
        pos_y = int(random.random() * IMG_HEIGHT)

        block = int(((NUM_CIRCLES - i) / NUM_CIRCLES) * BLOCK_SIZE) ** 2 + BLOCK_MIN
        # 各色 36から255の乱数を生成
        r = int(random.random()*256)
        g = int(random.random()*256)
        b = int(random.random()*256)
        draw.ellipse((pos_x - block, pos_y - block, pos_x + block, pos_y + block), (r,g,b))

    # 画像を表示
    im.show()

if __name__ == '__main__':
    # 画像作成処理を実行
    main()

上のスクリプトをUTF-8のエンコーディングで、拡張子 .py のファイルにして保存します。
 Windowsだとコマンドプロンプト等を開いて、スクリプトを保存したフォルダにcdコマンドで移動して、 

python スクリプトファイル名 

で実行します。 実行すると、




 こんな感じの画像が表示されると思います。

0 件のコメント:

コメントを投稿