<pre>#euraxluo 5.15
#obj_1
#跳一跳的外挂
from PIL import Image
import subprocess
import time
import random
import os def jump(distance):
press_time = distance*2.353
press_time = max(press_time,200)
press_time = int(press_time)
point = (random.randint(500,600),random.randint(1000,1200))
cmd = 'adb shell input swipe {x1} {y1} {x2} {y2} {time}'.format(
x1=point[0],
y1=point[1],
x2=point[0]+random.randint(1,5),
y2=point[1]+random.randint(1,5),
time = press_time )
os.system(cmd)
return press_time def get_screenshot():
#jietu,baocun jump.png
#调用os模块
process=subprocess.Popen('adb shell screencap -p',shell=True,stdout=subprocess.PIPE)
screenshot = process.stdout.read()#读取图片信息
screenshot = screenshot.replace(b'\r\n',b'\n')#去除干扰信息
with open('jump.png','wb') as f:#保存为图片
f.write(screenshot) def find_a_and_b(img_path):#寻找起点和终点
img = Image.open(img_path)
w,h = img.size #图片尺寸
img_pixel = img.load() #图片的像素矩阵
start_p = None for i in range(int(h/5),int(h*2/3),50): #以50为步长扫描
first_pixel = img_pixel[0,i] for j in range(1,w):#循环查找,如果遇到非纯色。为棋盘
pixel = img_pixel[j,i]
if pixel[0] != first_pixel[0] or pixel[1] !=first_pixel[1] or pixel[2] !=first_pixel[2]:#确定棋盘
start_p = i - 50
break
if start_p:
break #找到棋子
left = 0
right = 0
a_point_y_max = 0
bz = True
for i in range(start_p,int(h*2/3)):#限制棋子的扫描范围
for j in range(int(w/9),int(w*8/9),10):#限制棋子的扫描范围 去掉边界1/9
pixel = img_pixel[j,i] if (50<pixel[0]<60)and(53<pixel[1]<63)and(95<pixel[2]<110):
print(pixel[0],pixel[1],pixel[2])
if bz:
left = j
bz = False right = j
a_point_y_max = max(i,a_point_y_max)#a_point 的纵坐标 a_point_x = (left + right) // 2 #a_point 的横坐标
a_point_y = a_point_y_max - 10 #根据不同分辨路确定 #找棋盘
#限制棋盘的扫描范围 if a_point_x < w/2: #棋子在左边
b_start_x = a_point_x + 50
b_end_x = 690
else:
b_start_x = 30
b_end_x = a_point_x - 50
#找棋盘的顶点
for i in range(start_p,start_p+200):#y轴大致位置循环至下200px
first_pixel = img_pixel[0,i]#背景色的rgb
for j in range(b_start_x,b_end_x,5):#棋子的边界坐标循环至边界
pixel = img_pixel[j,i]
if abs(pixel[0] - first_pixel[0])+abs(pixel[1] - first_pixel[1])+abs(pixel[2] - first_pixel[2])>15:
if bz:
left = j
right = j
bz = False
else:
right = j
if not bz:
break
b_x = (720-(right+left)//2)
b_top = img_pixel[b_x,i+30]
#从定点往下找
for k in range(i+250,i,-1):
pixel = img_pixel[b_x,k]
if abs(pixel[0] - first_pixel[0]) + abs(pixel[1] - first_pixel[1]) + abs(pixel[2] - first_pixel[2]) < 12:
break b_y=(i+k)//2+80
return (a_point_x,a_point_y),(b_x+20,b_y) def run():
oper = input('请连接手机,确定开始?y/n')
if oper != 'y':
exit('结束')
while True:
# screenshout
get_screenshot() # 获取截图
a,b=find_a_and_b('jump.png')
distance = ((a[0]-b[0])**2+(a[1]-b[1])**2)**0.5#计算距离 jump(distance)#按压
time.sleep(random.randrange(1,2))#随机休眠 if __name__ == '__main__':
run()
# find_a_and_b('jump.png')</pre>

python,pil库的小应用的更多相关文章

  1. Python PIL 库的应用

    PIL (Python Image Library) 库是Python 语言的一个第三方库,PIL库支持图像存储.显示和处理,能够处理几乎所有格式的图片. 一.PIL库简介 1. PIL库主要有2个方 ...

  2. Python PIL库学习笔记

    1.PIL简介 Python Imaging Library(缩写为PIL)(在新的版本中被称为Pillow)是Python编程语言的开源库,它增加了对打开,操作和保存许多不同图像文件格式的支持.它适 ...

  3. 使用Python PIL库中的Image.thumbnail函数裁剪图片

    今天,是我来到博客园的第五天,发现自己还没有头像,想着上传ubuntu系统中我很喜欢的一个背景图片来当头像,但是因为图片过大,上传失败了.那么,我们如何使用python中强大的PIL库来进行图片裁剪呢 ...

  4. python PIL 库处理文件

    通过PIL库提供的API接口可以很方便的处理图像,功能十分强大: 最近有一个替换png背景色的需求,替换背景色的同时又不能够覆盖原来的文字,之前利用perl 的CD 模块一直没能够正确处理,最终用PI ...

  5. python PIL库的使用

    )PIL可以做很多和图像处理相关的事情: 图像归档(Image Archives).PIL非常适合于图像归档以及图像的批处理任务.你可以使用PIL创建缩略图,转换图像格式,打印图像等等. 图像展示(I ...

  6. Python PIL库之Image注解(API)

    http://blog.csdn.net/xiezhiyong3621/article/details/8499543 class Image Methods defined here: __geta ...

  7. 基于Python PIL实现简单图片格式转化器

    基于Python PIL实现简单图片格式转化器 目录 基于Python PIL实现简单图片格式转化器 1.简介 2.前期资料准备 2.1.1如何实现图片格式转换? 2.1.2如何保存需要大小的图片? ...

  8. 一秒钟带你走进P图世界-----(python)PIL库的使用

    python-----PIL库的使用 一.什么是PIL库 1.PIL(Python Image Library)库是python语言的第三方库,具有强大的图像处理能力,不仅包含了丰富的像素.色彩操作功 ...

  9. Python之PIL库的运用、GIF处理

    一.PIL库简介 PIL(Python Image Library)库是Python语言的第三方库,它支持图像存储.显示和处理,它能够处理几乎所有图片格式,可以完成对图像的缩放.剪裁.折叠以及像图片添 ...

随机推荐

  1. 关于基于LinphoneSDK通话项目开发中遇到的相关问题

    在之前小学期的项目开发当中,我们小组进行的是使用网上开源的LinphoneSDK来开发一款Android端的VOIP电话APP. 因为网上关于这个SDK在安卓端的开发文档相当少,所以我们只能根据少量的 ...

  2. 小程序 map组件问题 cover-view问题

    使用小程序的组件map时 在开发者工具上一切顺利 但是在真机预览时 发现地图的层级是最高的 任何标签都覆盖不了它 调整z-index值并没有什么效果 原因是 微信小程序的map.video.canva ...

  3. MyBatis通过Mapper动态代理来实现curd操作

    MyBatis官方推荐使用mapper代理方法开发mapper接口,程序员不需要编写mapper实现类,使用mapper代理方法时,输入参数可以使用pojo包装对象或者map对象,保证dao的通用性 ...

  4. CC2640蓝牙芯片开发备记

    server ,characteristic UUID ,handle sever ,一个工程里可以有多个服务,按键服务,心率计服务,马达服务. characteristic , 一个服务可以有多个的 ...

  5. makefile笔记7 - makefile函数

    在 Makefile 中可以使用函数来处理变量,从而让我们的命令或是规则更为的灵活和具有智能. make 所支持的函数也不算很多,不过已经足够我们的操作了.函数调用后,函数的返回值可以当做变量来使用. ...

  6. Openresty 进行路由系统设计

    1.系统基础设计图为: 用户通过Http访问Openresty(Nginx + Lua), 其中Nginx虚拟主机中配置文件进行Lua脚本加载. LUA通过nginx内置变量或者http请求中变量来区 ...

  7. Python 语法1

    函数的定义: """ def 函数名(): 函数内容,函数内容, 函数内容,函数内容, """ ////////////////////// ...

  8. float样式的使用

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  9. Sql Prompt---Unable to connect to the Redgate Client Service

    今天在使用SQLPrompt时,突然发现所有的提示都不能用了,在百度上搜索无果,刚刚在Google搜索,果然找到了自己想要的答案,今天把搜索的结果发布在此,希望能够帮助到有需要的朋友. 客户端服务停止 ...

  10. js string类型时间转换成Date类型

    方法一: var t = "2015-03-16";var array =  t.split("-");var dt = new Date(array[0], ...