史上最全面的AutojsPro找图方法

使用autojs找图,找了很久的图发现有很多共同点于是就封装了几个方法, 方便大家的使用同时也为自己提供便利性。

1、找图点击

2、找到所有匹配的点击

3、判断是存在图不存在返回Null存在返回坐标

所有方法均区分字符串和数组,这样方便兼容多个图图一起找知道找到为止。有点效率上的浪费。

/**
 * 找图,找到并点击
 * @param {可以是数组也可以是字符串,传输数组可以多次找图知道找到为止} img_path_array 
 * @param {找图区域,默认是全屏找图,该参数可以不传输} area_region 
 * @param {相似度,默认是0.8,可以不传输} threshold 
 * @param {找到后是否继续点击} is_continue 
 * @returns true表示执行成功Flase表示失败
 */
Tools.clickAreaForFindImage=function(img_path_array, area_region, threshold,is_continue) {
    try {
        area_region = area_region || [0, 0, device.width, device.height] //默认的找图区域 全屏找图 前2位是坐标 后面是长度和宽度   千万别理解成是坐标
        threshold = threshold || 0.8 // 默认的相识度0.8
        is_continue=is_continue|| false
        if (img_path_array instanceof Array) {
            let arrayLength = img_path_array.length
            for (let i = 0; i < arrayLength; i  ) {
                //toastLog("正在进行第"   (i   1)   "次找图...")
                img_path = img_path_array[i] //小图地址可判断是否存在
                if (!files.exists(img_path)) {
                    toastLog(img_path   "文件不存在因此跳过")
                    continue
                }
                var little_image = images.read(img_path) //小图
                var find_result_bounds = findImage(
                    captureScreen(), little_image, {
                    region: area_region,
                    threshold: threshold
                });
                if (find_result_bounds) {
                    toastLog(img_path "图找到,准备点击坐标:"   find_result_bounds)
                    click(find_result_bounds.x, find_result_bounds.y)
                    return true
                } else {
                    //toastLog(img_path "小图存在但是在大图中未找到图片进入下一次循环...")
                }
            }
            return false
        }
        if (typeof (img_path_array) == "string") {
            img_path = img_path_array//小图地址可判断是否存在
            if (!files.exists(img_path)) {
                toastLog(img_path   "文件不存在因此跳过")
                return false
            }
            var little_image = images.read(img_path) //小图
            var find_result_bounds = findImage(
                captureScreen(), little_image, {
                region: area_region,
                threshold: threshold
            });
            if (find_result_bounds) {
                toastLog(img_path "图找到,准备点击坐标:"   find_result_bounds)
                click(find_result_bounds.x, find_result_bounds.y)
                return true
            } else {
                //toastLog(img_path   "小图存在但是在大图中未找到图片")
                return false
            }
        }
    } catch (error) {
        toastLog("clickAreaForFindImage方法出现错误:"   error)
        return false;
    }
}



我是用js最新标准写的大家自己修正一下就行。

/**
 * 找图,找到并点击
 * @param {可以是数组也可以是字符串,传输数组可以多次找图知道找到为止} img_path_array 
 * @param {找图区域,默认是全屏找图,该参数可以不传输} area_region 
 * @param {相似度,默认是0.8,可以不传输} threshold 
 * @param {找到后是否继续点击} is_continue 
 * @returns true表示执行成功Flase表示失败
 */
Tools.clickRegionForFindImage=function(img_path_array, area_region, threshold,is_continue) {
    try {
        area_region = area_region || [0, 0, device.width, device.height] //默认的找图区域 全屏找图 前2位是坐标 后面是长度和宽度   千万别理解成是坐标
        threshold = threshold || 0.9 // 默认的相识度0.85
        is_continue=is_continue|| false
        if (img_path_array instanceof Array) {
            let arrayLength = img_path_array.length
            for (let i = 0; i < arrayLength; i  ) {
                img_path = img_path_array[i] //小图地址可判断是否存在
                if (!files.exists(img_path)) {
                    toastLog(img_path   "文件不存在因此跳过")
                    continue
                }
                var little_image = images.read(img_path) //小图
                var find_result_bounds = images.matchTemplate(
                    captureScreen(), little_image, {
                    region: area_region,
                    threshold: threshold,
                    max: 100
                });
                if (find_result_bounds) {
                    find_result_bounds.matches.forEach(match => {
                        log(img_path "point = "   match.point   ", similarity = "   match.similarity);
                        click(match.point.x, match.point.y)
                    });
                    if(is_continue || is_continue=="true"){
                        continue;
                    }
                    return true
                } else {
                    //toastLog(img_path   "小图存在但是在大图中未找到图片进入下一次循环...")
                }
            }
            return false
        }
        if (typeof (img_path_array) == "string") {
            img_path = img_path_array//小图地址可判断是否存在
            if (!files.exists(img_path)) {
                toastLog(img_path   "文件不存在因此跳过")
                return false
            }
            var little_image = images.read(img_path) //小图
            var find_result_bounds = images.matchTemplate(
                captureScreen(), little_image, {
                region: area_region,
                threshold: threshold,
                max: 100
            });
            toastLog(find_result_bounds)
            if (find_result_bounds) {
                //toastLog(img_path   "图找到,准备点击坐标:"   find_result_bounds)
                click(find_result_bounds.x, find_result_bounds.y)
                return true
            } else {
                //toastLog(img_path   "小图存在但是在大图中未找到图片")
                return false
            }
        }
    } catch (error) {
        toastLog("clickRegionForFindImage方法出现错误:"   error)
        return false;
    }
}



这个是群点,找到多个匹配对象进行点击多个对象。根据经验来看最好是吧概率设置0.9以上。这个点击朱要是针对游戏消消乐一类的。


/**
 * 找图,返回坐标
 * @param {可以是数组也可以是字符串,传输数组可以多次找图知道找到为止} img_path_array 
 * @param {找图区域,默认是全屏找图,该参数可以不传输} area_region 
 * @param {相似度,默认是0.8,可以不传输} threshold 
 * @returns 
 */
Tools.findImageCoordinate=function(img_path_array, area_region, threshold) {
    //try {
        let return_region=null
        area_region = area_region || [0, 0, device.width, device.height] //默认的找图区域 全屏找图 前2位是坐标 后面是长度和宽度   千万别理解成是坐标
        threshold = threshold || 0.8 // 默认的相识度0.8
        if (img_path_array instanceof Array) {
            let arrayLength = img_path_array.length
            for (let i = 0; i < arrayLength; i  ) {
                img_path = img_path_array[i] //小图地址可判断是否存在
                if (!files.exists(img_path)) {
                    toastLog(img_path   "文件不存在因此跳过")
                    continue
                }
                var little_image = images.read(img_path) //小图
                var find_result_bounds = findImage(
                    captureScreen(), little_image, {
                    region: area_region,
                    threshold: threshold
                });
                //this.toastLog(img_path ":" find_result_bounds)
                if (find_result_bounds==null || find_result_bounds== undefined) {
                    continue
                }else{
                    return find_result_bounds
                }
            }
            return return_region
        }

        if (typeof (img_path_array) == "string") {
            img_path = img_path_array //小图地址可判断是否存在
            if (!files.exists(img_path)) {
                toastLog(img_path   "文件不存在因此跳过")
                return return_region
            }
            var little_image = images.read(img_path) //小图
            var find_result_bounds = findImage(
                captureScreen(), little_image, {
                region: area_region,
                threshold: threshold
            });
            if (find_result_bounds) {
                return find_result_bounds
            } else {
                return return_region
            }
        }
    // } catch (error) {
    //     toastLog("findImageCoordinate方法出现错误:"   error)
    //     return return_region;
    // }
}



和第一个稍微有点重叠不过意图还是不一样的 这个主要就是找到了做别的操作比如保刷功能。

使用autojs找图,找了很久的图发现有很多共同点于是就封装了几个方法, 方便大家的使用同时也为自己提供便利性。

1、找图点击

2、找到所有匹配的点击

3、判断是存在图不存在返回Null存在返回坐标

所有方法均区分字符串和数组,这样方便兼容多个图图一起找知道找到为止。有点效率上的浪费。

/**
 * 找图,找到并点击
 * @param {可以是数组也可以是字符串,传输数组可以多次找图知道找到为止} img_path_array 
 * @param {找图区域,默认是全屏找图,该参数可以不传输} area_region 
 * @param {相似度,默认是0.8,可以不传输} threshold 
 * @param {找到后是否继续点击} is_continue 
 * @returns true表示执行成功Flase表示失败
 */
Tools.clickAreaForFindImage=function(img_path_array, area_region, threshold,is_continue) {
    try {
        area_region = area_region || [0, 0, device.width, device.height] //默认的找图区域 全屏找图 前2位是坐标 后面是长度和宽度   千万别理解成是坐标
        threshold = threshold || 0.8 // 默认的相识度0.8
        is_continue=is_continue|| false
        if (img_path_array instanceof Array) {
            let arrayLength = img_path_array.length
            for (let i = 0; i < arrayLength; i  ) {
                //toastLog("正在进行第"   (i   1)   "次找图...")
                img_path = img_path_array[i] //小图地址可判断是否存在
                if (!files.exists(img_path)) {
                    toastLog(img_path   "文件不存在因此跳过")
                    continue
                }
                var little_image = images.read(img_path) //小图
                var find_result_bounds = findImage(
                    captureScreen(), little_image, {
                    region: area_region,
                    threshold: threshold
                });
                if (find_result_bounds) {
                    toastLog(img_path "图找到,准备点击坐标:"   find_result_bounds)
                    click(find_result_bounds.x, find_result_bounds.y)
                    return true
                } else {
                    //toastLog(img_path "小图存在但是在大图中未找到图片进入下一次循环...")
                }
            }
            return false
        }
        if (typeof (img_path_array) == "string") {
            img_path = img_path_array//小图地址可判断是否存在
            if (!files.exists(img_path)) {
                toastLog(img_path   "文件不存在因此跳过")
                return false
            }
            var little_image = images.read(img_path) //小图
            var find_result_bounds = findImage(
                captureScreen(), little_image, {
                region: area_region,
                threshold: threshold
            });
            if (find_result_bounds) {
                toastLog(img_path "图找到,准备点击坐标:"   find_result_bounds)
                click(find_result_bounds.x, find_result_bounds.y)
                return true
            } else {
                //toastLog(img_path   "小图存在但是在大图中未找到图片")
                return false
            }
        }
    } catch (error) {
        toastLog("clickAreaForFindImage方法出现错误:"   error)
        return false;
    }
}



我是用js最新标准写的大家自己修正一下就行。

/**
 * 找图,找到并点击
 * @param {可以是数组也可以是字符串,传输数组可以多次找图知道找到为止} img_path_array 
 * @param {找图区域,默认是全屏找图,该参数可以不传输} area_region 
 * @param {相似度,默认是0.8,可以不传输} threshold 
 * @param {找到后是否继续点击} is_continue 
 * @returns true表示执行成功Flase表示失败
 */
Tools.clickRegionForFindImage=function(img_path_array, area_region, threshold,is_continue) {
    try {
        area_region = area_region || [0, 0, device.width, device.height] //默认的找图区域 全屏找图 前2位是坐标 后面是长度和宽度   千万别理解成是坐标
        threshold = threshold || 0.9 // 默认的相识度0.85
        is_continue=is_continue|| false
        if (img_path_array instanceof Array) {
            let arrayLength = img_path_array.length
            for (let i = 0; i < arrayLength; i  ) {
                img_path = img_path_array[i] //小图地址可判断是否存在
                if (!files.exists(img_path)) {
                    toastLog(img_path   "文件不存在因此跳过")
                    continue
                }
                var little_image = images.read(img_path) //小图
                var find_result_bounds = images.matchTemplate(
                    captureScreen(), little_image, {
                    region: area_region,
                    threshold: threshold,
                    max: 100
                });
                if (find_result_bounds) {
                    find_result_bounds.matches.forEach(match => {
                        log(img_path "point = "   match.point   ", similarity = "   match.similarity);
                        click(match.point.x, match.point.y)
                    });
                    if(is_continue || is_continue=="true"){
                        continue;
                    }
                    return true
                } else {
                    //toastLog(img_path   "小图存在但是在大图中未找到图片进入下一次循环...")
                }
            }
            return false
        }
        if (typeof (img_path_array) == "string") {
            img_path = img_path_array//小图地址可判断是否存在
            if (!files.exists(img_path)) {
                toastLog(img_path   "文件不存在因此跳过")
                return false
            }
            var little_image = images.read(img_path) //小图
            var find_result_bounds = images.matchTemplate(
                captureScreen(), little_image, {
                region: area_region,
                threshold: threshold,
                max: 100
            });
            toastLog(find_result_bounds)
            if (find_result_bounds) {
                //toastLog(img_path   "图找到,准备点击坐标:"   find_result_bounds)
                click(find_result_bounds.x, find_result_bounds.y)
                return true
            } else {
                //toastLog(img_path   "小图存在但是在大图中未找到图片")
                return false
            }
        }
    } catch (error) {
        toastLog("clickRegionForFindImage方法出现错误:"   error)
        return false;
    }
}



这个是群点,找到多个匹配对象进行点击多个对象。根据经验来看最好是吧概率设置0.9以上。这个点击朱要是针对游戏消消乐一类的。


/**
 * 找图,返回坐标
 * @param {可以是数组也可以是字符串,传输数组可以多次找图知道找到为止} img_path_array 
 * @param {找图区域,默认是全屏找图,该参数可以不传输} area_region 
 * @param {相似度,默认是0.8,可以不传输} threshold 
 * @returns 
 */
Tools.findImageCoordinate=function(img_path_array, area_region, threshold) {
    //try {
        let return_region=null
        area_region = area_region || [0, 0, device.width, device.height] //默认的找图区域 全屏找图 前2位是坐标 后面是长度和宽度   千万别理解成是坐标
        threshold = threshold || 0.8 // 默认的相识度0.8
        if (img_path_array instanceof Array) {
            let arrayLength = img_path_array.length
            for (let i = 0; i < arrayLength; i  ) {
                img_path = img_path_array[i] //小图地址可判断是否存在
                if (!files.exists(img_path)) {
                    toastLog(img_path   "文件不存在因此跳过")
                    continue
                }
                var little_image = images.read(img_path) //小图
                var find_result_bounds = findImage(
                    captureScreen(), little_image, {
                    region: area_region,
                    threshold: threshold
                });
                //this.toastLog(img_path ":" find_result_bounds)
                if (find_result_bounds==null || find_result_bounds== undefined) {
                    continue
                }else{
                    return find_result_bounds
                }
            }
            return return_region
        }

        if (typeof (img_path_array) == "string") {
            img_path = img_path_array //小图地址可判断是否存在
            if (!files.exists(img_path)) {
                toastLog(img_path   "文件不存在因此跳过")
                return return_region
            }
            var little_image = images.read(img_path) //小图
            var find_result_bounds = findImage(
                captureScreen(), little_image, {
                region: area_region,
                threshold: threshold
            });
            if (find_result_bounds) {
                return find_result_bounds
            } else {
                return return_region
            }
        }
    // } catch (error) {
    //     toastLog("findImageCoordinate方法出现错误:"   error)
    //     return return_region;
    // }
}



和第一个稍微有点重叠不过意图还是不一样的 这个主要就是找到了做别的操作比如保刷功能。

打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在