1. 程式人生 > 程式設計 >python實現按鍵精靈找色點選功能教程,使用pywin32和Pillow庫

python實現按鍵精靈找色點選功能教程,使用pywin32和Pillow庫

Python圖片處理模組PIL(pillow)

pywin32的主要作用

1.捕獲視窗;

2.模擬滑鼠鍵盤動作;

3.自動獲取某路徑下檔案列表;

4.PIL截圖功能

找色點選功能思路:

抓取當前螢幕快照,指定一個座標和顏色,如果座標的顏色符合,則點選座標.

1.抓取當前螢幕快照ImageGrab.grab()返回一個模式為“RGB”的影象.

2.方法im.load()返回一個用於讀取和修改畫素的畫素訪問物件

3.用pywin32操作滑鼠鍵盤

王者榮耀自動刷冒險模式原始碼送上

由於解析度不同,要修改相應座標和顏色才能正常在自己電腦上執行

https://github.com/janyroo/pvpkey

import win32gui,win32api,win32con,time
from win32api import GetSystemMetrics
from PIL import ImageGrab

def PilImage(x,y):
 a,b = GetSystemMetrics(0),GetSystemMetrics(1) # Python獲取螢幕解析度
 im = ImageGrab.grab((0,a,b))#與座標不同,這裡0,0,1,1是一個畫素,而座標是從0~1919的
 pix = im.load()
 return pix[x,y]

def DisplaySize():
 return GetSystemMetrics(0),GetSystemMetrics(1) # Python獲取螢幕解析度

def LeftClick(x,y): # 滑鼠左鍵點選螢幕上的座標(x,y)
 win32api.SetCursorPos((x,y)) # 滑鼠定位到座標(x,y)
 # 注意:不同的螢幕解析度會影響到滑鼠的定位,有需求的請用百分比換算
 win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN,x,y,0) # 滑鼠左鍵按下
 win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP,0) # 滑鼠左鍵彈起

 # win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN + win32con.MOUSEEVENTF_LEFTUP,0) # 測試

def PressOnce(x): # 模擬鍵盤輸入一個按鍵的值,鍵碼: x
 win32api.keybd_event(x,0)
'''
# 測試
a,b = DisplaySize()
print(a,b)
LeftClick(30,30) # 點選
PressOnce(13) # Enter
PressOnce(9) # TAB
print(PilImage(80,546))
'''
# SetCursorPos','No error message is available' 用管理員身份執行pycharm
if __name__=="__main__":
 jisu=0
 ltime=0
 ntime=0
 time.sleep(5)
 print(PilImage(875,573))
 print(PilImage(908,323))
 print(PilImage(1050,635))
 print(PilImage(914,486))
 while 1:

  if PilImage(875,573)==(220,154,39):
   LeftClick(875,573)
   jisu += 1
   ntime = time.time()-ltime
   ltime = time.time()
   print("刷了第%d次,獲得%d經驗,用時%d秒" % (jisu,jisu*82,ntime))
  elif PilImage(908,323)==(26,35,101):
   LeftClick(908,323)
  elif PilImage(1050,635)==(216,125,26):
   LeftClick(1050,635)
  elif PilImage(1061,138)==(48,131,205):
   LeftClick(1061,145)
  elif PilImage(1061,138)==(46,197):
   LeftClick(1061,145)
  elif PilImage(914,486)==(196,39,80):
   LeftClick(914,486)
  else:
   pass

  time.sleep(5)

補充知識:python批量將資料夾下所有圖片中一種顏色改變為隨機顏色

說在前面

需求:有時需要將圖片中的一種顏色更改為另一種顏色,ps可以幫助我們完成這項任務,但是如果存在若干張圖片,ps就不能滿足我們的需要,則需要用python幫助我們快速解決。

原始碼

# -*- coding: utf-8 -*-
"""
Created on Sun Aug 26 20:03:10 2018
@author: Administrator
"""
from PIL import Image
import random
 
for n in range(1,4):#資料夾下圖片數量
 i = 1
 j = 1
 img = Image.open("C:/Users/Administrator/Desktop/aa/"+str(n)+".png")#讀取圖片
 img = img.convert("RGB")
 
 width = img.size[0]#長度
 height = img.size[1]#寬度
 for i in range(0,width):#遍歷所有長度的點
  for j in range(0,height):#遍歷所有寬度的點
   data = img.getpixel((i,j))#i,j表示畫素點
   if (data[0]==255 and data[1]==255 and data[2]==255):
    m = random.randint(160,190)#取160-190的顏色隨機值
    print("m=",m)
    img.putpixel((i,j),(m,m,m))#顏色改變
 img = img.convert("L")#把圖片轉成灰度圖
 img.save("C:/Users/Administrator/Desktop/aa/"+str(n)+".png")#儲存修改畫素點後的圖片

錯誤注意

這裡需要圖片是RGB模式的,不能是L灰度影象,不然會出現如下錯誤:

TypeError: 'int' object is not subscriptable

https://stackoverflow.com/questions/8220702/error-int-object-is-not-subscriptable解釋了這個問題,但是主要原因可能在於圖片是灰度影象,那麼data資料為空,不能提取到RGB顏色值,程式報錯。

隨機顏色

m = random.randint(160,190)#取160-190的顏色隨機值
print("m=",m)
img.putpixel((i,m))#顏色改變

這裡,是random設定隨機顏色值,在160-190之間變動,如果需要設定其他顏色值,可以改變動範圍,或是將m設定成一個固定的常數,那麼代表固定的顏色值。

附:圖片黑白互換

對於二值圖,圖片中的黑白顏色可以通過python實現相互交換。

from PIL import Image
import PIL.ImageOps 
 
for i in range(1,37551): 
#讀入圖片
 image = Image.open('C:/Users/Administrator/Desktop/bbb/'+str(i).zfill(6)+'.png')
 #image = image.resize((64,64))
 #反轉
 inverted_image = PIL.ImageOps.invert(image)
 #儲存圖片
 inverted_image.save('C:/Users/Administrator/Desktop/bbb/'+str(i).zfill(6)+'.png')

結果

python實現按鍵精靈找色點選功能教程,使用pywin32和Pillow庫

以上這篇python實現按鍵精靈找色點選功能教程,使用pywin32和Pillow庫就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援我們。