逐字动画不独享,自动生成皆有它。2行代码自动生成字幕gif动画。

逐字动画不独享,自动生成皆有它。2行代码自动生成字幕gif动画。

李兴球 李兴球Python 今天

图片

最近造了一个小轮子,它的名字叫gameturtle。中文为游戏海龟。这个模块提供了Sprite,即角色类。用它可以配合tkinter模块制作有趣的动画和游戏。内置了像素级别碰撞检测等功能。最后一次版本是0.262版,增加了拆帧,合帧,自动生成字幕gif动画的功能。这样,别人用十几行,几十行代码解决的问题。我只要三、四行代码就能解决,大大提升了我的编程效率。我经常用来它来干些小活。运转得还不错,想用的可以拿去用。读者只需要用cmd命令打开管理员窗口,输入pip install gameturtle即可自动安装了。就像下面这样:

 

图片

 

一段文字,我们需要把它们逐字地在一张背景图片上显示出来,就像下面这样:

图片

要实现自动生成上面的gif动画,需要多少行代码呢?

下面主要有2行代码就行了。代码依次如下所示:

 

from gameturtle import txt2images,makegif
s = "学会编程能提升认知水平吗?一切都得自己实践呀。不过自从学了Python,我的认知水平确实提升了很多。"
frames = txt2images(s)                # 返回列表,保存逐帧字幕
makegif(frames,'提升认知.gif')         # 合并所有帧到gif文件中。

第一行代码是从gameturtle模块里导入了两个命令。

txt2images命令能把字符串转换成逐帧的图形。

makegif能把所有帧合成到一张gif图里面。

图片

上面的代码太简单了。如何修改上面gif动画的背景图、字体大小、颜色等呢?下面我们看一下txt2images函数的定义头:

  •  
def txt2images(string,width=480,height=360,background=None,margin=68,fontsize=18,               fontfile="simkai.ttf",fgcolor=(150,200,200,255),bgcolor=(0,0,0,0)):        """文本转逐帧图像,string:字符串,width:宽度,height:高度,background:背景图或颜色,       margin:边距,fontsize:字体大小,fgcolor:字的颜色,bgcolor:背景色
    """

我们看到,它9个参数。

第1个参数,string表示要在图片上写的字。它是一个字符串。

第2个参数,width表示生成的gif图的宽度。

第3个参数,height表示生成的gif图片的高度。

第4个参数,background表示生成的gif图片的背景图形。默认为None表示没有背景图。

第5个参数,margin是边距,表示字距离图片上、左、右的像素距离。

第6个参数,fontsize就是字体大小了。

第7个参数,fontfile,这是字体文件,默认为楷体字。

第8个参数,fgcolor,这是字的前景色,也就是字的颜色了。

第9个参数,bgcolor,这是没有背景图时的背景颜色。

这个函数返回所有帧,也就是返回所有图形对象的列表,以便外部调用这个列表。现在,读者应该知道如何使用txt2images这个命令了吧。

 

图片

 

那么makegif命令有些什么参数呢?它是用来合帧的。所谓合帧就是把图片都放在一张gif图里,让它们每隔一定的时间显示。

下面我们来看下它的函数定义:

  •  
def makegif(images,filename=None,duration=200,quality=85):   """合帧      images: 列表或者一个路径。如果是列表,则里面的是图形对象。如果是路径,则是一个字符串而已      filename: 输出的gif文件名      注意path下面的文件名要是这样的:0.png,1.png,2.png....    """

从上面我们能看出,它的第一个参数是images,这表示一些图片。这个参数又大致分为两种情况:

如果images是一个路径,那么这个路径下面的图片文件名应该依次是0.png,1.png,2.png,3.png....。

如果images是一个列表或者元组,那么它里面应该是一些图形对象。这些图形对象可以用txt2images命令生成。

第2个参数是filename,也就是待生成的gif文件名。如果这个参数值为None,则函数会随机生成一个文件名。

第3个参数是duration,表示gif文件中每张图片默认显示的时间,单位是毫秒。

第4个参数是quality,这是质量。100表示质量最高,当然,生成的gif文件也越大。

 

图片

上面的makegif是用来合帧的,其实gameturtle模块里还提供了拆帧命令,即splitgif。这样,别人用好多行代码才能解决,用splitgif命令,一行代码搞定。关键是还支持一种扩展名为webp的动态图片文件!这个函数只有一个参数,就是gif文件名。它返回所有帧形成的列表和自己的pillow图形对象。

所谓pillow图形对象就是用pillow模块Image的open或者new命令返回的图形对象。通过它能访问图形的一些属性。其实每一帧都是一个pillow图形对象。下面是一个简单的例子。

  •  
import osfrom gameturtle import splitgif
file = 'sun.gif'                          frames,im = splitgif(file)                # 拆帧,支持gif和webp格式的动图
print('所有帧:',frames)print()print()print('图形对象信息:',im.info)
path = 'frames'if not os.path.exists(path):os.mkdir(path)# 如果path不存在,则建立这个文件夹i = 0for fm in frames:    filename = f"{path}/{i}.png"    fm.save(filename)    i += 1

 

上面的程序把sun.gif文件拆成了很多帧,都保存在frames列表中。im则是gif文件在内存中的包装。通过im可以访问到图像的各种属性,如宽度,高度,gif图是否循环播放。每一帧播放的时间间隔。

 

笔者特别编写了几个例子,还附有素材。想要的关注   李兴球Python公众号,回复:makegif 即可免费下载。

 

图片

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

李兴球

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值