Pygame(十三)图像
前言
对于一些复杂的游戏或者想要让我们的游戏角色与场景更加逼真与形象,用Pygame自带的作图方法就会显得很无奈.
因此善用图片资源就成了我们的一个重要的手段.
pyame中,图片资源的操作用的是image模块
本节提要
内容详情
加载图片
image_surface = pygame.image.load(filepath)
image_surface = pygame.image.load(fileobj, namehint)
参数说明:
- filepath: 图片文件的路径
- fileobj: Python文件操作句柄
- namehint: 文件名注解(这个基本用不到)
示例1:
import sys
import pygame
pygame.init()
screen = pygame.display.set_mode((800, 600))
with open("img.png", "r") as f:
image_surface = pygame.image.load(f)
screen.blit(image_surface, (0,0))
pygame.display.update()
while 1:
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit()
效果图:
以上示例要求程序目录下有:"img.png"文件.
备注:
- 用fileobj这种方法基本很少用到得.
示例二:
# /usr/bin/python3
# Author: 爱编程的章老师
# @Time: 2021/1/11 0011
# E-mail: [email protected]
import sys
import pygame
pygame.init()
screen = pygame.display.set_mode((800, 600))
image_surface = pygame.image.load("img.png")
screen.blit(image_surface, (0,0))
pygame.display.update()
while 1:
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit()
效果同上
一般我们用这种方法
但是实际上.当我们load了一个文件以后,通常为了提高性能,还会将之转换为convert
实际应用:
image_surface = pygame.image.load("img.png").convert()
image_surface = pygame.image.load("img.png").convert_alpha()
两者的区别是当图像是带有透明效果的图片时要用convert_alpha()否则用convert()
即后者保留透明效果,前者不保留透明效果
看一下两者的对比
先上convert_alpha()的图
再看convertI()的图
可以清楚的看到,同样的图片源,一个因为背景透明了,所以能看到后面的黑色背景,一个不透明,原本透明的地方用白色来代替了,从而看不到背景的黑色了
因此在使用的时候注意选择正确的方法.
总结:
load()方法
- 参数尽可能用文件路径
- 在用load()方法时,根据图片文件的透明与否选择convert()或convert_alpha()方法将之转化为更有效率的格式.
load()方法支持的格式:
save()
这个方法将surface对象对应的内容保存到磁盘上.
pygame.image.save(surface, filename)
示例:
def save():
pygame.init()
screen = pygame.display.set_mode((800, 600))
surface_a = pygame.Surface((100,100))
pygame.draw.circle(surface_a, "red", (50,50), 30)
pygame.image.save(surface_a, "a_red_circle.jpg")
while 1:
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit()
代码解析:
surface_a = pygame.Surface((100,100))
创建了一个100的正方形surface对象
pygame.draw.circle(surface_a, "red", (50,50), 30)
在上面创建的surface对象的中心上画了一个半径30的圆.
pygame.image.save(surface_a, "a_red_circle.jpg")
将画好的圆保存到程序目录下得a_red_circle.jpg文件
打开这个文件可以看到:
保存的文件支持以下格式:
如果不在文件名中指定格式(扩展名),则默认TGA格式
get_extender()
tostring()
fromstring()
frombuffer()
后记
图像的操作是我们将游戏打造的更加精美的必不可少的操作
本节主要讲解了load()方法与save()方法
其中又以load()方法为主.
其他的四种方法,了解一下即可.平时用的非常少.