Python使用MSS截屏
文章目录写在前面优点缺点安装使用简单使用主要方法截图为文件方法一: `m.shot`方法二: `m.grab`速度太大?用PIL补充:旧版注意写在前面这个MSS大概是Many Screen Shot的缩写,意为多窗口截屏,是使用ctypes的截图。别看它用ctypes调用系统API,它却能跨平台(win,linux,mac)不得不说作者还是很强大的Github 官方文档优点小,压缩(whl)后仅7
·
写在前面
这个MSS大概是Many Screen Shot的缩写,意为多窗口截屏,是使用ctypes的截图。别看它用ctypes调用系统API,它却能跨平台(win,linux,mac)不得不说作者还是很强大的
Github 官方文档
优点
- 小,压缩(whl)后仅76KB解压后共3.14MB其中3MB还是测试图片。。。
- 无包依赖
- 快,我的surface上大概0.2~0.5s一张(1920x1440px)当然,不是特别快
- 清晰,比PIL和pyautogui(中的pyscreeze,实际上还是调用PIL)的清晰的多:
6倍放大还很清晰,如果PIL要的话,就需要1.7s了
缺点
- 有人可能还觉得慢
- 占用内存大(由于png格式)
安装
最新版只有76KB,需要py3.5以上。下面的版本至少要MSS1.0,内测版太不完善了。
使用
导入用import mss
就可以了
简单使用
with mss.mss() as m:
pass
主要方法
方法 | 参数 | 意义 |
---|---|---|
m.grab | 截图区 | 只截图,返回ScreenShot对象 |
m.shot | save的参数 | 保存第一个显示器的截图 |
m.save | 显示器,输出格式,回调 | 这是一个迭代器 |
m.monitors
保存着显示器的分辨率
m.rgb
m.bgra
是图像数据
推荐使用m.shot
和m.grab
截图为文件
方法一: m.shot
with mss.mss() as m:
mss.shot()
#名称: monitor-1.png
方法二: m.grab
###
import mss.tools
###
rect = (0,0,0+200,0+200) #PIL风格
rect = dict(top=0,bottom=200,left=0,right=200)#mss风格
output = "screen.png"#png图片
with mss.mss() as m:
img = mss.grab(rect)
mss.tools.to_png(img.rgb,img.size,6,name)
#名称: screen.png
to_png参数 | 意义 |
---|---|
img.rgb | 图像数据 |
img.size | 大小 |
9 | level,压缩等级,默认6 |
name | 上面的名字 |
速度
with mss.mss() as m:
rect = m.monitors[0]
t = time.time()
img = m.grab(rect)
mss.tools.to_png(img.rgb,img.size,9,"grab.png")
print(time.time()-t)
t = time.time()
m.shot()
print(time.time()-t)
t = time.time()
next(m.save(mon=1))#迭代1遍,即1张
print(time.time()-t)
结果:
0.3559601306915283 <—m.grab
0.5034677982330322 <—m.shot
0.42186999320983887 <—m.save
即,grab最快
占用太大?
一张图片有8MB,5 ~ 9级压缩1MB,0级…有9MB!这时候JPG就有用了,因为它是有损压缩
的,完了只剩200 ~ 300KB了!
用PIL
import mss
import mss.tools
from PIL import Image
with mss.mss() as m:
rect = m.monitors[0]
t = time.time()
img = m.grab(rect)
pim = Image.new("RGB",img.size)
pim.frombytes(img.rgb)
pim.save("grab.jpg",quality=95)
#95的满级quality(品质)可以保持原来的高清晰度
del img,pim
这样就不会用几百张图片溢出内存啦!
补充:旧版
import mss
m = mss.mss()
#......
m.grab()
m.shot()
m.save()
#......
m.close()
用上面的方法可以不用with
from platform import system
from mss import *
systems = {
'Darwin' : MSSMac,
'Linux' : MSSLinux,
'Windows': MSSWindows
}
try:
m = systems[system()]
#.....
m.shot()
#......
except KeyError:
err = 'System "{0}" not implemented.'.format(system())
raise NotImplementedError(err)
上面是0.0.2版(绝对不推荐!)
注意
MSS3.0就还支持py3.3了,最少也要装这个!
本文发于CSDN于2021/12/25 10:07
圣诞快乐!
更多推荐
已为社区贡献2条内容
所有评论(0)