跳转到主要内容

Python 2和3的简单、跨平台截图模块。

项目描述

PyScreeze

PyScreeze是Python 3的一个简单、跨平台的截图模块。

关于

PyScreeze可以截取屏幕截图,保存到文件中,并在屏幕上定位图像。如果您有一个小的图像,例如一个需要点击的按钮,并想在屏幕上定位它,这将很有用。

注意 - PyScreeze依赖于Pillow进行截图,其旧版本存在安全问题。唯一的受保护版本是8.3.2及以后版本。然而,Pillow 8.3.2仅支持Python 3.6及之前的版本。如果您为Python 3.5或更早版本安装PyScreeze,请注意,它使用的Pillow版本可能存在安全问题。

如果Pillow不可用,每个操作系统都有回退方法(macOS的screencapture,Linux的gnome-screenshot等)

关于Ubuntu的特别说明

如果您的Ubuntu系统使用较旧的X11窗口系统,您必须通过运行sudo apt install python3-xlib来安装Xlib。这需要您的计算机管理员密码。

截图() 函数

调用 screenshot() 将返回一个 Image 对象(有关详细信息,请参阅 Pillow 或 PIL 模块的文档)。传递一个文件名字符串将保存截图到文件,并作为 Image 对象返回。

>>> import pyscreeze
>>> im1 = pyscreeze.screenshot()
>>> im2 = pyscreeze.screenshot('my_screenshot.png')

在 1920 x 1080 的屏幕上,screenshot() 函数大约需要 100 毫秒 - 它既不快也不慢。

还有一个可选的 region 关键字参数,如果您不想截图整个屏幕。您可以传递一个包含区域的左、上、宽和高的四个整数的元组来捕获

>>> import pyscreeze
>>> im = pyscreeze.screenshot(region=(0,0, 300, 400))

定位函数

如果您有一个图像文件,您可以可视化地定位屏幕上的某个东西。您可以通过调用 locateOnScreen('calc7key.png') 函数来获取计算器应用中 7 按钮的屏幕坐标。返回值是一个 4 个整数的元组:(left, top, width, height)。这个元组可以传递给 center() 来获取这个区域的中心 X 和 Y 坐标。如果图像在屏幕上找不到,locateOnScreen() 返回 None。(PyAutoGUI 是一个模拟鼠标点击的模块。)

>>> import pyscreeze, pyautogui
>>> button7location = pyscreeze.locateOnScreen('calc7key.png')
>>> button7location
(1416, 562, 50, 41)
>>> button7x, button7y = pyscreeze.center(button7location)
>>> button7x, button7y
(1441, 582)
>>> pyautogui.click(button7x, button7y)  # clicks the center of where the 7 button was found

您可能最常使用的函数是 locateCenterOnScreen()

>>> import pyscreeze, pyautogui
>>> x, y = pyscreeze.locateCenterOnScreen('calc7key.png')
>>> pyautogui.click(x, y)

在 1920 x 1080 的屏幕上,定位函数调用大约需要 1 或 2 秒。这可能对于动作视频游戏来说太慢了,但对于大多数用途和应用程序来说都适用。

如果速度很重要,请安装可选的 opencv 库(pip install cv2)。如果可用,locateAll 计算将使用它,并在全屏搜索中找到所有匹配项时用时不到 1 毫秒。(这不包括捕获截图所需的时间。)

有几个“定位”函数。它们都是从屏幕(或图像)的左上角开始查找,然后向左再向下查找。参数可以是

  • locateOnScreen(image, grayscale=False) - 返回屏幕上找到的第一个 image 实例的 (left, top, width, height) 坐标。如果未在屏幕上找到,则返回 None。

  • locateCenterOnScreen(image, grayscale=False) - 返回屏幕上找到的第一个 image 实例的中心 (x, y) 坐标。如果未在屏幕上找到,则返回 None。

  • locateAllOnScreen(image, grayscale=False) - 返回一个生成器,它产生屏幕上找到图像的位置的 (left, top, width, height) 元组。

  • locate(needleImage, haystackImage, grayscale=False) - 返回 needleImagehaystackImage 中的第一个找到实例的 (left, top, width, height) 坐标。如果未在屏幕上找到,则返回 None。

  • locateAll(needleImage, haystackImage, grayscale=False) - 返回一个生成器,它产生 needleImagehaystackImage 中找到的位置的 (left, top, width, height) 元组。

“定位所有”函数可以用在 for 循环中,或者传递给 list()

>>> import pyscreeze
>>> for pos in pyscreeze.locateAllOnScreen('someButton.png')
...   print(pos)
...
(1101, 252, 50, 50)
(59, 481, 50, 50)
(1395, 640, 50, 50)
(1838, 676, 50, 50)
>>> list(pyscreeze.locateAllOnScreen('someButton.png'))
[(1101, 252, 50, 50), (59, 481, 50, 50), (1395, 640, 50, 50), (1838, 676, 50, 50)]

灰度匹配

您可以选择将 grayscale=True 传递给定位函数以获得轻微的速度提升(大约 30% 左右)。这将使图像和截图去饱和,加快定位速度,但可能造成假阳性匹配。

>>> import pyscreeze
>>> button7location = pyscreeze.locateOnScreen('calc7key.png', grayscale=True)
>>> button7location
(1416, 562, 50, 41)

像素匹配

要获取截图中的像素的 RGB 颜色,请使用 Image 对象的 getpixel() 方法

>>> import pyscreeze
>>> im = pyscreeze.screenshot()
>>> im.getpixel((100, 200))
(130, 135, 144)

或者作为一个单独的函数,调用 PyScreeze 的 pixel() 函数,它是对之前调用的包装

>>> import pyscreeze
>>> pyscreeze.pixel(100, 200)
(130, 135, 144)

如果您只需验证单个像素与给定的像素匹配,请调用 pixelMatchesColor() 函数,并传递 X 坐标、Y 坐标和表示该颜色的 RGB 元组

>>> import pyscreeze
>>> pyscreeze.pixelMatchesColor(100, 200, (130, 135, 144))
True
>>> pyscreeze.pixelMatchesColor(100, 200, (0, 0, 0))
False

可选的 tolerance 关键字参数指定了红色、绿色和蓝色值可以变化的量,同时仍然匹配

>>> import pyscreeze
>>> pyscreeze.pixelMatchesColor(100, 200, (130, 135, 144))
True
>>> pyscreeze.pixelMatchesColor(100, 200, (140, 125, 134))
False
>>> pyscreeze.pixelMatchesColor(100, 200, (140, 125, 134), tolerance=10)
True

支持

如果您觉得这个项目很有帮助,并且想支持其开发,[请考虑向其在 Patreon 的创建者捐赠](https://www.patreon.com/AlSweigart).

项目详情


下载文件

下载适用于您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源分发

pyscreeze-1.0.1.tar.gz (27.8 kB 查看哈希值)

上传时间

由以下支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面