pygame游戏素材预处理
文章目录
- 前言
- 一、pillow库安装
- 二、pillow库使用
- 1、引入pillow库
- 2、图片打开、保存
- 3、图片处理
- 4、动态图片
- 三、函数封装
- 1、引入库
- 2、获取GIF帧数
- 3、拆分GIF,修改尺寸
- 4、连接图片
- 5、转换格式
- 6、修改大小
- 7、主函数
- 四、处理效果
- 总结
前言
游戏素材资源网址
pygame库只能展示图片的静态效果,要形成动态效果,可将GIF文件按帧提取拼接,循环展示。
Python的pillow库提供了简便的图片操作方法,包括图片尺寸修改、格式修改、区域剪切、粘贴等,让你不再为手动处理图片而苦恼。
一、pillow库安装
pip install pillow
在Python3.9中已经自带pillow库,无需安装。
二、pillow库使用
下面只介绍与素材处理有关的一些基本使用方法。
1、引入pillow库
from PIL import Image
2、图片打开、保存
im = Image.new("RGBA", (x, y)) #新建图片
image = Image.open("bean.jpg") #打开图片
print(image.size) #返回(长,宽)
image.show() #展示
image.save("flower.png") #保存图片
3、图片处理
region = (0, 0, 32, 32) #(左、上、右、下)
img = im.crop(region) #剪切
img = img.resize((x,y),Image.ANTIALIAS) #修改尺寸,抗锯齿
im.paste(img, region) #类似于blit方法,大小必须匹配
4、动态图片
im.tell() #返回当前帧数
im.seek(1)#选择帧数
三、函数封装
下面对常用素材处理所需的功能进行函数封装,可根据需要选择相应的函数。
1、引入库
from PIL import Image
2、获取GIF帧数
def TELL(fname):im = Image.open(fname)try:while True:im.seek(im.tell()+1)except Exception as e:print(e)passprint("共{}帧".format(im.tell()+1))return im.tell()+1
3、拆分GIF,修改尺寸
def SEEK(fname, path, x, y, name, num, t):im = Image.open(fname)try:i = 0j = TELL(fname)//num while i < num:im.seek(i*j)img = im.resize((x,y), Image.ANTIALIAS)img.save(path + name + str(i) + "."+ t)print("已读取{}项".format(i+1))i += 1except Exception as e:print(e)passprint("读取完毕")
4、连接图片
def PASTE(path, x, y, name, num, t):target = Image.new("RGBA", (x*num, y))for i in range(num):try:im = Image.open(path + name + str(i)+ "."+ t)im = im.resize((x,y), Image.ANTIALIAS)region = (i*x, 0, (i+1)*x, y)target.paste(im, region)except Exception as e:print(e)passadd = "_{}x{}_{}.png".format(x, y, num)target.save(path + name + add)print("合并完毕")
5、转换格式
def TRANS(fname, t):im = Image.open(fname)path = fname.split(".")[0]+"."+tim.save(path)print("转换完毕")
6、修改大小
def SIZE(fname, x, y, name, t):im = Image.open(fname)im = im.resize((x,y), Image.ANTIALIAS)add = "_{}x{}.png".format(x, y)im.save(path + name + add)print("转换完毕")
7、主函数
def main(fname, path, x, y, name, num, t): #(原文件地址,新文件路径,目标宽度,目标高度,数目,目标格式)#TELL(fname) #返回GIF帧数#SEEK(fname, path, x, y, name, num, t) #拆分GIF,修改尺寸#PASTE(path, x, y, name, num, t) #合并图片#TRANS(fname, t) #转换格式#SIZE(fname, x, y, name, t) #修改大小
if __name__ == "__main__":fname = "C:/Users/lenovo/Desktop/py/代码/游戏开发/动起来/data/flower.gif"path = "C:/Users/lenovo/Desktop/py/代码/游戏开发/动起来/data/"name = "flower"x,y =100,100num = 5t = "png"main(fname, path, x, y, name, num, t)
四、处理效果
原图
运行结果
总结
- pygame无法直接展示动态图片,需要把动态图片截取为图片序列,Python遇到的问题要用Python解决。
- pillow库的对图片素材操作非常简便,易于上手。
- 根据实际需要选择使用上面的函数或者加以修改可以简单地处理游戏素材,不再依靠图片处理软件。
- 处理gif文件时,可先用TELL获得帧数,再用SEEK和PASTE获得图片序列。
pygame游戏素材预处理相关推荐
- python pygame小游戏素材图片_pygame 打飞机(小游戏)
0.游戏的基本实现 ''' 游戏的基本实现 游戏的初始化:设置游戏窗口,绘制图像的初始位置,设定游戏时钟 游戏循环:设置刷新频率,检测用户交互,更新所有图像位置,更新屏幕显示 ''' 1.安装pyga ...
- Pygame游戏飞机大战《星野守望》
程序地址:网页链接 注意:目前只支持win系统. 游戏做的不完整,只能用来体验体验. 最近接触了Pygame游戏编程,十分感兴趣,学习了一本相关书籍以及查阅了Pygame的官网https://www. ...
- 【pygame游戏开发】这几个经典游戏,勾起了少年的快乐
给大家分享几个好玩有趣的小游戏,既提升了学习的兴趣,又提升了学习效率,告别枯燥的学习. 一.飞机大战 1.源码部分 模块导入 import sys import cfg import pygame f ...
- pygame游戏实例入门
pygame游戏实例入门 开发环境 第三方库安装 任务介绍 大概实现思路 具体实现流程 游戏背景界面 猴子类 猴子类编写 猴子类运行 香蕉类 香蕉类编写 香蕉类运行 综合编写及碰撞检测 总结 开发环境 ...
- 《Python和Pygame游戏开发指南》——2.16 pygame.display.update()函数
本节书摘来自异步社区<Python和Pygame游戏开发指南>一书中的第2章,第2.16节,作者[美]Al Sweigart(斯维加特), 李强 译,更多章节内容可以访问云栖社区" ...
- 《Python和Pygame游戏开发指南》——1.12 图书中的文本折行
本节书摘来自异步社区<Python和Pygame游戏开发指南>一书中的第1章,第1.12节,作者[美]Al Sweigart(斯维加特), 李强 译,更多章节内容可以访问云栖社区" ...
- unity3d collider自动调整大小_自动网格组合建模工具Unity游戏素材资源
分享最新的CG教程与素材资讯! 人人素材RRCG-专业的CG艺术交流网站 点击上方蓝字关注人人素材 本游戏资料是自动网格组合建模工具Unity游戏素材资源,大小:735 KB ,格式:unitypac ...
- 【分享-免费下载】免费下载配乐/视频/平面设计/游戏素材
免费下载配乐/视频/平面设计/游戏素材 官网:https://www.aigei.com/s?type=music 网站有大量的音乐.配乐.音效可供免费下载: 除了音乐以外,还有视频.游戏素材.平面设 ...
- unity场景素材_[游戏素材]游戏场景环境天气变化Unity游戏素材资源
分享最新的CG教程与素材资讯! 人人素材RRCG-专业的CG艺术交流网站 点击上方蓝字关注人人素材 本游戏资料是游戏场景环境天气变化Unity游戏素材资源,大小:143 MB ,格式:unitypac ...
- 【Python笔记】pygame 游戏框架
pygame 游戏框架 初识 pygame 安装 pygame pygame 常用模块 pygame 的基本使用(跳跃的小球游戏) 初识 pygame pygame 是跨平台 Python 模块,专为 ...
最新文章
- 功率增长步长(powerRampingStep)
- 与阿里云容器服务 ACK 发行版的深度对话第一弹:如何借助 sealer 实现快速构建 部署
- Java技术分享:什么是数据库连接池?
- C++ Opengl 绘制纹理字符源码
- 一段js动态操作table代码
- html实体转化字符串 php_php将字符串转为HTML的实体引用的一个类
- mysql二进制大文件_Mysql实例Mysql LONGTEXT 类型存储大文件(二进制也可以) (修改+调试+整理)...
- BaseColumns类的作用
- core文件如何分析
- else列表推导式 if python_python3基础09列表推导式|迭代器|生成器|匿名函数
- saltstack 初始化LINUX系统
- 第十二章课下测试补交博客
- 数据科学即将迎来“无代码”时代
- 环境配置就是安装软件,修改软件的配置文件,安装软件就是文件的复制,与新增--linux下一切皆文件...
- #读书笔记#《挪威森林》 | 当孤独,如影随形
- kettle执行SQL脚本
- ubuntu 16.04 安装谷歌拼音输入法
- JAVA日期转换函数(包括:日期、周数的计算)
- 怎么在计算机登录VMware,vmware虚拟机怎么用,vmware虚拟机的使用方法
- 贝茜放慢脚步(寒假每日一题 14)
热门文章
- C语言short精解
- k8s学习-网络策略NetworkPolicy(概念、模版、创建、删除等)
- 语音信号特征处理--Fbank\MFCC
- 用python绘制万花筒_Python实现PS滤镜的万花筒效果示例
- 正则表达式系列之 —— 模式(Patterns)和修饰符(flags)
- HearthBuddy卡牌无法识别
- 小牛M+怎么样 看过你才知道
- 深圳市集体户户口簿首页pdf版获取指南
- ASCII码为0x01,0x02作为分隔符(这两个字符是键盘无法输入的)
- 计算机驱动程序恢愎,如果意外卸载了计算机鼠标驱动程序,该怎么办_解决方案,以不小心卸载鼠标驱动程序...