【Python】Pygameで画像を描画
今回は、Pygameを使って画像を描画するプログラムを書いてみました。
サンプルプログラム
from pygame.locals import * import pygame import sys def main(): pygame.init() # Pygameを初期化 screen = pygame.display.set_mode((400, 330)) # 画面を作成 pygame.display.set_caption("Pygame sample app") # タイトルを作成 running = True #メインループ while running: screen.fill((0,0,0)) #画面を黒で塗りつぶす # 画像を描画 #--------------- 1.画像を読み込む -------------------------- #普通に画像を表示する方法 img1 = pygame.image.load("img1.jpg") #一部の色を透明にする img2 = pygame.image.load("img2.jpg").convert() colorkey = img2.get_at((0,0)) img2.set_colorkey(colorkey, RLEACCEL) #画像の大きさを変える img3 = pygame.image.load("img3.jpg") img3 = pygame.transform.scale(img3, (200, 130)) #200 * 130に画像を縮小 #--------------- 2.画像を表示 -------------------------- screen.blit(img1, (20, 20)) screen.blit(img2, (150,20)) screen.blit(img3, (20, 170)) pygame.display.update() #描画処理を実行 for event in pygame.event.get(): if event.type == QUIT: # 終了イベント running = False pygame.quit() #pygameのウィンドウを閉じる sys.exit() #システム終了 if __name__=="__main__": main()
上のプログラムを実行してください。
実行する際は、スクリプトファイルと同じ場所に「img1.jpg」、「img2.jpg」、「img3.jpg」を作成してください。
私の環境でテストしたときのimg1~3の画像を上げておきます。
img1 :
img2 :
img3 :
手元に画像がない場合は、↑の画像を「名前を付けて保存」して適当な場所に保存してから実行してください。
実行結果
このようになるはずです。
上の画像が3つ、正常に読み込まれて描画されていることがわかります。
解説
Pygameを使って、画面ウィンドウ上に画像を表示する方法について解説していきます。
対応フォーマット(拡張子)
Pygameでは、pygame.image.load()関数で画像を読み込みますが、load()関数が対応しているフォーマットは以下のものが対応しています。
GIFはアニメーションGIFはサポートしておらず、静止画のみが読み込み可能です。
image - Pygameドキュメント 日本語訳
概要
画像の読み込みは、2ステップで行うことができます。
#STEP1 画像を読み込み img = pygame.image.load("img.jpg") #STEP2 画像を表示 screen.blit(img, (100, 100))
まず、pygame.image.load("画像ファイル名")で画像を読み込みます。
上で紹介したように多くのフォーマットに対応しているので、この関数だけで十分でしょう。
この関数の返り値はSurfaceです。作成されたSurfaceは、読み込み元の画像のカラー形式、透明色、透明度を持っています。
また、引数を設定せずにSurface.convert()命令を実行することにより、現在の描写環境に最適化された形式へ変換したコピーを作ることができます。
透明化をするときにはconvert()関数を走らせましょう。
#convert()の書き方1 img = pygame.image.load("img.jpg").convert() #convert()の書き方2 img = pygame.image.load("img.jpg") img = img.convert()
特定の色を透明化する
Pygameの画像表示では、画像内のある一色を透明に設定することができます。
上のプログラムでは、以下の部分が該当します。
img2 = pygame.image.load("img2.jpg").convert() colorkey = img2.get_at((0,0)) #colorkey = (255, 255, 255) img2.set_colorkey(colorkey, RLEACCEL) screen.blit(img2, (150,20))
画像の透明化を行う前に、convert()関数を実行して画像のSurfaceデータを最適化する必要があります。この作業は通常表示の時には必要ありません。
そして、set_colorkey(colorkey, RLEACCEL)関数で特定の色を透明化します。
第一引数にはカラーキーを入力します。カラーキーには、透明色にしたいRGB値を入れます。なので、
colorkey = img2.get_at((0,0)) colorkey = (255, 255, 255)
のどちらでも動作します。
img.get_at((x,y))関数は、imgの画像の(x, y)ピクセルの色を取得する関数です。
上のプログラムでは、
colorkey = img2.get_at((0,0))
と書いています。img2には手書きの「あ」の画像を使いましたが、この画像の(0,0)のピクセルの色は白なので(255,255,255)を返します。
あとは、screen.blit()関数を使って通常通り描画するだけです。