Auto.js学习笔记12:利用图片的相似度执行精准目标点击(基础篇) 您所在的位置:网站首页 autojs循环找图定位 Auto.js学习笔记12:利用图片的相似度执行精准目标点击(基础篇)

Auto.js学习笔记12:利用图片的相似度执行精准目标点击(基础篇)

2024-07-12 08:38| 来源: 网络整理| 查看: 265

申明本人使用的autojs是4.1.1版本

目录

images

读取本地图片images.read(path)

读取网络图片images.load(url)

复制图片images.copy(img)

保存图片images.save(image, path[, format = "png", quality = 100])

images.fromBase64(base64)

截图请求screenshotRequest

截图函数

images.captureScreen()

images.captureScreen(path)

截图方向

images.requestScreenCapture([landscape])

通过图片相似度进行按钮点击功能

images.findImage(img, template[, options])

区域找图的简便方法 images.findImageInRegion(img, template, x, y[, width, height, threshold])

images

images模块提供了一些手机设备中常见的图片处理函数,包括截图、读写图片、图片剪裁、旋转、二值化、找色找图等。

该模块分为两个部分,找图找色部分和图片处理部分。

需要注意的是,image对象创建后尽量在不使用时进行回收,同时避免循环创建大量图片。因为图片是一种占用内存比较大的资源,尽管Auto.js通过各种方式(比如图片缓存机制、垃圾回收时回收图片、脚本结束时回收所有图片)尽量降低图片资源的泄漏和内存占用,但是糟糕的代码仍然可以占用大量内存。

// 读取图片 var img = images.read("./1.png"); // 对图片进行操作 ... // 回收图片 img.recycle(); 读取本地图片images.read(path) path {string} 图片路径

读取在路径path的图片文件并返回一个Image对象。如果文件不存在或者文件无法解码则返回null。

Image对象通过调用recycle()函数来回收。例如:

// 读取图片 var img = images.read("./1.png"); 读取网络图片images.load(url) url {string} 图片URL地址

加载在地址URL的网络图片并返回一个Image对象。如果地址不存在或者图片无法解码则返回null。

复制图片images.copy(img) img {Image} 图片 返回 {Image} 复制一张图片并返回新的副本。该函数会完全复制img对象的数据。 保存图片images.save(image, path[, format = "png", quality = 100]) image {Image} 图片path {string} 路径format {string} 图片格式,可选的值为: pngjpeg/jpgwebpquality {number} 图片质量,为0~100的整数值

把图片image以PNG格式保存到path中。如果文件不存在会被创建;文件存在会被覆盖。

//把图片压缩为原来的一半质量并保存 var img = images.read("/sdcard/1.png"); images.save(img, "/sdcard/1.jpg", "jpg", 50); app.viewFile("/sdcard/1.jpg"); images.fromBase64(base64) base64 {string} 图片的Base64数据返回 {Image}

解码Base64数据并返回解码后的图片Image对象。如果base64无法解码则返回null。

截图请求screenshotRequest const permissionsScreenshot = screenshotRequest() if (!requestScreenCapture()) { toastLog("请求截图失败"); exit(); } 截图函数 images.captureScreen()

  截图的 官方文档地址

截取当前屏幕并返回一个Image对象。

没有截图权限时执行该函数会抛出SecurityException。

该函数不会返回null,两次调用可能返回相同的Image对象。这是因为设备截图的更新需要一定的时间,短时间内(一般来说是16ms)连续调用则会返回同一张截图。

截图需要转换为Bitmap格式,从而该函数执行需要一定的时间(0~20ms)。

另外在requestScreenCapture()执行成功后需要一定时间后才有截图可用,因此如果立即调用captureScreen(),会等待一定时间后(一般为几百ms)才返回截图。

//请求横屏截图 requestScreenCapture(true); //截图 var img = captureScreen(); //获取在点(100, 100)的颜色值 var color = images.pixel(img, 100, 100); //显示该颜色值 toast(colors.toString(color)); images.captureScreen(path) path {string} 截图保存路径

截取当前屏幕并以PNG格式保存到path中。如果文件不存在会被创建;文件存在会被覆盖。

该函数不会返回任何值。该函数也可以作为全局函数使用。

注意:captureScreen()返回的图片不需要回收。(因为那个是系统执行的截图)

返回值可以当bollean用,重点,不会返回Image对象。

代码示例

var screenshotIcon = captureScreen("/sdcard/a.png"); if(screenshotIcon){ var img = images.read("/sdcard/a.png"); var smallImg = images.read(smallImgPath); //读取本地的领取图片 var result = images.findImage(img, smallImg, { threshold: threshold }) } 截图方向 images.requestScreenCapture([landscape])

landscape {boolean} 布尔值, 表示将要执行的截屏是否为横屏。如果landscape为false, 则表示竖屏截图; true为横屏截图。

如果不指定landscape值,则截图方向由当前设备屏幕方向决定,因此务必注意执行该函数时的屏幕方向。

通过图片相似度进行按钮点击功能 images.findImage(img, template[, options]) img {Image} 大图片template {Image} 小图片(模板)options {Object} 找图选项

找图。在大图片img中查找小图片template的位置(模块匹配),找到时返回位置坐标(Point),找不到时返回null。

选项包括:

threshold {number} 图片相似度。取值范围为0~1的浮点数。默认值为0.9。region {Array} 找图区域。参见findColor函数关于region的说明。level {number} 一般而言不必修改此参数。不加此参数时该参数会根据图片大小自动调整。找图算法是采用图像金字塔进行的, level参数表示金字塔的层次, level越大可能带来越高的找图效率,但也可能造成找图失败(图片因过度缩小而无法分辨)或返回错误位置。因此,除非您清楚该参数的意义并需要进行性能调优,否则不需要用到该参数。

代码示例

var img = images.read("/sdcard/大图.png"); var templ = images.read("/sdcard/小图.png"); var result = findImage(img, templ); if(result){ toast("找到啦:" + result); click(result.x, result.y); }else{ toast("没找到"); } 区域找图的简便方法 images.findImageInRegion(img, template, x, y[, width, height, threshold]) images.findImage(img, template, { region: [x, y, width, height], threshold: threshold }) 结语

实际开发中遇到了很多问题,有些是没认真看文档(认真看文档、认真看文档、认真看文档)有些是理解透彻导致,最终都一个一个解决后面会发布实战篇。

光看不敲是没用的 看后一定要去实践 一定要去敲代码 一定要去运行试错 这样才是有意义的学习



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有