PyAutoGui 圖片識別+定位+截圖函數(shù)文檔

前言:

本章節(jié)有個非常重要的函數(shù) locateCenterOnScreen!

如果你有一個圖像文件,你可以在屏幕上直觀地定位一些東西。

它直接返回x,y坐標點,返回值可以給click()

PyAutoGUI可以獲取屏幕截圖,將它們保存到文件中,并在屏幕中識別并定位圖像。這是有用的,如果你有一個小的圖像,比方說,一個按鈕,需要點擊,并希望找到它在屏幕上。這些特性由PyScreeze模塊提供,該模塊與PyAutoGUI一起安裝


作者:Simon0903

鏈接:http://m.itdecent.cn/u/2b4bc3b5e6fc

來源:簡書

簡書著作權(quán)歸作者所有,任何形式的轉(zhuǎn)載都請聯(lián)系作者獲得授權(quán)并注明出處。


截圖功能需要依賴pillow模塊。

OSX使用screencapture命令,它與操作系統(tǒng)一起提供。

Linux使用scrot命令,可以通過運行sudo?apt-get?install?scrot.


關(guān)于Ubuntu的特別說明

Ubuntu在安裝?pillow?方面似乎有一些缺陷。PNG和JPEG支持不包括在Ubuntu上的pillow中。以下鏈接有更多信息:https://stackoverflow.com/questions/7648200/pip-install-pil-e-tickets-1-no-jpeg-png-support?http://ubuntuforums.org/showthread.php?t=1751455


import pyautogui as auto



屏幕截圖()函數(shù)

screenshot()

將返回 Image 對象(有關(guān)詳細信息,請參閱枕頭或PIL模塊文檔)。傳遞文件名的字符串將屏幕快照保存到文件中,并將其作為Image對象返回。

#? 有一個可選的 region 關(guān)鍵字參數(shù),如果不希望看到整個屏幕的截圖。

# 可以傳遞區(qū)域的左、頂、寬和高的四個整數(shù)元組來捕獲:

pic_1 = auto.screenshot()

pic_2 = auto.screenshot('my_screenshot.png')?#在1920 x 1080屏幕上,screenshot()函數(shù)大約需要100毫秒

pic_3 = auto.screenshot("my_screenshot.png ",region=(0,0, 300, 400))


定位函數(shù) (非常重要)?

在#1920 x 1080屏幕上,定位函數(shù)調(diào)用大約需要1或2秒 ,不適用于游戲腳本調(diào)用,原因是太慢

locateOnScreen()

例如,假設(shè)計算器應(yīng)用程序在您的計算機上運行,如下所示:


# 當啟動計算器界面的時候,這時您不能直接調(diào)用moveTo()和click()函數(shù),如果您不知道計算器按鈕的確切屏幕坐標。

# 每次啟動時,計算器都會出現(xiàn)在一個稍微不同的地方,因此每次都需要重新查找坐標。

# 但是,如果您有該按鈕的圖像,例如7按鈕的圖像:

# 就直接用圖片識別功能定位它的屏幕坐標(是元組,左、上、右、下),這個返回結(jié)果(元組)也可以給center()函數(shù)方法,轉(zhuǎn)化成x,y的坐標值

#?如果屏幕上找不到圖像,locateOnScreen()? 則返回結(jié)果為:None.

number7_location = auto.locateOnScreen('calc7key.png')? ?#傳入按鈕的圖片

print(number7_location)? # 返回屏幕所在位置

>>>(1416, 562, 50, 41)

x,y = auto.center(number7_location?)? # 轉(zhuǎn)化為 x,y坐標

print(number7_location)? #按鍵7的坐標是1441,582

>>>?(1441, 582)?

auto.click(number7_location)?

# 點擊坐標,click()它是支持元組格式的坐標傳入的

#根據(jù)圖片識別定位x,y坐標(比較好用)

locateCenterOnScreen(image, grayscale=False)

返回找到的第一個截圖Image對象在屏幕上的中心坐標(x, y),如果沒找到返回None

auto.locateCenterOnScreen('1.png',grayscale=False)

#? 參數(shù)grayscale是是否轉(zhuǎn)灰度

>>>?(1441, 582)?


locateAllOnScreen(image, grayscale=False)

# 返回找到的所有相同截圖Image對象屏幕上的坐標,返回結(jié)果是(left, top, width, height)的‘生成器’

auto.locateAllOnScreen('xxx.png',grayscale=False)? #遍歷找到屏幕上所有顯示為xxx的圖像對象坐標,轉(zhuǎn)灰度操作=關(guān)閉


locate(needleImage, haystackImage, grayscale=False)

auto.locate('xxx.png')

# 返回找到的第一個截圖Image對象在haystackImage里面的坐標(left, top, width, height),如果沒找到返回None

locateAll(needleImage, haystackImage, grayscale=False)

auto.locateAll('xxx.png')

# 返回找到的所有相同截圖Image對象在haystackImage里面的坐標(left, top, width, height)的生成器

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容