pygame游戏素材预处理


前言

游戏素材资源网址

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)
        pass
    print("共{}帧".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 = 0
        j = 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 += 1
    except Exception as e:
        print(e)
        pass
    print("读取完毕")

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)
            pass
    add = "_{}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]+"."+t
    im.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,100
    num = 5
    t = "png"
    main(fname, path, x, y, name, num, t)

四、处理效果

原图
在这里插入图片描述
运行结果
在这里插入图片描述
在这里插入图片描述


总结

  • pygame无法直接展示动态图片,需要把动态图片截取为图片序列,Python遇到的问题要用Python解决。
  • pillow库的对图片素材操作非常简便,易于上手。
  • 根据实际需要选择使用上面的函数或者加以修改可以简单地处理游戏素材,不再依靠图片处理软件。
  • 处理gif文件时,可先用TELL获得帧数,再用SEEK和PASTE获得图片序列。
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值