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

Pygameで読み込んだ画像をプログラム上で拡大・縮小する方法を紹介。pygame.transform.smoothscaleを使い、倍率から変換後の幅と高さを計算して表示します。

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

画像を拡大縮小してみる

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

画像を拡大縮小してみる

使うもの

  • 前回のプロジェクト
  • 前回のスクリプト
  • 前回の画像

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

使うモジュール

pygame.transformモジュール

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

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

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

スクリプトを変更

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

Gistのソースコードを直接開く

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

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

となっています。

実行例(ratio=0.2)

f:id:gomta777:20191008004321p:image:w200

図:ratio=0.2の時の実行例

ちゃんと縮んでますね!

実行例(ratio=2.0)

f:id:gomta777:20191008004321p:image:w200

図:ratio=2.0の時の実行例

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

所感

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

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

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

f:id:gomta777:20191008012537p:image:w200

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

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

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

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

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

*3:それじゃ、また!