前言
基础模块的知识通过这么长时间的学习已经有所了解,更加深入的话需要通过完成各种项目,在这个过程中逐渐学习,成长。
我们的下一步目标是完成python crash course中的外星人入侵项目,这是一个2D游戏项目。在这之前,我们先简单学习一下pygame模块。
私信我发送消息python资料,领取python crash course中文版PDF。
Pygame
Pygame
是一个开源的Python多媒体开发库,专门用于开发2D游戏。它是Python编程语言的一个扩展,基于 SDL (Simple DirectMedia Layer) 库,提供了丰富的功能来处理图形、声音、事件处理等游戏开发所需的基本要素,使得创建游戏变得更加简单直接。
pygame.image
pygame.image
模块是 Pygame
库的一部分,专门用于处理图像文件。它提供了加载、保存、转换和操作图像的能力。
常用函数介绍
pygame.image.load(filename)
- 功能:从文件中加载图像并返回一个 Surface 对象。
- 参数:filename 是图像文件的路径。
- 返回值:返回一个 Surface 对象,表示加载的图像。
这个函数可以说用了好几次,窗口图标,图片填充,应该都很熟悉了。
import pygame
# 初始化
pygame.init()
# 新建窗口
screen = pygame.display.set_mode((1200, 800))
# 加载图片
image = pygame.image.load("girl.webp").convert()
# 填充
screen.blit(image, (0, 0))
# 更新屏幕
pygame.display.flip()
# 点击关闭退出程序,这个后面再讲,代码可以先写上。
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
exit()
pygame.image.save(Surface, file)
- 功能:将 Surface 对象保存到文件系统中。
- 参数:Surface 是要保存的图像表面,file 是保存的目标文件路径。
- 返回值:无返回值。
这个功能简单理解就是把某个画布保存到本地。
import pygame
# 初始化
pygame.init()
# 新建窗口
screen = pygame.display.set_mode((800, 600))
# 加载图片
image = pygame.image.load("girl.webp").convert()
# 填充
screen.blit(image, (0, 0))
# 保存到本地
pygame.image.save(image, 'girl.png')
# 更新屏幕
pygame.display.flip()
# 点击关闭退出程序,这个后面再讲,代码可以先写上。
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
exit()
我们可以看到,目录下已经多了一个对应的png文件,并且这个文件保存的时候图片本身的大小,而不是我们限制窗口后窗口的大小。
pygame.image.get_extended()
- 功能:检查 Pygame 是否支持额外的图像格式(如 PNG、JPEG 等)。
- 参数:无。
- 返回值:如果支持额外格式,则返回 True,否则返回 False。
--snip--
if pygame.image.get_extended():
print("supported")
--snip--
pygame.image.tostring(Surface, format, flipped=False)
- 功能:将 Surface 数据转换为字符串格式,便于在网络上传输或存储。
- 参数:Surface 是要转换的图像表面,format 是输出的格式字符串(如 “RGB” 或 “RGBA”),flipped 如果为 True,则字符串缓冲区将垂直翻转。
- 返回值:返回一个包含图像数据的字符串。
这个函数和下一个一起讲
pygame.image.fromstring(string, size, format)
- 功能:从字符串数据创建一个新的 Surface。
- 参数:string 包含图像数据的字符串,size 是期望的尺寸元组,format 是数据的格式字符串。
- 返回值:返回一个 Surface 对象。
两个函数,一个是图片转字符串,一个是字符串转图片,一起展示方便理解。
import pygame
# 初始化
pygame.init()
# 新建窗口
screen = pygame.display.set_mode((1200, 800))
# 加载图片
image = pygame.image.load("girl.webp").convert()
image_data = pygame.image.tostring(image, "RGB")
new_surface = pygame.image.fromstring(image_data, image.get_size(), "RGB")
screen.blit(new_surface, (0, 0), (400, 0, 800, 800))
# 更新屏幕
pygame.display.flip()
# 点击关闭退出程序,这个后面再讲,代码可以先写上。
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
exit()
代码中除了转字符串和字符串转回图片画布是本身就要学习的函数外,其余的都是学过的知识,最后的填充图片就是截取了人像的一部分填充到了窗口中,不过由于窗口比图片大,所以剩余了一部分空白地方。
Surface.convert()
- 功能:将 Surface 转换为与显示设备兼容的格式,以提高绘制速度。
- 参数:可选参数是另一个 Surface 对象,以匹配其格式。
- 返回值:返回一个新转换的 Surface 对象。
这个函数最开始就写上了,没有很显式的作用,主要就是提高性能。
结尾
图片模块本身没有特别多的东西,主要还是要结合填充一起使用。
作业
- 加载图片,保存到本地。
- 加载图片,保存字符串到本地文件。
- 加载本地文件,将字符串转成图片填充到窗口。