《Python实例》用Pillow录制屏幕,制作gif ,太简单了

举报
香菜聊游戏 发表于 2021/08/11 17:26:02 2021/08/11
【摘要】 python录屏制作gif

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


上面的代码会将屏幕生成图片保存到当前代码所在的文件夹下

1.png

从结果可以看到上面的代码能够捕获屏幕,并且生成图片,可以衔接我之前所做的工作,用图片合成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)


测试一下,运行一下看看结果

2.gif

基本上完成了我的需求。

6、总结:
1、可以优化坐标的选取,我现在设置的直接取左上角,可以在设计界面的时候由用户选取

2、可以优化速度,现在的速度没有经过精确计算,似乎有点快,懒得出来了,交给你了。

3、下面要做的是搞个界面,有点难,我也不擅长,可能会放弃,你加油

4、写代码的过程中遇到的问题,图片的截取,差点没找到接口要用其他的库去截取
————————————————

【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。