申明本人使用的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模块提供了一些手机设备中常见的图片处理函数,包括截图、读写图片、图片剪裁、旋转、二值化、找色找图等。
该模块分为两个部分,找图找色部分和图片处理部分。
需要注意的是,image对象创建后尽量在不使用时进行回收,同时避免循环创建大量图片。因为图片是一种占用内存比较大的资源,尽管Auto.js通过各种方式(比如图片缓存机制、垃圾回收时回收图片、脚本结束时回收所有图片)尽量降低图片资源的泄漏和内存占用,但是糟糕的代码仍然可以占用大量内存。
// 读取图片
var img = images.read("./1.png");
// 对图片进行操作
...
// 回收图片
img.recycle();
path
{string} 图片路径读取在路径path的图片文件并返回一个Image对象。如果文件不存在或者文件无法解码则返回null。
Image对象通过调用recycle()
函数来回收。例如:
// 读取图片
var img = images.read("./1.png");
url
{string} 图片URL地址加载在地址URL的网络图片并返回一个Image对象。如果地址不存在或者图片无法解码则返回null。
img {Image} 图片
返回 {Image}
复制一张图片并返回新的副本。该函数会完全复制img对象的数据。
image
{Image} 图片path
{string} 路径format
{string} 图片格式,可选的值为:
png
jpeg
/jpg
webp
quality
{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");
base64
{string} 图片的Base64数据解码Base64数据并返回解码后的图片Image对象。如果base64无法解码则返回null
。
const permissionsScreenshot = screenshotRequest()
if (!requestScreenCapture()) {
toastLog("请求截图失败");
exit();
}
截图的 官方文档地址
截取当前屏幕并返回一个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));
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
})
}
landscape
{boolean} 布尔值, 表示将要执行的截屏是否为横屏。如果landscape为false, 则表示竖屏截图; true为横屏截图。
如果不指定landscape值,则截图方向由当前设备屏幕方向决定,因此务必注意执行该函数时的屏幕方向。
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.findImage(img, template, {
region: [x, y, width, height],
threshold: threshold
})
实际开发中遇到了很多问题,有些是没认真看文档(认真看文档、认真看文档、认真看文档)有些是理解透彻导致,最终都一个一个解决后面会发布实战篇。
光看不敲是没用的
看后一定要去实践
一定要去敲代码
一定要去运行试错
这样才是有意义的学习