编写python程序用来测试执行一次ImageGrab.grab方法需要多少时间

想用pillow库ImageGrab.grab方法编写一个录屏程序,录制自己编写游戏界面,将录制多个图像转换为GIF格式动图,作为游戏的效果图。但网上文章说,执行一次grab方法要0.3秒,如果这样慢,显然上述设想无法实现。因此想编一个python程序用来测试执行一次grab方法到底需要多少时间。思路是,在循环语句中连续调用ImageGrab.grab方法截屏,1秒后,停止循环程序,循环次数就是每秒调用ImageGrab.grab方法截屏次数,这个就是每秒帧数(fps)。
测试时,因PIL(pillow)的原因,必须在win10设置中将“显示”-“更改文本、应用等项目的大小”修改为100%,否则选取区域不正确,在此设置下,将显示分辨率设置为1920x1080为每秒16次调用ImageGrab.grab方法截屏,1280x720为每秒30次,全屏和1/4全屏每秒次数相同。如GIF文件每秒帧数不超过10,在现有计算机最高分辨率下,用python编写上述录屏程序还是可能的。自己以前编写的游戏GIF效果图没有一个fps>10。
测试条件如下:
Python 3.8.2
PIL 8.1.2
计算机:荣耀MagicBook 2019
处理器 AMD Ryzen 5 3500U with Radeon Vega Mobile Gfx 2.10 GHz
RAM 8.00 GB (6.94 GB 可用)
系统类型 64 位操作系统, 基于 x64 的处理器
win10操作系统
版本 Windows 10 家庭中文版
版本号 20H2 安装日期 ‎2021/‎3/‎12
完整程序如下。

import tkinter as tk
from PIL import ImageGrab,Image
from threading import Timer
def test_fps(k=1):                             #截屏程序,k=1截全屏,k=2截1/4屏,比较两者fps
    global n
    ws = root.winfo_screenwidth()              #屏幕长和宽 
    hs = root.winfo_screenheight()
    t = Timer(1,dojob)                         #1秒后,在另一线程调用dojob方法
    m,n=0,0    
    t.start()                                   #启动定时
    while n==0:                                 #n==0,循环,1秒后调用dojob方法,n=1,退出循环   
        p=ImageGrab.grab((0,0,ws//k,hs//k))#因PIL的原因,必须将显示设置里的缩放比例调成100%
        m+=1                                    #调用grab方法次数
    label['text']='每秒'+str(m)+'次'             #退出循环,显示调用grab方法次数
def dojob():
    global n
    n=1    
def test_fps1():
    label['text']='            '
    root.update_idletasks()             #立即更新
    test_fps()
def test_fps2():
    label['text']='            '
    root.update_idletasks()
    test_fps(2)    
root = tk.Tk()
root.geometry('200x200+50+50')
tk.Button(root, text="测全屏录屏速率", command=test_fps1).pack()
tk.Button(root, text="测1/4屏录屏速率", command=test_fps2).pack()
label=tk.Label(text='')
label.pack()
root.mainloop()
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值