当前位置: 首页 > news >正文

Python学习笔记33:进阶篇(二十二)pygame的使用之image模块

前言

基础模块的知识通过这么长时间的学习已经有所了解,更加深入的话需要通过完成各种项目,在这个过程中逐渐学习,成长。

我们的下一步目标是完成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 对象。

这个函数最开始就写上了,没有很显式的作用,主要就是提高性能。

结尾

图片模块本身没有特别多的东西,主要还是要结合填充一起使用。

作业

  1. 加载图片,保存到本地。
  2. 加载图片,保存字符串到本地文件。
  3. 加载本地文件,将字符串转成图片填充到窗口。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【笔记】在window上连接虚拟机中的redis
  • PTA - 编写函数计算圆面积
  • 垃圾回收器详解
  • mybatis-plus中的方法的作用
  • 【网络安全的神秘世界】XSS基本概念和原理介绍
  • FFmpeg引用计数数据缓冲区相关的结构体:AVBuffer、AVBufferRef简介
  • 3款ui设计师必备的高效软件,一定要收藏!
  • 谷粒商城 - 编写一个自定义校验注解
  • k8s-第一节-minikube
  • [从0开始轨迹预测][NMS]:NMS的应用(目标检测、轨迹预测)
  • 数据库图形化管理界面应用 Navicat Premium 使用教程
  • 基于SpringBoot构造超简易QQ邮件服务发送 第二版
  • 【持续集成_03课_Linux部署Sonar+Gogs+Jenkins】
  • HTML(30)——动画
  • QT调节屏幕亮度
  • 【技术性】Search知识
  • C++类的相互关联
  • Java|序列化异常StreamCorruptedException的解决方法
  • Lsb图片隐写
  • October CMS - 快速入门 9 Images And Galleries
  • PHP 小技巧
  • Spark学习笔记之相关记录
  • Unix命令
  • 关于 Linux 进程的 UID、EUID、GID 和 EGID
  • 类orAPI - 收藏集 - 掘金
  • 入门级的git使用指北
  • 远离DoS攻击 Windows Server 2016发布DNS政策
  • 运行时添加log4j2的appender
  • 怎样选择前端框架
  • ​【数据结构与算法】冒泡排序:简单易懂的排序算法解析
  • ​io --- 处理流的核心工具​
  • ​如何防止网络攻击?
  • # Kafka_深入探秘者(2):kafka 生产者
  • $分析了六十多年间100万字的政府工作报告,我看到了这样的变迁
  • (c语言版)滑动窗口 给定一个字符串,只包含字母和数字,按要求找出字符串中的最长(连续)子串的长度
  • (HAL库版)freeRTOS移植STMF103
  • (二)windows配置JDK环境
  • (附源码)springboot“微印象”在线打印预约系统 毕业设计 061642
  • (过滤器)Filter和(监听器)listener
  • (回溯) LeetCode 40. 组合总和II
  • (九)c52学习之旅-定时器
  • (免费领源码)Java#ssm#MySQL 创意商城03663-计算机毕业设计项目选题推荐
  • (四)docker:为mysql和java jar运行环境创建同一网络,容器互联
  • (原創) 如何動態建立二維陣列(多維陣列)? (.NET) (C#)
  • (转)iOS字体
  • (转)setTimeout 和 setInterval 的区别
  • *2 echo、printf、mkdir命令的应用
  • .naturalWidth 和naturalHeight属性,
  • .NET C# 使用GDAL读取FileGDB要素类
  • .NET C#版本和.NET版本以及VS版本的对应关系
  • .net framework 4.0中如何 输出 form 的name属性。
  • .net framework4与其client profile版本的区别
  • .NET关于 跳过SSL中遇到的问题
  • .net企业级架构实战之7——Spring.net整合Asp.net mvc
  • .Net下C#针对Excel开发控件汇总(ClosedXML,EPPlus,NPOI)