稳定性:稳定
在 Auto.js 有两种方式表示一个颜色。
一种是使用一个字符串"#AARRGGBB"或"#RRGGBB",其中 AA 是 Alpha 通道 (透明度) 的值,RR 是 R 通道 (红色) 的值,GG 是 G 通道 (绿色) 的值,BB 是 B 通道 (蓝色) 的值。例如"#ffffff"表示白色,"#7F000000"表示半透明的黑色。
另一种是使用一个 16 进制的"32 位整数" 0xAARRGGBB 来表示一个颜色,例如 0xFF112233表示颜色"#112233", 0x11223344表示颜色"#11223344"。
可以通过colors.toString()把颜色整数转换为字符串,通过colors.parseColor()把颜色字符串解析为颜色整数。
color {number} 整数 RGB 颜色值返回颜色值的字符串,格式为 "#AARRGGBB"。
color {number} | {string} 颜色值返回颜色 color 的 R 通道的值,范围 0~255.
color {number} | {string} 颜色值返回颜色 color 的 G 通道的值,范围 0~255.
color {number} | {string} 颜色值返回颜色 color 的 B 通道的值,范围 0~255.
color {number} | {string} 颜色值返回颜色 color 的 Alpha 通道的值,范围 0~255.
返回这些颜色通道构成的整数颜色值。Alpha 通道将是 255(不透明)。
alpha {number} 颜色的 Alpha 通道的值red {number} 颜色的 R 通道的值green {number} 颜色的 G 通道的值blue {number} 颜色的 B 通道的值返回这些颜色通道构成的整数颜色值。
colorStr {string} 表示颜色的字符串,例如"#112233"返回颜色的整数值。
color1 {number} | {string} 颜色值 1color1 {number} | {string} 颜色值 2threshold {number} 颜色相似度临界值,默认为 4。取值范围为 0~255。这个值越大表示允许的相似程度越小,如果这个值为 0,则两个颜色相等时该函数才会返回 true。algorithm {string} 颜色匹配算法,默认为"diff", 包括:
返回两个颜色是否相似。
color1 {number} | {string} 颜色值 1color1 {number} | {string} 颜色值 2返回两个颜色是否相等。*注意该函数会忽略 Alpha 通道的值进行比较。
黑色,颜色值 #FF000000
深灰色,颜色值 #FF444444
灰色,颜色值 #FF888888
亮灰色,颜色值 #FFCCCCCC
白色,颜色值 #FFFFFFFF
红色,颜色值 #FFFF0000
绿色,颜色值 #FF00FF00
蓝色,颜色值 #FF0000FF
黄色,颜色值 #FFFFFF00
青色,颜色值 #FF00FFFF
品红色,颜色值 #FFFF00FF
透明,颜色值 #00000000
稳定性:稳定
images 模块提供了一些手机设备中常见的图片处理函数,包括截图、读写图片、图片剪裁、旋转、二值化、找色找图等。
该模块分为两个部分,找图找色部分和图片处理部分。
需要注意的是,image 对象创建后尽量在不使用时进行回收,同时避免循环创建大量图片。因为图片是一种占用内存比较大的资源,尽管 Auto.js 通过各种方式(比如图片缓存机制、垃圾回收时回收图片、脚本结束时回收所有图片)尽量降低图片资源的泄漏和内存占用,但是糟糕的代码仍然可以占用大量内存。
Image 对象通过调用recycle()函数来回收。例如:
例外的是,caputerScreen()返回的图片不需要回收。
path {string} 图片路径读取在路径 path 的图片文件并返回一个 Image 对象。如果文件不存在或者文件无法解码则返回 null。
url {string} 图片 URL 地址加载在地址 URL 的网络图片并返回一个 Image 对象。如果地址不存在或者图片无法解码则返回 null。
img {Image} 图片复制一张图片并返回新的副本。该函数会完全复制 img 对象的数据。
image {Image} 图片path {string} 路径format {string} 图片格式,可选的值为:
pngjpeg/jpgwebpquality {number} 图片质量,为 0~100 的整数值把图片 image 以 PNG 格式保存到 path 中。如果文件不存在会被创建;文件存在会被覆盖。
base64 {string} 图片的 Base64 数据解码 Base64 数据并返回解码后的图片 Image 对象。如果 base64 无法解码则返回null。
image {image} 图片format {string} 图片格式,可选的值为:
pngjpeg/jpgwebpquality {number} 图片质量,为 0~100 的整数值把图片编码为 base64 数据并返回。
bytes {byte[]} 字节数组解码字节数组 bytes 并返回解码后的图片 Image 对象。如果 bytes 无法解码则返回null。
image {image} 图片format {string} 图片格式,可选的值为:
pngjpeg/jpgwebpquality {number} 图片质量,为 0~100 的整数值把图片编码为字节数组并返回。
img {Image} 图片x {number} 剪切区域的左上角横坐标y {number} 剪切区域的左上角纵坐标w {number} 剪切区域的宽度h {number} 剪切区域的高度从图片 img 的位置 (x, y) 处剪切大小为 w * h 的区域,并返回该剪切区域的新图片。
[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])。
[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)。
[v4.1.0 新增]
img {Image} 图片degress {number} 旋转角度。x {number} 旋转中心 x 坐标,默认为图片中点y {number} 旋转中心 y 坐标,默认为图片中点将图片逆时针旋转 degress 度,返回旋转后的图片对象。
例如逆时针旋转 90 度为images.rotate(img, 90)。
[v4.1.0 新增]
img1 {Image} 图片 1img2 {Image} 图片 2LEFT 将图片 2 接到图片 1 左边RIGHT 将图片 2 接到图片 1 右边TOP 将图片 2 接到图片 1 上边BOTTOM 将图片 2 接到图片 1 下边连接两张图片,并返回连接后的图像。如果两张图片大小不一致,小的那张将适当居中。
[v4.1.0 新增]
img {Image} 图片灰度化图片,并返回灰度化后的图片。
[v4.1.0 新增]
img {Image} 图片threshold {number} 阈值maxVal {number} 最大值type {string} 阈值化类型,默认为"BINARY",参见ThresholdTypes, 可选的值:
BINARYBINARY_INVTRUNCTOZEROTOZERO_INVOTSUTRIANGLE将图片阈值化,并返回处理后的图像。可以用这个函数进行图片二值化。例如:images.threshold(img, 100, 255, "BINARY"),这个代码将图片中大于 100 的值全部变成 255,其余变成 0,从而达到二值化的效果。如果 img 是一张灰度化图片,这个代码将会得到一张黑白图片。
可以参考有关博客(比如threshold 函数的使用)或者 OpenCV 文档threshold。
[v4.1.0 新增]
img {Image} 图片maxValue {number} 最大值adaptiveMethod {string} 在一个邻域内计算阈值所采用的算法,可选的值有:
MEAN_C 计算出领域的平均值再减去参数 C 的值GAUSSIAN_C 计算出领域的高斯均值再减去参数 C 的值thresholdType {string} 阈值化类型,可选的值有:
BINARYBINARY_INVblockSize {number} 邻域块大小C {number} 偏移值调整量对图片进行自适应阈值化处理,并返回处理后的图像。
可以参考有关博客(比如threshold 与 adaptiveThreshold)或者 OpenCV 文档adaptiveThreshold。
[v4.1.0 新增]
img {Image} 图片code {string} 颜色空间转换的类型,可选的值有一共有 205 个(参见ColorConversionCodes),这里只列出几个:
BGR2GRAY BGR 转换为灰度BGR2HSV BGR 转换为 HSVdstCn {number} 目标图像的颜色通道数量,如果不填写则根据其他参数自动决定。对图像进行颜色空间转换,并返回转换后的图像。
可以参考有关博客(比如颜色空间转换)或者 OpenCV 文档cvtColor。
[v4.1.0 新增]
img {Image} 图片lowerBound {string} | {number} 颜色下界upperBound {string} | {number} 颜色下界将图片二值化,在 lowerBound~upperBound 范围以外的颜色都变成 0,在范围以内的颜色都变成 255。
例如images.inRange(img, "#000000", "#222222")。
[v4.1.0 新增]
img {Image} 图片color {string} | {number} 颜色值interval {number} 每个通道的范围间隔将图片二值化,在 color-interval ~ color+interval 范围以外的颜色都变成 0,在范围以内的颜色都变成 255。这里对 color 的加减是对每个通道而言的。
例如images.interval(img, "#888888", 16),每个通道的颜色值均为 0x88,加减 16 后的范围是[0x78, 0x98],因此这个代码将把#787878~#989898 的颜色变成#FFFFFF,而把这个范围以外的变成#000000。
[v4.1.0 新增]
img {Image} 图片size {Array} 定义滤波器的大小,如[3, 3]anchor {Array} 指定锚点位置 (被平滑点),默认为图像中心type {string} 推断边缘像素类型,默认为"DEFAULT",可选的值有:
CONSTANT iiiiii|abcdefgh|iiiiiii with some specified iREPLICATE aaaaaa|abcdefgh|hhhhhhhREFLECT fedcba|abcdefgh|hgfedcbWRAP cdefgh|abcdefgh|abcdefgREFLECT_101 gfedcb|abcdefgh|gfedcbaTRANSPARENT uvwxyz|abcdefgh|ijklmnoREFLECT101 same as BORDER_REFLECT_101DEFAULT same as BORDER_REFLECT_101ISOLATED do not look outside of ROI对图像进行模糊(平滑处理),返回处理后的图像。
可以参考有关博客(比如实现图像平滑处理)或者 OpenCV 文档blur。
[v4.1.0 新增]
img {Image} 图片size {Array} 定义滤波器的大小,如[3, 3]对图像进行中值滤波,返回处理后的图像。
可以参考有关博客(比如实现图像平滑处理)或者 OpenCV 文档blur。
[v4.1.0 新增]
img {Image} 图片size {Array} 定义滤波器的大小,如[3, 3]sigmaX {number} x 方向的标准方差,不填写则自动计算sigmaY {number} y 方向的标准方差,不填写则自动计算type {string} 推断边缘像素类型,默认为"DEFAULT",参见images.blur对图像进行高斯模糊,返回处理后的图像。
可以参考有关博客(比如实现图像平滑处理)或者 OpenCV 文档GaussianBlur。
[v4.1.0 新增]
mat {Mat} OpenCV 的 Mat 对象把 Mat 对象转换为 Image 对象。
landscape {boolean} 截屏方向
true 横屏截图false 竖屏截图return {boolean}向系统申请屏幕截图权限,返回是否请求成功,仅需执行一次
建议在本软件界面运行该函数,在其他软件界面运行时容易出现一闪而过的黑屏现象。
示例:
该函数也可以作为全局函数使用。
return {Image}截取当前屏幕并返回一个 Image 对象。
没有截图权限时执行该函数会抛出 SecurityException。
该函数不会返回 null,两次调用可能返回相同的 Image 对象。这是因为设备截图的更新需要一定的时间,短时间内(一般来说是 16ms)连续调用则会返回同一张截图。
截图需要转换为 Bitmap 格式,从而该函数执行需要一定的时间 (0~20ms)。
另外在 requestScreenCapture() 执行成功后需要一定时间后才有截图可用,因此如果立即调用 captureScreen(),会等待一定时间后 (一般为几百 ms) 才返回截图。
例子:
该函数也可以作为全局函数使用。
path {string} 截图保存路径截取当前屏幕并以 PNG 格式保存到 path 中。如果文件不存在会被创建;文件存在会被覆盖。
该函数不会返回任何值。该函数也可以作为全局函数使用。
image {Image} 图片x {number} 要获取的像素的横坐标。y {number} 要获取的像素的纵坐标。返回图片 image 在点 (x, y) 处的像素的 ARGB 值。
该值的格式为 0xAARRGGBB,是一个"32 位整数"(虽然 JavaScript 中并不区分整数类型和其他数值类型)。
坐标系以图片左上角为原点。以图片左侧边为 y 轴,上侧边为 x 轴。
path {string} 图片的地址return {Object} 包括图片的像素数据和宽高,{data,width,height}读取图片的像素数据和宽高。
image {Image} 图片color {number} | {string} 要寻找的颜色的 RGB 值。如果是一个整数,则以 0xRRGGBB 的形式代表 RGB 值(A 通道会被忽略);如果是字符串,则以"#RRGGBB"代表其 RGB 值。options {Object} 选项包括:
region {Array} 找色区域。是一个两个或四个元素的数组。(region[0], region[1]) 表示找色区域的左上角;region[2]*region[3]表示找色区域的宽高。如果只有 region 只有两个元素,则找色区域为 (region[0], region[1]) 到屏幕右下角。如果不指定 region 选项,则找色区域为整张图片。threshold {number} 找色时颜色相似度的临界值,范围为 0在图片中寻找颜色 color。找到时返回找到的点 Point,找不到时返回 null。
该函数也可以作为全局函数使用。
一个循环找色的例子如下:
一个区域找色的例子如下:
区域找色的简便方法。
相当于
该函数也可以作为全局函数使用。
img {Image} 图片color {number} | {string} 要寻找的颜色x {number} 找色区域的左上角横坐标y {number} 找色区域的左上角纵坐标width {number} 找色区域的宽度height {number} 找色区域的高度在图片 img 指定区域中找到颜色和 color 完全相等的某个点,并返回该点的左边;如果没有找到,则返回null。
找色区域通过x, y, width, height指定,如果不指定找色区域,则在整张图片中寻找。
该函数也可以作为全局函数使用。
示例: (通过找 QQ 红点的颜色来判断是否有未读消息)
img {Image} 图片color {number | string} 要检测的颜色options {Object} 选项包括:
region {Array} 找色区域。是一个两个或四个元素的数组。(region[0], region[1]) 表示找色区域的左上角;region[2]*region[3]表示找色区域的宽高。如果 region只有两个元素,则找色区域为 (region[0], region[1]) 到图片右下角。如果不指定region选项,则找色区域为整张图片。similarity {number} 找色时颜色相似度,范围为 0~1(越大越相似,1 为颜色相等,0 为任何颜色都能匹配)。threshold {number} 找色时颜色相似度的临界值,范围为 0 ~ 255(越小越相似,0 为颜色相等,255 为任何颜色都能匹配)。默认为 4。similarity与threshold的换算为similarity = (255 - threshold) / 255。二选一,同时存在则以similarity为准。return {Array}在图片中寻找所有颜色为color的点。找到时返回找到的点 Point 的数组,找不到时返回null。
例如找出所有白色的点:
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多点找色,类似于按键精灵的多点找色,其过程如下:
null例如,对于代码images.findMultiColors(img, "#123456", [[10, 20, "#ffffff"], [30, 40, "#000000"]]),假设图片在 (100, 200) 的位置的颜色为#123456, 这时如果 (110, 220) 的位置的颜色为#fffff 且 (130, 240) 的位置的颜色为#000000,则函数返回点 (100, 200)。
如果要指定找色区域,则在 options 中指定,例如:
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。用于检测图片中某个位置是否是特定颜色。
一个判断微博客户端的某个微博是否被点赞过的例子:
img {Image} 大图片template {Image} 小图片(模板)options {Object} 选项包括:
threshold {number} 图片相似度。取值范围为 0~1 的浮点数。默认值为 0.9。region {Array} 找图区域。参见 findColor 函数关于 region 的说明。level {number} 一般而言不必修改此参数。不加此参数时该参数会根据图片大小自动调整。找图算法是采用图像金字塔进行的,level 参数表示金字塔的层次,level 越大可能带来越高的找图效率,但也可能造成找图失败(图片因过度缩小而无法分辨)或返回错误位置。因此,除非您清楚该参数的意义并需要进行性能调优,否则不需要用到该参数。找图。在大图片 img 中查找小图片 template 的位置(模块匹配),找到时返回位置坐标 (Point),找不到时返回 null。
该函数也可以作为全局函数使用。
一个最简单的找图例子如下:
稍微复杂点的区域找图例子如下:
区域找图的简便方法。相当于:
该函数也可以作为全局函数使用。
[v4.1.0 新增]
img {Image} 大图片template {Image} 小图片(模板)options {Object} 找图选项:
threshold {number} 图片相似度。取值范围为 0~1 的浮点数。默认值为 0.9。region {Array} 找图区域。参见 findColor 函数关于 region 的说明。max {number} 找图结果最大数量,默认为 5level {number} 一般而言不必修改此参数。不加此参数时该参数会根据图片大小自动调整。找图算法是采用图像金字塔进行的,level 参数表示金字塔的层次,level 越大可能带来越高的找图效率,但也可能造成找图失败(图片因过度缩小而无法分辨)或返回错误位置。因此,除非您清楚该参数的意义并需要进行性能调优,否则不需要用到该参数。在大图片中搜索小图片,并返回搜索结果 MatchingResult。该函数可以用于找图时找出多个位置,可以通过 max 参数控制最大的结果数量。也可以对匹配结果进行排序、求最值等操作。
gray {Image} 灰度图片options {Object} 选项包括:
region {Array} 找圆区域。是一个两个或四个元素的数组。(region[0], region[1]) 表示找圆区域的左上角;region[2]*region[3]表示找圆区域的宽高。如果只有 region 只有两个元素,则找圆区域为 (region[0], region[1]) 到图片右下角。如果不指定region选项,则找圆区域为整张图片。dp {number} dp 是累加面与原始图像相比的分辨率的反比参数,dp=2 时累计面分辨率是元素图像的一半,宽高都缩减为原来的一半,dp=1 时,两者相同。默认为 1。minDst {number} minDist 定义了两个圆心之间的最小距离。默认为图片高度的八分之一。param1 {number} param1 是 Canny 边缘检测的高阈值,低阈值被自动置为高阈值的一半。默认为 100,范围为 0-255。param2 {number} param2 是累加平面对是否是圆的判定阈值,默认为 100。minRadius {number} 定义了检测到的圆的半径的最小值,默认为 0。maxRadius {number} 定义了检测到的圆的半径的最大值,0 为不限制最大值,默认为 0。return {Array}在图片中寻找圆(做霍夫圆变换)。找到时返回找到的所有圆{x,y,radius}的数组,找不到时返回 null。
一个寻找圆的例子:
[v4.1.0 新增]
数组的元素是一个 Match 对象:
point {Point} 匹配位置similarity {number} 相似度例如:
第一个匹配结果。如果没有任何匹配,则返回null。
最后一个匹配结果。如果没有任何匹配,则返回null。
位于大图片最左边的匹配结果。如果没有任何匹配,则返回null。
位于大图片最上边的匹配结果。如果没有任何匹配,则返回null。
位于大图片最右边的匹配结果。如果没有任何匹配,则返回null。
位于大图片最下边的匹配结果。如果没有任何匹配,则返回null。
相似度最高的匹配结果。如果没有任何匹配,则返回null。
相似度最低的匹配结果。如果没有任何匹配,则返回null。
left(左), top (上), right (右), bottom(下)。对匹配结果进行排序,并返回排序后的结果。
表示一张图片,可以是截图的图片,或者本地读取的图片,或者从网络获取的图片。
返回以像素为单位图片宽度。
返回以像素为单位的图片高度。
path {string} 路径把图片保存到路径 path。(如果文件存在则覆盖)
x {number} 横坐标y {number} 纵坐标返回图片 image 在点 (x, y) 处的像素的 ARGB 值。
该值的格式为 0xAARRGGBB,是一个"32 位整数"(虽然 JavaScript 中并不区分整数类型和其他数值类型)。
坐标系以图片左上角为原点。以图片左侧边为 y 轴,上侧边为 x 轴。
findColor, findImage 返回的对象。表示一个点(坐标)。
横坐标。
纵坐标。