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) - 返回 needleImage 在 haystackImage 中的第一个找到实例的 (left, top, width, height) 坐标。如果未在屏幕上找到,则返回 None。
locateAll(needleImage, haystackImage, grayscale=False) - 返回一个生成器,它产生 needleImage 在 haystackImage 中找到的位置的 (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的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | cf1662710f1b46aa5ff229ee23f367da9e20af4a78e6e365bee973cad0ead4be |
|
MD5 | bdf395e46d7de4918323742b856cb7d7 |
|
BLAKE2b-256 | eef0cb456ac4f1a73723d5b866933b7986f02bacea27516629c00f8e7da94c2d |