LoginSignup
8
7

More than 5 years have passed since last update.

PIL(Python Imaging Library)で、点を描画するサンプル。

Last updated at Posted at 2013-07-24

Python 2.7で実行。まだPILはPython 3系には対応していないもよう。

※自分の学習用のメモです。

なにをやりたいのか

CGの基本はふたつあります。

ひとつは、任意の座標に点を打つこと。

もうひとつは、任意の座標の点を読み込むこと。

このふたつの機能があれば、理論上、どんな絵もかける……らしいです。

ここでは前者の点を描画してみます。

後者については後ほど(こちら→)PIL(Python Imaging Library)で、画像をセピア調に変換する - Qiita

実行結果

はじめに結果から。こんな風に点を打ちます。

image-set-flower.png

スクリプト

PIL(Python Imaging Library)を使って画像ファイルを作成する。 - Qiita

を元に以下のように書きました。

image-set-flower.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-
'''
点を打つサンプル
'''

import Image
import ImageDraw

def drawing(img, gap):
    """
    描画(ファイルに書く画像データを編集する)
    点を打つ
    """
    x,y = img.size
    draw = ImageDraw.Draw(img)
    for i in range(0,x,gap):
        for j in range(0,y,gap):
            # ↓こんなパターンを描く
            #■■■□
            #■□■□
            #■■■□
            #□□□□
            draw.point((i  , j  ),(0xff,0x00,0x00)) #red
            draw.point((i+1, j  ),(0xff,0x00,0x00)) #red
            draw.point((i+2, j  ),(0xff,0x00,0x00)) #red
            draw.point((i+3, j  ),(0x00,0xff,0x00)) #green

            draw.point((i  , j+1),(0xff,0x00,0x00)) #red
            draw.point((i+1, j+1),(0xff,0xff,0x00)) #yellow
            draw.point((i+2, j+1),(0xff,0x00,0x00)) #red
            draw.point((i+3, j+1),(0x00,0xff,0x00)) #green

            draw.point((i  , j+2),(0xff,0x00,0x00)) #red
            draw.point((i+1, j+2),(0xff,0x00,0x00)) #red
            draw.point((i+2, j+2),(0xff,0x00,0x00)) #red
            draw.point((i+3, j+2),(0x00,0xff,0x00)) #green

            draw.point((i  , j+3),(0x00,0xff,0x00)) #green
            draw.point((i+1, j+3),(0x00,0xff,0x00)) #green
            draw.point((i+2, j+3),(0x00,0xff,0x00)) #green
            draw.point((i+3, j+3),(0x00,0xff,0x00)) #green

    return img

def make_image(screen, bgcolor, filename):
    """
    画像ファイルを作成
    """
    img = Image.new('RGB', screen, bgcolor)

    # 間隔(5~32くらい)
    gap = 8

    img = drawing(img, gap)
    img.save(filename)

if __name__ == '__main__':
    # 画像のサイズ
    screen = (800,600)

    # 画像の背景色(RGB)
    bgcolor=(0xdd,0xdd,0xdd)

    # 保存するファイル名(ファイル形式は、拡張子から自動的に判別する)
    filename = "image-set-flower.png"

    make_image(screen, bgcolor, filename)

#EOF


8
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
7