Images 图片与颜色
稳定性: 稳定
在 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()
把颜色字符串解析为颜色整数。
colors
colors.toString(color)
color
{number} 整数 RGB 颜色值- 返回 {string}
返回颜色值的字符串,格式为 "#AARRGGBB"。
colors.red(color)
color
{number} | {string} 颜色值- 返回 {number}
返回颜色 color 的 R 通道的值,范围 0~255.
colors.green(color)
color
{number} | {string} 颜色值- 返回 {number}
返回颜色 color 的 G 通道的值,范围 0~255.
colors.blue(color)
color
{number} | {string} 颜色值- 返回 {number}
返回颜色 color 的 B 通道的值,范围 0~255.
colors.alpha(color)
color
{number} | {string} 颜色值- 返回 {number}
返回颜色 color 的 Alpha 通道的值,范围 0~255.
colors.rgb(red, green, blue)
- red {number} 颜色的 R 通道的值
- blue {number} 颜色的 G 通道的值
- green {number} 颜色的 B 通道的值
- 返回 {number}
返回这些颜色通道构成的整数颜色值。Alpha 通道将是 255(不透明)。
colors.argb(alpha, red, green, blue)
alpha
{number} 颜色的 Alpha 通道的值red
{number} 颜色的 R 通道的值green
{number} 颜色的 G 通道的值blue
{number} 颜色的 B 通道的值- 返回 {number}
返回这些颜色通道构成的整数颜色值。
colors.parseColor(colorStr)
colorStr
{string} 表示颜色的字符串,例如"#112233"- 返回 {number}
返回颜色的整数值。
colors.isSimilar(color2, color2[, threshold, algorithm])
color1
{number} | {string} 颜色值 1color1
{number} | {string} 颜色值 2threshold
{number} 颜色相似度临界值,默认为 4。取值范围为 0~255。这个值越大表示允许的相似程度越小,如果这个值为 0,则两个颜色相等时该函数才会返回 true。algorithm
{string} 颜色匹配算法,默认为"diff", 包括:- "diff": 差值匹配。与给定颜色的 R、G、B 差的绝对值之和小于 threshold 时匹配。
- "rgb": rgb 欧拉距离相似度。与给定颜色 color 的 rgb 欧拉距离小于等于 threshold 时匹配。
- "rgb+": 加权 rgb 欧拉距离匹配(LAB Delta E)。
- "hs": hs 欧拉距离匹配。hs 为 HSV 空间的色调值。
- 返回 {Boolean}
返回两个颜色是否相似。
colors.equals(color1, color2)
color1
{number} | {string} 颜色值 1color1
{number} | {string} 颜色值 2- 返回 {Boolean}
返回两个颜色是否相等。*注意该函数会忽略 Alpha 通道的值进行比较。
log(colors.equals("#112233", "#112234"));
log(colors.equals(0xff112233, 0xff223344));
colors.BLACK
黑色,颜色值 #FF000000
colors.DKGRAY
深灰色,颜色值 #FF444444
colors.GRAY
灰色,颜色值 #FF888888
colors.LTGRAY
亮灰色,颜色值 #FFCCCCCC
colors.WHITE
白色,颜色值 #FFFFFFFF
colors.RED
红色,颜色值 #FFFF0000
colors.GREEN
绿色,颜色值 #FF00FF00
colors.BLUE
蓝色,颜色值 #FF0000FF
colors.YELLOW
黄色,颜色值 #FFFFFF00
colors.CYAN
青色,颜色值 #FF00FFFF
colors.MAGENTA
品红色,颜色值 #FFFF00FF
colors.TRANSPARENT
透明,颜色值 #00000000
Images
稳定性: 稳定
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])
。
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)
。
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} 图片 1img2
{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 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
- 返回 {Image}
对图像进行模糊(平滑处理),返回处理后的图像。
可以参考有关博客(比如实现图像平滑处理)或者 OpenCV 文档blur。
images.medianBlur(img, size)
[v4.1.0 新增]
img
{Image} 图片size
{Array} 定义滤波器的大小,如[3, 3]- 返回 {Image}
对图像进行中值滤波,返回处理后的图像。
可以参考有关博客(比如实现图像平滑处理