1. 程式人生 > >微信跳一跳python自動程式碼解讀1.0

微信跳一跳python自動程式碼解讀1.0

微信跳一跳
那個跳一跳python“外掛”,有幾個python檔案,其中有一個是得到截圖,然後滑鼠在圖片上點選兩次,python視窗上會列印兩次滑鼠的位置,並且會跟上一行這兩個點之間的距離。

樣例
這個功能我先給除去獲取截圖,就說怎麼在某張圖片上算出兩次點選的距離。
首先,需要用到圖形模組,PIL:

from PIL import Image
img = Image.open('0.jpg')

然後用圖形繪製模組matplotlib來給出一個plot物件:

import matplotlib.pyplot as plt
fig = plt.figure()

給這個物件加上剛剛開啟圖片的標籤:

plt.imshow(img, animated = True)

然後用matplotlib的canvas.mpl_connect函式,將我們點選的動作和圖片連線起來,這個函式的第二個引數要我們自己的寫。

fig.canvas.mpl_connect('button_press_event', on_press)

在這個自定義的on_press函式,我們要實現得到兩個點以後再算出距離。
那麼我們就要有變數來儲存兩個點,臨時儲存點,來計算點選了多少次,橫縱座標
分別用全域性變數cor=[0,0],coords=[], click_count=0,ix,iy

    global ix,iy
    global
click_count global cor ix,iy = event.xdata, event.ydata coords = [] coords.append((ix,iy)) print("now = ", coords) cor.append(coords) click_count += 1

先把點儲存在臨時的coords裡面,打印出當前位置,然後將臨時的放入全域性變數cor裡面, 並且點選次數+1.

    if click_count > 1:
        click_count = 0

        cor1 = cor.pop()
        cor2 = cor.pop()

        distance
= (cor1[0][0] - cor2[0][0]) **2 + (cor1[0][1] - cor2[0][1]) **2 distance = distance ** 0.5 print("distance = ", distance)

當點選次數大於1的時候,就說明已經儲存了兩個點了。
這裡用的棧pop()方法得到兩個點,分別放入cor1 和 cor2, 那麼cor1 和 cor2 就是兩個點了。
接著計算出距離distance就行了。

完整程式碼:

import numpy as np
from matplotlib.animation import FuncAnimation
import matplotlib.pyplot as plt
from PIL import Image
def on_press(event):
    global ix,iy
    global click_count
    global cor

    ix,iy = event.xdata, event.ydata
    coords = []
    coords.append((ix,iy))
    print("now = ", coords)
    cor.append(coords)

    click_count += 1
    if click_count > 1:
        click_count = 0

        cor1 = cor.pop()
        cor2 = cor.pop()

        distance = (cor1[0][0] - cor2[0][0]) **2 + (cor1[0][1] - cor2[0][1]) **2
        distance = distance ** 0.5
        print("distance = ", distance)

cor = [0,0]
click_count = 0
fig = plt.figure()
img = Image.open('0.jpg')
#updata = True

plt.imshow(img, animated= True)

fig.canvas.mpl_connect('button_press_event', on_press)
plt.show()

最終效果:
我做到的效果