200kb能作甚?mss表示我给你整个截图程序

155 阅读3分钟

200KB能做什么?mss:200KB我可以给你实现截屏功能。

是的,没错!mss库整体大小仅200KB,但是却能实现完整的截屏功能👍。

一、安装

pip install mss

二、基本使用

2.1 语法

截屏的所有操作,只需定义 with mss() as sct ,而后进行操作即可。

from mss import mss

with mss() as sct:
    # ...

2.2 全屏截屏

只需使用 sct.shot 即可进行全屏截屏。

from mss import mss

with mss() as sct:
    sct.shot()

2.3 截图并重命名

是的,还是超级简单,直接在 shot 方法中,传入 output 参数即可。

sct.shot(output=f'screenshot_.png')

三、高级使用

3.1 截取单屏幕指定区域

选定区域,然后获取区域截图,调用 mss 自带的工具进行文件保持即可

import mss.tools

# 定义截屏区域
monitor = {"top": 100, "left": 100, "width": 300, "height": 300}

with mss.mss() as sct:
    # 获取指定区域的截图
    screenshot = sct.grab(monitor)
    # 保存截图
    mss.tools.to_png(screenshot.rgb, screenshot.size, output='region_screenshot.png')

3.2 截取指定屏幕的指定区域

在多屏幕使用场景,可以指定特定屏幕进行截图,依然使用 monitor 进行操作,只需指定参数 mon

import mss.tools

# 定义截屏区域,增加"mon"参数
monitor = {"top": 100, "left": 100, "width": 300, "height": 300, "mon": 1}

with mss.mss() as sct:
    # 获取指定区域的截图
    screenshot = sct.grab(monitor)
    # 保存截图
    mss.tools.to_png(screenshot.rgb, screenshot.size, output='region_screenshot.png')

3.3 基于计算截屏屏幕指定区域

mss 还支持基于计算来截取屏幕指定区域,这适合于动态截屏。

import mss
import mss.tools

with mss.mss() as sct:
    monitor = sct.monitors[1]

    # 使用百分数进行截取屏幕区域
    left = monitor["left"] + monitor["width"] * 5 // 100  # 5% from the left
    top = monitor["top"] + monitor["height"] * 5 // 100  # 5% from the top
    right = left + 400  # 400px width
    lower = top + 400  # 400px height
    bbox = (left, top, right, lower)

    im = sct.grab(bbox)
    mss.tools.to_png(im.rgb, im.size, output="screenshot.png")

3.4 获取截图的PNG数据

如果需要对截图进行二次加工,mss 也支持仅采集截图的 png 对象数据,以便后续处理。

with mss.mss() as sct:
    monitor = sct.monitors[1] 
    sct_img = sct.grab(monitor)

    # 获取png对象
    png = mss.tools.to_png(sct_img.rgb, sct_img.size)

实际上配合上其他处理图像的 python 库,完全可以做到对截图数据进行加工处理。下述是配合 PIL 库对多屏进行截图处理:

from PIL import Image

import mss

with mss.mss() as sct:
    # 多屏幕操作
    for num, monitor in enumerate(sct.monitors[1:], 1):
        sct_img = sct.grab(monitor)

        # 创建图片对象
        img = Image.frombytes("RGB", sct_img.size, sct_img.bgra, "raw", "BGRX")

        # 保存图片
        output = f"monitor-{num}.png"
        img.save(output)
        print(output)

3.5 命令行操作

如果不想撰写代码实现截屏功能,你甚至可以直接用命令行进行截屏。

# 截取当前主屏
mss

# 截取当前主屏并重命名为screenshot.png
mss -o screenshot.png

# 选定截取范围
mss -c 100,100,800,600

命令行截图操作示意如图:

相关的操作参数说明:

  • -h, --help - 显示帮助信息
  • -c COORDINATES, --coordinates COORDINATES - 要截取的屏幕区域:上边距, 左边距, 宽度, 高度
  • -l {0,1,2,3,4,5,6,7,8,9}, --level {0,1,2,3,4,5,6,7,8,9} - PNG压缩级别
  • -m MONITOR, --monitor MONITOR - 要截图的显示器
  • -o OUTPUT, --output OUTPUT - 输出文件名
  • -b BACKEND, --backend BACKEND - 平台特定的后端
    • Linux: default/xlib/xgetimage/xshmgetimage
    • macOS/Windows: default
  • --with-cursor - 包含光标
  • -q, --quiet - 不显示创建的文件信息
  • -v, --version - 显示程序版本号

当然,mss 还有其他的操作,具体可以查看官网指导文档:Installation - Python MSS latest documentation

好啦,今天的介绍就到这里了,感谢阅读!欢迎三连和关注呢。