【Auto.JS】Autojs官方提取文档使用说明函数 (2)

接上一篇文章:Autojs官方提取文档使用说明函数 (1)

 

 

Images

Stability: 2 - Stable

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

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

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

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

// 读取图片

var img = images.read("./1.png");

//对图片进行操作

...

// 回收图片

img.recycle();

例外的是,caputerScreen()返回的图片不需要回收。

图片处理

images.read(path)

  • path {string} 图片路径

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

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} 图片格式,可选的值为:
    • 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");

images.fromBase64(base64)

  • base64 {string} 图片的Base64数据
  • 返回 {Image}

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

images.toBase64(img[, format = "png", quality = 100])

  • image {image} 图片
  • format {string} 图片格式,可选的值为:
    • png
    • jpeg/jpg
    • webp
  • quality {number} 图片质量,为0~100的整数值
  • 返回 {string}

把图片编码为base64数据并返回。

images.fromBytes(bytes)

  • bytes {byte[]} 字节数组

解码字节数组bytes并返回解码后的图片Image对象。如果bytes无法解码则返回null。

images.toBytes(img[, format = "png", quality = 100])

  • image {image} 图片
  • format {string} 图片格式,可选的值为:
    • png
    • jpeg/jpg
    • webp
  • quality {number} 图片质量,为0~100的整数值
  • 返回 {byte[]}

把图片编码为字节数组并返回。

images.clip(img, x, y, w, h)

  • img {Image} 图片
  • x {number} 剪切区域的左上角横坐标
  • y {number} 剪切区域的左上角纵坐标
  • w {number} 剪切区域的宽度
  • h {number} 剪切区域的高度
  • 返回 {Image}

从图片img的位置(x, y)处剪切大小为w * h的区域,并返回该剪切区域的新图片。

var src = images.read("/sdcard/1.png");

var clip = images.clip(src, 100, 100, 400, 400);

images.save(clip, "/sdcard/clip.png");

images.resize(img, size[, interpolation])

[v4.1.0新增]

  • img {Image} 图片
  • size {Array} 两个元素的数组[w, h],分别表示宽度和高度;如果只有一个元素,则宽度和高度相等
  • interpolation {string} 插值方法,可选,默认为"LINEAR"(线性插值),可选的值有:
    • NEAREST 最近邻插值
    • LINEAR 线性插值(默认)
    • AREA 区域插值
    • CUBIC 三次样条插值
    • LANCZOS4 Lanczos插值 参见InterpolationFlags
  • 返回 {Image}

调整图片大小,并返回调整后的图片。例如把图片放缩为200*300:images.resize(img, [200, 300])。

参见Imgproc.resize

images.scale(img, fx, fy[, interpolation])

[v4.1.0新增]

  • img {Image} 图片
  • fx {number} 宽度放缩倍数
  • fy {number} 高度放缩倍数
  • interpolation {string} 插值方法,可选,默认为"LINEAR"(线性插值),可选的值有:
    • NEAREST 最近邻插值
    • LINEAR 线性插值(默认)
    • AREA 区域插值
    • CUBIC 三次样条插值
    • LANCZOS4 Lanczos插值 参见InterpolationFlags
  • 返回 {Image}

放缩图片,并返回放缩后的图片。例如把图片变成原来的一半:images.scale(img, 0.5, 0.5)。

参见Imgproc.resize

images.rotate(img, degress[, x, y])

[v4.1.0新增]

  • img {Image} 图片
  • degress {number} 旋转角度。
  • x {number} 旋转中心x坐标,默认为图片中点
  • y {number} 旋转中心y坐标,默认为图片中点
  • 返回 {Image}

将图片逆时针旋转degress度,返回旋转后的图片对象。

例如逆时针旋转90度为images.rotate(img, 90)。

images.concat(img1, image2[, direction])

[v4.1.0新增]

  • img1 {Image} 图片1
  • img2 {Image} 图片2
  • direction {string} 连接方向,默认为"RIGHT",可选的值有:
    • LEFT 将图片2接到图片1左边
    • RIGHT 将图片2接到图片1右边
    • TOP 将图片2接到图片1上边
    • BOTTOM 将图片2接到图片1下边
  • 返回 {Image}

连接两张图片,并返回连接后的图像。如果两张图片大小不一致,小的那张将适当居中。

images.grayscale(img)

[v4.1.0新增]

  • img {Image} 图片
  • 返回 {Image}

灰度化图片,并返回灰度化后的图片。

image.threshold(img, threshold, maxVal[, type])

[v4.1.0新增]

  • img {Image} 图片
  • threshold {number} 阈值
  • maxVal {number} 最大值
  • type {string} 阈值化类型,默认为"BINARY",参见ThresholdTypes, 可选的值:
    • BINARY
    • BINARY_INV
    • TRUNC
    • TOZERO
    • TOZERO_INV
    • OTSU
    • TRIANGLE
  • 返回 {Image}

将图片阈值化,并返回处理后的图像。可以用这个函数进行图片二值化。例如:images.threshold(img, 100, 255, "BINARY"),这个代码将图片中大于100的值全部变成255,其余变成0,从而达到二值化的效果。如果img是一张灰度化图片,这个代码将会得到一张黑白图片。

可以参考有关博客(比如threshold函数的使用)或者OpenCV文档threshold

images.adaptiveThreshold(img, maxValue, adaptiveMethod, thresholdType, blockSize, C)

[v4.1.0新增]

  • img {Image} 图片
  • maxValue {number} 最大值
  • adaptiveMethod {string} 在一个邻域内计算阈值所采用的算法,可选的值有:
    • MEAN_C 计算出领域的平均值再减去参数C的值
    • GAUSSIAN_C 计算出领域的高斯均值再减去参数C的值
  • thresholdType {string} 阈值化类型,可选的值有:
    • BINARY
    • BINARY_INV
  • blockSize {number} 邻域块大小
  • C {number} 偏移值调整量
  • 返回 {Image}

对图片进行自适应阈值化处理,并返回处理后的图像。

可以参考有关博客(比如threshold与adaptiveThreshold)或者OpenCV文档adaptiveThreshold

images.cvtColor(img, code[, dstCn])

[v4.1.0新增]

  • img {Image} 图片
  • code {string} 颜色空间转换的类型,可选的值有一共有205个(参见ColorConversionCodes),这里只列出几个:
    • BGR2GRAY BGR转换为灰度
    • BGR2HSV BGR转换为HSV
    • ``
  • dstCn {number} 目标图像的颜色通道数量,如果不填写则根据其他参数自动决定。
  • 返回 {Image}

对图像进行颜色空间转换,并返回转换后的图像。

可以参考有关博客(比如颜色空间转换)或者OpenCV文档cvtColor

images.inRange(img, lowerBound, upperBound)

[v4.1.0新增]

  • img {Image} 图片
  • lowerBound {string} | {number} 颜色下界
  • upperBound {string} | {number} 颜色下界
  • 返回 {Image}

将图片二值化,在lowerBound~upperBound范围以外的颜色都变成0,在范围以内的颜色都变成255。

例如images.inRange(img, "#000000", "#222222")。

images.interval(img, color, interval)

[v4.1.0新增]

  • img {Image} 图片
  • color {string} | {number} 颜色值
  • interval {number} 每个通道的范围间隔
  • 返回 {Image}

将图片二值化,在color-interval ~ color+interval范围以外的颜色都变成0,在范围以内的颜色都变成255。这里对color的加减是对每个通道而言的。

例如images.interval(img, "#888888", 16),每个通道的颜色值均为0x88,加减16后的范围是[0x78, 0x98],因此这个代码将把#787878~#989898的颜色变成#FFFFFF,而把这个范围以外的变成#000000。

images.blur(img, size[, anchor, type])

[v4.1.0新增]

  • img {Image} 图片
  • size {Array} 定义滤波器的大小,如[3, 3]
  • anchor {Array} 指定锚点位置(被平滑点),默认为图像中心
  • type {string} 推断边缘像素类型,默认为"DEFAULT",可选的值有:
    • CONSTANT iiiiii|abcdefgh|iiiiiii with some specified i
    • REPLICATE aaaaaa|abcdefgh|hhhhhhh
    • REFLECT fedcba|abcdefgh|hgfedcb
    • WRAP cdefgh|abcdefgh|abcdefg
    • REFLECT_101 gfedcb|abcdefgh|gfedcba
    • TRANSPARENT uvwxyz|abcdefgh|ijklmno
    • REFLECT101 same as BORDER_REFLECT_101
    • DEFAULT same as BORDER_REFLECT_101
    • ISOLATED do not look outside of ROI
  • 返回 {Image}

对图像进行模糊(平滑处理),返回处理后的图像。

可以参考有关博客(比如实现图像平滑处理)或者OpenCV文档blur

images.medianBlur(img, size)

[v4.1.0新增]

  • img {Image} 图片
  • size {Array} 定义滤波器的大小,如[3, 3]
  • 返回 {Image}

对图像进行中值滤波,返回处理后的图像。

可以参考有关博客(比如实现图像平滑处理)或者OpenCV文档blur

images.gaussianBlur(img, size[, sigmaX, sigmaY, type])

[v4.1.0新增]

  • img {Image} 图片
  • size {Array} 定义滤波器的大小,如[3, 3]
  • sigmaX {number} x方向的标准方差,不填写则自动计算
  • sigmaY {number} y方向的标准方差,不填写则自动计算
  • type {string} 推断边缘像素类型,默认为"DEFAULT",参见images.blur
  • 返回 {Image}

对图像进行高斯模糊,返回处理后的图像。

可以参考有关博客(比如实现图像平滑处理)或者OpenCV文档GaussianBlur

images.matToImage(mat)

[v4.1.0新增]

  • mat {Mat} OpenCV的Mat对象
  • 返回 {Image}

把Mat对象转换为Image对象。

找图找色

images.requestScreenCapture([landscape])

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

向系统申请屏幕截图权限,返回是否请求成功。

第一次使用该函数会弹出截图权限请求,建议选择“总是允许”。

这个函数只是申请截图权限,并不会真正执行截图,真正的截图函数是captureScreen()。

该函数在截图脚本中只需执行一次,而无需每次调用captureScreen()都调用一次。

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

建议在本软件界面运行该函数,在其他软件界面运行时容易出现一闪而过的黑屏现象。

示例:

//请求截图

if(!requestScreenCapture()){

    toast("请求截图失败");

    exit();

}

//连续截图10张图片(间隔1秒)并保存到存储卡目录

for(var i = 0; i < 10; i++){

    captureScreen("/sdcard/screencapture" + i + ".png");

    sleep(1000);

}

该函数也可以作为全局函数使用。

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中。如果文件不存在会被创建;文件存在会被覆盖。

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

images.pixel(image, x, y)

  • image {Image} 图片
  • x {number} 要获取的像素的横坐标。
  • y {number} 要获取的像素的纵坐标。

返回图片image在点(x, y)处的像素的ARGB值。

该值的格式为0xAARRGGBB,是一个"32位整数"(虽然JavaScript中并不区分整数类型和其他数值类型)。

坐标系以图片左上角为原点。以图片左侧边为y轴,上侧边为x轴。

images.findColor(image, color, options)

  • image {Image} 图片
  • color {number} | {string} 要寻找的颜色的RGB值。如果是一个整数,则以0xRRGGBB的形式代表RGB值(A通道会被忽略);如果是字符串,则以"#RRGGBB"代表其RGB值。
  • options {Object} 选项

在图片中寻找颜色color。找到时返回找到的点Point,找不到时返回null。

选项包括:

  • region {Array} 找色区域。是一个两个或四个元素的数组。(region[0], region[1])表示找色区域的左上角;region[2]*region[3]表示找色区域的宽高。如果只有region只有两个元素,则找色区域为(region[0], region[1])到屏幕右下角。如果不指定region选项,则找色区域为整张图片。
  • threshold {number} 找色时颜色相似度的临界值,范围为0~255(越小越相似,0为颜色相等,255为任何颜色都能匹配)。默认为4。threshold和浮点数相似度(0.0~1.0)的换算为 similarity = (255 - threshold) / 255.

该函数也可以作为全局函数使用。

一个循环找色的例子如下:

requestScreenCapture();

 

//循环找色,找到红色(#ff0000)时停止并报告坐标

while(true){

    var img = captureScreen();

    var point = findColor(img, "#ff0000");

    if(point){

        toast("找到红色,坐标为(" + point.x + ", " + point.y + ")");

    }

}

一个区域找色的例子如下:

//读取本地图片/sdcard/1.png

var img = images.read("/sdcard/1.png");

//判断图片是否加载成功

if(!img){

    toast("没有该图片");

    exit();

}

//在该图片中找色,指定找色区域为在位置(400, 500)的宽为300长为200的区域,指定找色临界值为4

var point = findColor(img, "#00ff00", {

     region: [400, 500, 300, 200],

     threshold: 4

 });

if(point){

    toast("找到啦:" + point);

}else{

    toast("没找到");

}

images.findColorInRegion(img, color, x, y[, width, height, threshold])

区域找色的简便方法。

相当于

images.findColor(img, color, {

     region: [x, y, width, height],

     threshold: threshold

});

该函数也可以作为全局函数使用。

images.findColorEquals(img, color[, x, y, width, height])

  • img {Image} 图片
  • color {number} | {string} 要寻找的颜色
  • x {number} 找色区域的左上角横坐标
  • y {number} 找色区域的左上角纵坐标
  • width {number} 找色区域的宽度
  • height {number} 找色区域的高度
  • 返回 {Point}

在图片img指定区域中找到颜色和color完全相等的某个点,并返回该点的左边;如果没有找到,则返回null。

找色区域通过x, y, width, height指定,如果不指定找色区域,则在整张图片中寻找。

该函数也可以作为全局函数使用。

示例: (通过找QQ红点的颜色来判断是否有未读消息)

requestScreenCapture();

launchApp("QQ");

sleep(1200);

var p = findColorEquals(captureScreen(), "#f64d30");

if(p){

    toast("有未读消息");

}else{

    toast("没有未读消息");

}

images.findMultiColors(img, firstColor, colors[, options])

  • img {Image} 要找色的图片
  • firstColor {number} | {string} 第一个点的颜色
  • colors {Array} 表示剩下的点相对于第一个点的位置和颜色的数组,数组的每个元素为[x, y, color]
  • options {Object} 选项,包括:
    • region {Array} 找色区域。是一个两个或四个元素的数组。(region[0], region[1])表示找色区域的左上角;region[2]*region[3]表示找色区域的宽高。如果只有region只有两个元素,则找色区域为(region[0], region[1])到屏幕右下角。如果不指定region选项,则找色区域为整张图片。
    • threshold {number} 找色时颜色相似度的临界值,范围为0~255(越小越相似,0为颜色相等,255为任何颜色都能匹配)。默认为4。threshold和浮点数相似度(0.0~1.0)的换算为 similarity = (255 - threshold) / 255.

多点找色,类似于按键精灵的多点找色,其过程如下:

  • 在图片img中找到颜色firstColor的位置(x0, y0)
  • 对于数组colors的每个元素[x, y, color],检查图片img在位置(x + x0, y + y0)上的像素是否是颜色color,是的话返回(x0, y0),否则继续寻找firstColor的位置,重新执行第1步
  • 整张图片都找不到时返回null

例如,对于代码images.findMultiColors(img, "#123456", [[10, 20, "#ffffff"], [30, 40, "#000000"]]),假设图片在(100, 200)的位置的颜色为#123456, 这时如果(110, 220)的位置的颜色为#fffff且(130, 240)的位置的颜色为#000000,则函数返回点(100, 200)。

如果要指定找色区域,则在options中指定,例如:

var p = images.findMultiColors(img, "#123456", [[10, 20, "#ffffff"], [30, 40, "#000000"]], {

    region: [0, 960, 1080, 960]

});

images.detectsColor(image, color, x, y[, threshold = 16, algorithm = "diff"])

  • image {Image} 图片
  • color {number} | {string} 要检测的颜色
  • x {number} 要检测的位置横坐标
  • y {number} 要检测的位置纵坐标
  • threshold {number} 颜色相似度临界值,默认为16。取值范围为0~255。
  • algorithm {string} 颜色匹配算法,包括:
    • "equal": 相等匹配,只有与给定颜色color完全相等时才匹配。
    • "diff": 差值匹配。与给定颜色的R、G、B差的绝对值之和小于threshold时匹配。
    • "rgb": rgb欧拉距离相似度。与给定颜色color的rgb欧拉距离小于等于threshold时匹配。
    • "rgb+": 加权rgb欧拉距离匹配(LAB Delta E)。
    • "hs": hs欧拉距离匹配。hs为HSV空间的色调值。

返回图片image在位置(x, y)处是否匹配到颜色color。用于检测图片中某个位置是否是特定颜色。

一个判断微博客户端的某个微博是否被点赞过的例子:

requestScreenCapture();

//找到点赞控件

var like = id("ly_feed_like_icon").findOne();

//获取该控件中点坐标

var x = like.bounds().centerX();

var y = like.bounds().centerY();

//截图

var img = captureScreen();

//判断在该坐标的颜色是否为橙红色

if(images.detectsColor(img, "#fed9a8", x, y)){

    //是的话则已经是点赞过的了,不做任何动作

}else{

    //否则点击点赞按钮

    like.click();

}

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 p = findImage(img, templ);

if(p){

    toast("找到啦:" + p);

}else{

    toast("没找到");

}

稍微复杂点的区域找图例子如下:

auto();

requestScreenCapture();

var wx = images.read("/sdcard/微信图标.png");

//返回桌面

home();

//截图并找图

var p = findImage(captureScreen(), wx, {

    region: [0, 50],

    threshold: 0.8

});

if(p){

    toast("在桌面找到了微信图标啦: " + p);

}else{

    toast("在桌面没有找到微信图标");

}

images.findImageInRegion(img, template, x, y[, width, height, threshold])

区域找图的简便方法。相当于:

images.findImage(img, template, {

    region: [x, y, width, height],

    threshold: threshold

})

该函数也可以作为全局函数使用。

images.matchTemplate(img, template, options)

[v4.1.0新增]

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

在大图片中搜索小图片,并返回搜索结果MatchingResult。该函数可以用于找图时找出多个位置,可以通过max参数控制最大的结果数量。也可以对匹配结果进行排序、求最值等操作。

MatchingResult

[v4.1.0新增]

matches

  • {Array} 匹配结果的数组。

数组的元素是一个Match对象:

  • point {Point} 匹配位置
  • similarity {number} 相似度

例如:

var result = images.matchTemplate(img, template, {

    max: 100

});

result.matches.forEach(match => {

    log("point = " + match.point + ", similarity = " + match.similarity);

});

points

  • {Array} 匹配位置的数组。

first()

  • 返回 {Match}

第一个匹配结果。如果没有任何匹配,则返回null。

last()

  • 返回 {Match}

最后一个匹配结果。如果没有任何匹配,则返回null。

leftmost()

  • 返回 {Match}

位于大图片最左边的匹配结果。如果没有任何匹配,则返回null。

topmost()

  • 返回 {Match}

位于大图片最上边的匹配结果。如果没有任何匹配,则返回null。

rightmost()

  • 返回 {Match}

位于大图片最右边的匹配结果。如果没有任何匹配,则返回null。

bottommost()

  • 返回 {Match}

位于大图片最下边的匹配结果。如果没有任何匹配,则返回null。

best()

  • 返回 {Match}

相似度最高的匹配结果。如果没有任何匹配,则返回null。

worst()

  • 返回 {Match}

相似度最低的匹配结果。如果没有任何匹配,则返回null。

sortBy(cmp)

  • cmp {Function}|{string} 比较函数,或者是一个字符串表示排序方向。例如"left"表示将匹配结果按匹配位置从左往右排序、"top"表示将匹配结果按匹配位置从上往下排序,"left-top"表示将匹配结果按匹配位置从左往右、从上往下排序。方向包括left(左), top (上), right (右), bottom(下)。
  • {MatchingResult}

对匹配结果进行排序,并返回排序后的结果。

var result = images.matchTemplate(img, template, {

    max: 100

});

log(result.sortBy("top-right"));

Image

表示一张图片,可以是截图的图片,或者本地读取的图片,或者从网络获取的图片。

Image.getWidth()

返回以像素为单位图片宽度。

Image.getHeight()

返回以像素为单位的图片高度。

Image.saveTo(path)

  • path {string} 路径

把图片保存到路径path。(如果文件存在则覆盖)

Image.pixel(x, y)

  • x {number} 横坐标
  • y {number} 纵坐标

返回图片image在点(x, y)处的像素的ARGB值。

该值的格式为0xAARRGGBB,是一个"32位整数"(虽然JavaScript中并不区分整数类型和其他数值类型)。

坐标系以图片左上角为原点。以图片左侧边为y轴,上侧边为x轴。

##

Point

findColor, findImage返回的对象。表示一个点(坐标)。

Point.x

横坐标。

Point.y

纵坐标。

Canvas

canvas提供了使用画布进行2D画图的支持,可用于简单的小游戏开发或者图片编辑。使用canvas可以轻松地在一张图片或一个界面上绘制各种线与图形。

canvas的坐标系为平面直角坐标系,以屏幕左上角为原点,屏幕上边为x轴正方向,屏幕左边为y轴正方向。例如分辨率为1920*1080的屏幕上,画一条从屏幕左上角到屏幕右下角的线段为:

canvas.drawLine(0, 0, 1080, 1920, paint);

canvas的绘制依赖于画笔Paint, 通过设置画笔的粗细、颜色、填充等可以改变绘制出来的图形。例如绘制一个红色实心正方形为:

var paint = new Paint();

//设置画笔为填充,则绘制出来的图形都是实心的

paint.setStyle(Paint.STYLE.FILL);

//设置画笔颜色为红色

paint.setColor(colors.RED);

//绘制一个从坐标(0, 0)到坐标(100, 100)的正方形

canvas.drawRect(0, 0, 100, 100, paint);

如果要绘制正方形的边框,则通过设置画笔的Style来实现:

var paint = new Paint();

//设置画笔为描边,则绘制出来的图形都是轮廓

paint.setStyle(Paint.STYLE.STROKE);

//设置画笔颜色为红色

paint.setColor(colors.RED);

//绘制一个从坐标(0, 0)到坐标(100, 100)的正方形

canvas.drawRect(0, 0, 100, 100, paint);

结合画笔canvas可以绘制基本图形、图片等。

canvas.drawARGB(a, r, g, b)

canvas.draw

Keys

按键模拟部分提供了一些模拟物理按键的全局函数,包括Home、音量键、照相键等,有的函数依赖于无障碍服务,有的函数依赖于root权限。

一般来说,以大写字母开头的函数都依赖于root权限。执行此类函数时,如果没有root权限,则函数执行后没有效果,并会在控制台输出一个警告。

back()

  • 返回 {boolean}

模拟按下返回键。返回是否执行成功。 此函数依赖于无障碍服务。

home()

  • 返回 {boolean}

模拟按下Home键。返回是否执行成功。 此函数依赖于无障碍服务。

powerDialog()

  • 返回 {boolean}

弹出电源键菜单。返回是否执行成功。 此函数依赖于无障碍服务。

notifications()

  • 返回 {boolean}

拉出通知栏。返回是否执行成功。 此函数依赖于无障碍服务。

quickSettings()

  • 返回 {boolean}

显示快速设置(下拉通知栏到底)。返回是否执行成功。 此函数依赖于无障碍服务。

recents()

  • 返回 {boolean}

显示最近任务。返回是否执行成功。 此函数依赖于无障碍服务。

splitScreen()

  • 返回 {boolean}

分屏。返回是否执行成功。 此函数依赖于无障碍服务, 并且需要系统自身功能的支持。

Home()

模拟按下Home键。 此函数依赖于root权限。

Back()

模拟按下返回键。 此函数依赖于root权限。

Power()

模拟按下电源键。 此函数依赖于root权限。

Menu()

模拟按下菜单键。 此函数依赖于root权限。

VolumeUp()

按下音量上键。 此函数依赖于root权限。

VolumeDown()

按键音量上键。 此函数依赖于root权限。

Camera()

模拟按下照相键。

Up()

模拟按下物理按键上。 此函数依赖于root权限。

Down()

模拟按下物理按键下。 此函数依赖于root权限。

Left()

模拟按下物理按键左。 此函数依赖于root权限。

Right()

模拟按下物理按键右。 此函数依赖于root权限。

OK()

模拟按下物理按键确定。 此函数依赖于root权限。

Text(text)

  • text {string} 要输入的文字,只能为英文或英文符号 输入文字text。例如Text("aaa");

KeyCode(code)

  • code {number} | 要按下的按键的数字代码或名称。参见下表。 模拟物理按键。例如KeyCode(29)和KeyCode("KEYCODE_A")是按下A键。

附录: KeyCode对照表

KeyCode KeyEvent Value

  • KEYCODE_MENU 1
  • KEYCODE_SOFT_RIGHT 2
  • KEYCODE_HOME 3
  • KEYCODE_BACK 4
  • KEYCODE_CALL 5
  • KEYCODE_ENDCALL 6
  • KEYCODE_0 7
  • KEYCODE_1 8
  • KEYCODE_2 9
  • KEYCODE_3 10
  • KEYCODE_4 11
  • KEYCODE_5 12
  • KEYCODE_6 13
  • KEYCODE_7 14
  • KEYCODE_8 15
  • KEYCODE_9 16
  • KEYCODE_STAR 17
  • KEYCODE_POUND 18
  • KEYCODE_DPAD_UP 19
  • KEYCODE_DPAD_DOWN 20
  • KEYCODE_DPAD_LEFT 21
  • KEYCODE_DPAD_RIGHT 22
  • KEYCODE_DPAD_CENTER 23
  • KEYCODE_VOLUME_UP 24
  • KEYCODE_VOLUME_DOWN 25
  • KEYCODE_POWER 26
  • KEYCODE_CAMERA 27
  • KEYCODE_CLEAR 28
  • KEYCODE_A 29
  • KEYCODE_B 30
  • KEYCODE_C 31
  • KEYCODE_D 32
  • KEYCODE_E 33
  • KEYCODE_F 34
  • KEYCODE_G 35
  • KEYCODE_H 36
  • KEYCODE_I 37
  • KEYCODE_J 38
  • KEYCODE_K 39
  • KEYCODE_L 40
  • KEYCODE_M 41
  • KEYCODE_N 42
  • KEYCODE_O 43
  • KEYCODE_P 44
  • KEYCODE_Q 45
  • KEYCODE_R 46
  • KEYCODE_S 47
  • KEYCODE_T 48
  • KEYCODE_U 49
  • KEYCODE_V 50
  • KEYCODE_W 51
  • KEYCODE_X 52
  • KEYCODE_Y 53
  • KEYCODE_Z 54
  • KEYCODE_COMMA 55
  • KEYCODE_PERIOD 56
  • KEYCODE_ALT_LEFT 57
  • KEYCODE_ALT_RIGHT 58
  • KEYCODE_SHIFT_LEFT 59
  • KEYCODE_SHIFT_RIGHT 60
  • KEYCODE_TAB 61
  • KEYCODE_SPACE 62
  • KEYCODE_SYM 63
  • KEYCODE_EXPLORER 64
  • KEYCODE_ENVELOPE 65
  • KEYCODE_ENTER 66
  • KEYCODE_DEL 67
  • KEYCODE_GRAVE 68
  • KEYCODE_MINUS 69
  • KEYCODE_EQUALS 70
  • KEYCODE_LEFT_BRACKET 71
  • KEYCODE_RIGHT_BRACKET 72
  • KEYCODE_BACKSLASH 73
  • KEYCODE_SEMICOLON 74
  • KEYCODE_APOSTROPHE 75
  • KEYCODE_SLASH 76
  • KEYCODE_AT 77
  • KEYCODE_NUM 78
  • KEYCODE_HEADSETHOOK 79
  • KEYCODE_FOCUS 80
  • KEYCODE_PLUS 81
  • KEYCODE_MENU 82
  • KEYCODE_NOTIFICATION 83
  • KEYCODE_SEARCH 84
  • TAGLAST KEYCODE 85

Media

Stability: 2 - Stable

media模块提供多媒体编程的支持。目前仅支持音乐播放和媒体文件扫描。后续会结合UI加入视频播放等功能。

需要注意是,使用该模块播放音乐时是在后台异步播放的,在脚本结束后会自动结束播放,因此可能需要插入诸如sleep()的语句来使脚本保持运行。例如:

//播放音乐

media.playMusic("/sdcard/1.mp3");

//让音乐播放完

sl

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值