pyautogui 文檔(五):截圖及定位功能

截圖函數

PyAutoGUI能夠截取屏幕截圖,將其保存到文件中,並在屏幕中查找圖像。若是您有一個小圖像,例如須要單擊並但願在屏幕上找到它的按鈕,這將很是有用。這些功能由PyScreeze模塊提供,該模塊與PyAutoGUI一塊兒安裝。html

屏幕截圖功能須要Pillow模塊。OS X使用操做系統screencapture附帶命令。Linux使用該scrot命令,能夠經過運行來安裝sudo apt-get install scrotpython

截圖()函數

調用screenshot()將返回Image對象(有關詳細信息,請參閱Pillow或PIL模塊文檔)。傳遞文件名字符串會將屏幕截圖保存到文件中,並將其做爲Image對象返回。ide

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

在1920 x 1080的屏幕上,該screenshot()功能大約須要100毫秒 - 它並不快,但速度並不慢。函數

region若是您不想要整個屏幕的屏幕截圖,還有一個可選的關鍵字參數。您能夠傳遞區域左側,頂部,寬度和高度的四個整數元組來捕獲:ui

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

定位函數

注意:從版本0.9.41開始,若是locate函數找不到提供的圖像,它們將引起ImageNotFoundException而不是返回Nonespa

若是您有圖像文件,能夠在屏幕上直觀地找到某些內容。例如,假設計算器應用程序正在您的計算機上運行,​​看起來像這樣:操作系統

_images / calculator.png

若是您不知道計算器按鈕的確切屏幕座標,則沒法調用moveTo()click()函數。每次啓動計算器時,計算器都會出現略微不一樣的位置,致使您每次都從新找到座標。可是,若是您有按鈕的圖像,例如7按鈕的圖像:設計

_images / calc7key.png

...你能夠調用locateOnScreen('calc7key.png')函數來獲取屏幕座標。返回值是一個4整數元組:(左,頂,寬,高)。能夠傳遞此元組center()以得到該區域中心的X和Y座標。若是在屏幕上找不到圖像,則locateOnScreen()加註ImageNotFoundExceptioncode

>>> import pyautogui >>> button7location = pyautogui.locateOnScreen('calc7key.png') >>> button7location Box(left=1416, top=562, width=50, height=41) >>> button7location[0] 1416
>>> button7location.left 1416
>>> button7point = pyautogui.center(button7location) >>> button7point Point(x=1441, y=582) >>> button7point[0] 1441
>>> button7point.x 1441
>>> button7x, button7y = button7point >>> pyautogui.click(button7x, button7y)  # clicks the center of where the 7 button was found
>>> pyautogui.click('calc7key.png') # a shortcut version to click on the center of where the 7 button was found

可選confidence關鍵字參數指定函數在屏幕上定位圖像的準確性。若是函數因爲可忽略的像素差別而沒法定位圖像,這將很是有用:視頻

>>> import pyautogui >>> button7location = pyautogui.locateOnScreen('calc7key.png', confidence=0.9) >>> button7location Box(left=1416, top=562, width=50, height=41)

locateCenterOnScreen()功能結合locateOnScreen()center()

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

在1920 x 1080屏幕上,定位功能調用大約須要1或2秒。這對於動做視頻遊戲來講可能太慢,但適用於大多數目的和應用程序。

有幾個「定位」功能。他們都開始查看屏幕的左上角(或圖像)並向右看,而後向下看。參數能夠是a

  • locateOnScreen(image, grayscale=False)- 返回image屏幕上第一個找到的實例的(左,頂部,寬度,高度)座標ImageNotFoundException若是在屏幕上找不到則會引起
  • locateCenterOnScreen(image, grayscale=False)- 返回image屏幕上第一個找到的實例中心的(x,y)座標ImageNotFoundException若是在屏幕上找不到則會引起
  • locateAllOnScreen(image, grayscale=False) - 返回一個生成器,該生成器生成(左,頂部,寬度,高度)元組,用於在屏幕上找到圖像的位置。
  • locate(needleImage, haystackImage, grayscale=False)-返回(左,上,寬度,高度)的第一座標發現的實例needleImagehaystackImageImageNotFoundException若是在屏幕上找不到則會引起
  • locateAll(needleImage, haystackImage, grayscale=False)- 返回一個生成器(生成(左,頂部,寬度,高度)元組的位置needleImagehaystackImage

「locate all」函數可用於for循環或傳遞給list()

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

這些「定位」功能至關昂貴; 他們能夠花一整秒鐘來跑步。加速它們的最好方法是傳遞一個region參數(4個整數元組(左,頂部,寬度,高度))來僅搜索屏幕的較小區域而不是全屏:

>>> import pyautogui >>> pyautogui.locateOnScreen('someButton.png', region=(0,0, 300, 400))

灰度匹配

或者,您能夠傳遞grayscale=True給locate函數以提供輕微的加速(大約30%-ish)。這會使圖像和屏幕截圖中的顏色去飽和,從而加快定位速度,但可能致使誤判。

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

像素匹配

要獲取屏幕截圖中像素的RGB顏色,請使用Image對象的getpixel()方法:

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

或者做爲單個函數,調用pixel()PyAutoGUI函數,它是之前調用的包裝器:

>>> import pyautogui >>> pix = pyautogui.pixel(100, 200) >>> pix RGB(red=130, green=135, blue=144) >>> pix[0] 130
>>> pix.red 130

若是您只須要驗證單個像素與給定像素匹配,請調用該pixelMatchesColor()函數,向其傳遞X座標,Y座標和它所表明顏色的RGB元組:

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

可選tolerance關鍵字參數指定在匹配時每一個紅色,綠色和藍色值能夠變化的程度:

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

來源:https://pyautogui.readthedocs.io/en/latest/screenshot.html#

相關文章
相關標籤/搜索