gif 的文章上次实现了图片的合成,看下我们上次的需求分解
1、需求分析 我的需求就是能录制gif 图片,因为第一次做这种东西,所以需要分解需求。
步骤一:我需要能录屏,也就是截屏功能,将当前屏幕保存,技术方案暂时没定,这次实现
步骤二:我需要能把截屏的图片进行合并,合成gif图片,已经找到合适的库,立即做。已实现
步骤三:将python文件进行界面友好化,非核心功能,延期。
步骤二已经实现,步骤一我们这次实现
2、技术分析 依然使用Pillow实现我呢的录屏功能,Python使用的3.8 ,Pillow的具体安装上次的文章中有详细的情况。
简单的说就是pip install pillow
上篇链接:《Python实例》自己用Python写个gif生成工具,Pillow 真TM简单!
3、需求详细分解 1.实现录屏功能
2.可以调节录屏的帧率,防止生成的gif 文件过大
3.可以选择录屏的部分区域生成
4.可以在开始的时候选择延时处理
4、测试接口 我在测试录屏功能的代码:
def takeSnapTest(): m = int(input("请输入想抓屏多少秒:")) n = 1 m = frame * m while n < m: sleep(sleepTime) im = ImageGrab.grab() local = (r"%s.jpg" % (n)) im.save(local, 'jpeg') n = n + 1 复制代码
上面的代码会将屏幕生成图片保存到当前代码所在的文件夹下
从结果可以看到上面的代码能够捕获屏幕,并且生成图片,可以衔接我之前所做的工作,用图片合成gif
5、show you code 需求也分析,接口也验证了,直接撸代码。
#!/usr/bin/env python # encoding: utf-8 """ #Author: 香菜 @time: 2021/8/9 0009 下午 8:55 """ from time import sleep from PIL import ImageGrab frame = 10 sleepTime = 1.0 / frame def makeGif(imgList): im = imgList[0] im.save('beauty.gif', save_all=True, append_images=imgList[1:], loop=0, duration=sleepTime) def takeSnap(): m = int(input("请输入想抓屏多少秒:")) x = int(input("多少秒后开始,0 立即开始:")) if x != 0: sleep(x) n = 1 m = frame * m imgList = [] while n < m: sleep(sleepTime) im = ImageGrab.grab() w, h = im.size cropim = im.crop((0, 0, w / 2, h / 2)) # local = (r"%s.jpg" % (n)) imgList.append(cropim) # cropim.save(local, 'jpeg') n = n + 1 return imgList if __name__ == '__main__': imgList = takeSnap() makeGif(imgList) 复制代码
测试一下,运行一下看看结果
基本上完成了我的需求。
6、总结: 1、可以优化坐标的选取,我现在设置的直接取左上角,可以在设计界面的时候由用户选取
2、可以优化速度,现在的速度没有经过精确计算,似乎有点快,懒得出来了,交给你了。
3、下面要做的是搞个界面,有点难,我也不擅长,可能会放弃,你加油
4、写代码的过程中遇到的问题,图片的截取,差点没找到接口要用其他的库去截取