python3とpycharmとpygameで画像表示してみた 第3回
Pygameで読み込んだ画像をプログラム上で拡大・縮小する方法を紹介。pygame.transform.smoothscaleを使い、倍率から変換後の幅と高さを計算して表示します。
画像を拡大縮小してみる
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の中をこう変更します。
やっていることは、
- imagerectに元画像の幅と高さを記録
- ratioに拡大縮小率を決定
- ratioとimagerect.widthを使って変換後の画像幅を計算
- ratioとimagerect.heightを使って変換後の画像高を計算
- 元画像(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:それじゃ、また!