相关文章推荐
帅气的领带  ·  【Pyspark ...·  2 周前    · 
近视的橙子  ·  python ...·  2 周前    · 
腼腆的烈马  ·  [Anaconda]——Linux下cond ...·  1 周前    · 
眉毛粗的电梯  ·  python ...·  6 天前    · 
沉着的抽屉  ·  python for循环 ...·  2 天前    · 
爱看球的梨子  ·  java orderable_java – ...·  1 年前    · 
憨厚的火腿肠  ·  node.js - how can i ...·  1 年前    · 

这个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倍
    6倍放大还很清晰,如果PIL要的话,就需要1.7s了
  • 有人可能还觉得慢
  • 占用内存大(由于png格式)

最新版只有76KB,需要py3.5以上。下面的版本至少要MSS1.0,内测版太不完善了。

导入用 import mss 就可以了

with mss.mss() as m:
方法参数意义
m.grab截图区只截图,返回ScreenShot对象
m.shotsave的参数保存第一个显示器的截图
m.save显示器,输出格式,回调这是一个迭代器

m.monitors保存着显示器的分辨率
m.rgb m.bgra是图像数据
推荐使用m.shotm.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大小
9level,压缩等级,默认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了!

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
圣诞快乐!

文章目录写在前面优点缺点安装使用简单使用主要方法截图为文件方法一: `m.shot`方法二: `m.grab`速度太大?用PIL补充:旧版注意写在前面这个MSS大概是Many Screen Shot的缩写,意为多窗口截屏,是使用ctypes的截图。别看它用ctypes调用系统API,它却能跨平台(win,linux,mac)不得不说作者还是很强大的Github 官方文档优点小,压缩(whl)后仅76MB无包依赖快,我的surface上大概0.2~0.5s一张(1920x1440px)当然, with mss.mss() as sct: # 获取屏幕分辨率 monitor = {"top": 0, "left": 0, "width": 1920, "height": 1080} while "Scr...
文章目录前言介绍PIL.ImageGrab(win&mac)pyautogui(win&linux&mac)MSS·1 内存中转换PILMSS·2 文件转换PILMSS·3 内存转换Pygame对比结果结论 上篇文章讲了python mss截屏,这一篇来讲讲各种方式的优劣(以最高画质) 本文测试均在Windows10x64上进行 分辨率2160x1440 先说,没用pyqt(没用过)和pywin32尽量支持全平台(win,linux,mac) PIL.ImageGrab(
文章目录写在前面的话一、明确功能目标二、UI设计1.选择主界面三、功能的实现1.构建信号槽,为关闭按钮添加功能2.剥离yolo模型载入代码,载入训练好的模型,封装成函数3.剥离yolo推理代码,封装成函数可以被方便的调用4.使用Qlabel展示图片,并用QtWidgets.QApplication.processEvents()方法高速刷新5.实时显示原图+显示推理后结果结语 写在前面的话 最近参加了个小比赛,大概意思就是用yolov5实现一个害虫识别.前期一切顺利模型训练,检测什么的都完成了,但遇到了一
环境windows 10 64bitpython 3.8mss 6.1.0前言python-mss 是一个速度非常快的截图工具,支持跨平台,使用python 语言开发。安装使用 pip 安装,执行命令pipinstallmsspython-mss 还提供了命令行工具,使用 mss 就可以直接截取屏幕,默认是全屏其它可使用的参数,可以通过 mss -h 来查看$mss-h usage:...
def window_capture(filename): hwndDC = win32gui.GetWindowDC(0) # 0表示当前活跃的窗口 mfcDC = win32ui.CreateDCFromHandle(hwndDC) saveDC = mfcDC.CreateC.