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

news2024/9/20 15:05:43

前言

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

我们的下一步目标是完成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. 加载本地文件,将字符串转成图片填充到窗口。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1911806.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

文献解读-基准与方法研究-第十六期|《GeneMind 公司的 GenoLab M 测序平台 WGS 和 WES 数据基准测试》

关键词:基准与方法研究;基因测序;变异检测; 文献简介 标题(英文):Accuracy benchmark of the GeneMind GenoLab M sequencing platform for WGS and WES analysis标题(中文&#xf…

无法连接Linux远程服务器的Mysql,解决办法

问题描述 如果是关闭虚拟机之后,二次打开无法连接Mysql,则可尝试一下方法进行解决 解决方法 关闭虚拟机的防火墙 1:查看防火墙状态 systemctl status firewalld 一下显示说明防火墙是启动的状态 2:关闭防火墙 systemctl st…

Java线程死锁及解决方法

多线程环境下,死锁即两个或两个以上的线程去争夺同一个共享资源,而导致互相等待的情况。 要产生死锁,必须满足如下四个条件: 互斥条件,共享资源x和y只能被一个线程占有请求和保持条件,T1持有x&#xff0c…

7.9数据结构

思维导图 作业 doubleloop.h #ifndef __DOUBLELOOP_H__ #define __DOUBLELOOP_H__#include <stdio.h> #include <stdlib.h>typedef int datatype; typedef struct node {union{int len;datatype data;};struct node *pri;//前驱指针struct node *next;//后继指针…

Docker安装BRIA-RMBG-1.4模型,背景去除

目录 前言 模型描述 训练数据 定性评估 docker安装 运行 结论 Tip&#xff1a; 问题1&#xff1a; 问题2&#xff1a; 前言 BRIA 背景去除 v1.4 模型 RMBG v1.4 是我们最先进的背景去除模型&#xff0c;旨在有效地将各种类别和图像类型的前景与背景分开。该模型已在…

springboot会议室管理系统-计算机毕业设计源码50331

目 录 摘要 1 绪论 1.1 开发背景与意义 1.2国内外研究现状 1.3 相关技术、工具简介 1.3.1 MySQL数据库的介绍 1.3.2 B/S架构的介绍 1.3.3 Java语言 1.3.4 SpringBoot框架 1.4论文结构与章节安排 2 会议室管理系统需求分析 2.1 可行性分析 2.1.1 技术可行性分析 2…

昇思25天学习打卡营第21天|LSTM+CRF序列标注

1. 学习内容复盘 概述 序列标注指给定输入序列&#xff0c;给序列中每个Token进行标注标签的过程。序列标注问题通常用于从文本中进行信息抽取&#xff0c;包括分词(Word Segmentation)、词性标注(Position Tagging)、命名实体识别(Named Entity Recognition, NER)等。以命名…

一文实践强化学习训练游戏ai--doom枪战游戏实践

一文实践强化学习训练游戏ai–doom枪战游戏实践 上次文章写道下载doom的环境并尝试了简单的操作&#xff0c;这次让我们来进行对象化和训练、验证&#xff0c;如果你有基础&#xff0c;可以直接阅读本文&#xff0c;不然请你先阅读Doom基础知识&#xff0c;其中包含了下载、动作…

C++中的多重继承和虚继承:横向继承、纵向继承和联合继承;虚继承

多重继承 A.横向多重继承&#xff1a; B.纵向多重继承&#xff1a; C.联合多重继承&#xff1a; 因为 single 和 waiter 都继承了一个 worker 组件&#xff0c;因此 SingingWaiter 将包含两个 worker 组件&#xff0c;那么将派生类对象的地址赋给基类指针将出现二义性 那么如何…

AdaBoost集成学习算法理论解读以及公式为什么这么设计?

本文致力于阐述AdaBoost基本步骤涉及的每一个公式和公式为什么这么设计。 AdaBoost集成学习算法基本上遵从Boosting集成学习思想&#xff0c;通过不断迭代更新训练样本集的样本权重分布获得一组性能互补的弱学习器&#xff0c;然后通过加权投票等方式将这些弱学习器集成起来得到…

代码随想录——合并区间(Leecode LCR74)

题目链接 贪心 排序 class Solution {public int[][] merge(int[][] intervals) {ArrayList<int[]> res new ArrayList<>();// 先将数组按照左区间排序Arrays.sort(intervals, new Comparator<int[]>() {public int compare(int[] intervals1, int[] in…

CentOS 7:停止更新后如何下载软件?

引言 CentOS 7 是一个广受欢迎的 Linux 发行版&#xff0c;它为企业和开发者提供了一个稳定、安全、且免费的操作系统环境。然而&#xff0c;随着时间的推移&#xff0c;CentOS 7 的官方支持已经进入了维护阶段&#xff0c;这意味着它将不再收到常规的更新和新功能&#xff0c;…

第241题| 确定极限中参数问题 | 武忠祥老师每日一题

解题思路&#xff1a;确定极限中的参数的方法是求这个极限&#xff1b;求极限根据类型选方法。 形可以用到三种方法&#xff1a;洛必达&#xff0c;等价&#xff0c;泰勒。 先观察题目&#xff0c;将看成一个整体&#xff0c;同时,并令,整理之后如下&#xff1a; 这里也要想办…

MySQL架构优化及SQL优化

变更项目的整体架构是性能收益最大的方式。主要涉及两方面&#xff0c;一方面是从整个项目角度&#xff0c;引入一些中间件优化整体性能&#xff0c;另一方面是调整MySQL的部署架构&#xff0c;确保能承载更大的流量访问&#xff0c;提高数据层的整体吞吐。 1. 引入缓存中间件…

使用F1C200S从零制作掌机之USB游戏手柄

一、USB手柄 COIORVIS PC游戏手柄电脑USB FC模拟器经典游戏手柄 安卓手机有线连接单打格斗对打拳皇 经典有线手柄【黄色】 https://item.jd.com/10046453175183.html 插入USB即可自动识别。 # [ 1425.447643] usb 1-1: USB disconnect, device number 7 [ 1427.072155] usb …

方法引用 异常 file

目录 一.方法引用 1.方法引用概述 2.引用静态方法 3.引用成员方法 i.引用其他成员方法 ii.引用本类成员方法 iii.引用父类成员方法 4.引用构造方法 5.其他调用方式 i.使用类名引用成员方法 ii.引用数组的构造方法 二、异常 1.异常的作用 2.异常的处理方式 i.JVM…

Windows7彻底卸载mysql

1.控制面板卸载mysql 2.删除C:\Program Files\MySQL 3.删除C:\用户\Administrator\App Data\Roaming\MySQL”(App Data默认隐藏&#xff0c;需要在文件夹和搜索选项中勾选显示文件夹),为了删除的更彻底&#xff0c;可以直接在计算机全盘搜索MySQL关键字&#xff0c;将所有找到…

微信服务里底部的不常用功能如何优化的数据分析思路

图片.png 昨天下午茶时光&#xff0c;和闺蜜偶然聊起&#xff0c;其实在微信服务底部&#xff0c;有很多被我们忽略遗忘&#xff0c;很少点过用过的功能服务&#xff0c;往往进入服务只为了收付款或进入钱包&#xff0c;用完就走了&#xff0c;很少拉到底部&#xff0c;看到和用…

STM32的SPI接口详解

目录 1.SPI简介 2.SPI工作原理 3.SPI时序 3.1 CPOL&#xff08;Clock Polarity&#xff0c;时钟极性&#xff09;&#xff1a; 3.2 CPHA&#xff08;Clock Phase&#xff0c;时钟相位&#xff09;&#xff1a; 3.3 四种工作模式 4.相关代码 4.1使能片选信号 4.2使能通…

【WebGIS平台】传统聚落建筑科普数字化建模平台

基于上述概括出建筑单体的特征部件&#xff0c;本文利用互联网、三维建模和地理信息等技术设计了基于浏览器/服务器&#xff08;B/S&#xff09;的传统聚落建筑科普数字化平台。该平台不仅实现了对传统聚落建筑风貌从基础到复杂的数字化再现&#xff0c;允许用户轻松在线构建从…