工学じじいの縁側日記

工学じじいの縁側日記

引退間際の工学じじいがきままに、プログラミングやデバイス、工学について呟きます。

python3とpycharmとpygameで画像表示してみた 第3回

画像を拡大縮小してみる

図:今回の目標

使うもの

前回までで、画像を表示できたのですが、画像を張り付けるときに拡大縮小をしてみます。
画像自体のサイズを変えてもいいのですが、今回は読み込んだ画像をプログラムの中で拡大縮小してみました。

使うモジュール

pygame.transformモジュール

を使います。
pygame.taransformモジュールには、いくつか拡大縮小ができるメソッドがあります。

モジュール 機能 備考
pygame.taransform.scale 指定Surfaceの拡大縮小を行う 速さ重視で拡大縮小
pygame.transform.smoothscale 指定Surfaceの拡大縮小を行う 見た目重視で拡大縮小*1

それぞれ引数は、(surface, (width, height)) で、変換後のsurfaceを返すメソッドになっています。

スクリプトを変更

今回は、pygame.transform.smoothscaleメソッドを使って拡大縮小してみます。
こっちのメソッドにした意味は。。。特にないです。なんとなく。

mainの中をこう変更します。
やっていることは、

  1. imagerectに元画像の幅と高さを記録
  2. ratioに拡大縮小率を決定
  3. ratioとimagerect.widthを使って変換後の画像幅を計算
  4. ratioとimagerect.heightを使って変換後の画像高を計算
  5. 元画像(image)を(imagerect.width, imagerect.height)の大きさに変換

となっています。

実行例(ratio=0.2)

図:ratio=0.2の時の実行例

ちゃんと縮んでますね!

実行例(ratio=2.0)

図:ratio=2.0の時の実行例

こちらもちゃんと拡大されています!

所感

拡大縮小も簡単にできました。
実は、紹介したメソッドのほかにも、拡大縮小できるメソッドが幾つかあります。

メソッド 戻り値 機能
pygame.transform.rotozoom(Surface, angle, scale) surface 拡大縮小回転を同時に行う
pygame.transform.scale2x(Surface) surface 画像を2倍に拡大

pygame.transform.smoothscaleのところを変更するだけなので試してみると面白いと思います。

図:pygame.transform.rotozoom(image, -45.0, 0.5)の例

こんけできれば、いろんたごだやれそんたなっす!*2
へだば、まだ。*3

12歳からはじめる ゼロからの Pythonゲームプログラミング教室

*1:拡大縮小に適用されるフィルタも指定できますが、ここでは割愛します

*2:このぐらいできれば、いろんなことができそうですね

*3:それじゃ、また!