屏幕图像
from ascript.android import screen
从屏幕中 获取图像数据
, 图像转换
等操作
方法
截图
获取一张当前屏幕的截图,图片格式可以为 :
Android Bitmap
Android Image
需手动close释放,否则后续截图报错!
Python PIL Image
Python Opencv Mat
BGR格式
- 函数
screen.capture(x:int=None,y:int=None,x1:int=None,y1:int=None,pixel_format=FORMAT_BITMAP)
- 参数
参数 | 类型 | 是否必填 | 说明 |
---|---|---|---|
x,y,x1,y1 | int | 否 | 截图的矩形范围坐标 默认:全屏截图 |
pixel_format | int | 否 | 截图格式: screen.FORMAT_BITMAP : android bitmap(默认) screen.FORMAT_ANDROID_IMAGE : android image,须主动调用close方法 screen.FORMAT_PIL_IMAGE : Python Pil Image screen.FORMAT_CV_MAT : Python OpenCv BGR MAT |
- 返回值
Bitmap 或 Pil-Image 或 OpencvMat Android图片对象
- 示例
# 截取屏幕截图,格式为Bitmap
from ascript.android import screen
bitmap = screen.capture()
print(bitmap)
# 截取指定范围屏幕,格式为Bitmap
from ascript.android import screen
bitmap = screen.capture( 122,358,808,979)
print(bitmap)
# 截取屏幕截图,返回值为Pil Image
from ascript.android import screen
pil_image = screen.capture(pixel_format=screen.FORMAT_PIL_IMAGE)
print(pil_image)
# 截取屏幕截图,返回值为Opencv mat
from ascript.android import screen
cv_mat = screen.capture(pixel_format=screen.FORMAT_CV_MAT)
print(cv_mat)
# 截取屏幕截图,返回值Android Image
from ascript.android import screen
android_image = screen.capture(pixel_format=screen.FORMAT_ANDROID_IMAGE)
print(android_image)
android_image.close() # 必须用完close,否则后续截图将报错!
图像某坐标色值
获取图像指定坐标的颜色值
- 函数
screen.get_color(x:int,y:int,bitmap = screen.capture())
参数 | 类型 | 是否必填 | 说明 |
---|---|---|---|
x | int | 是 | 坐标x |
y | int | 是 | 坐标y |
bitmap | int | 否 | 指定图像,默认:全屏截图 |
- 返回值
Color 颜色值对象,点击查看其内部属性值
- 示例
from ascript.android import screen
color = screen.get_color(200,200)
print(color.rgb) #16进制RGB颜色值
print(color.argb) #16进制ARGB颜色值 PS:A位透明值通道
print(color.r,color.g,color.b,color.a) # 获取R通道,G通道,B通道,A通道 10进制颜色值
图像所有色值
获取整张图像所有色值
- 函数
screen.get_colors(bitmap = screen.capture())
参数 | 类型 | 是否必填 | 说明 |
---|---|---|---|
bitmap | int | 否 | 指定图像,默认:全屏截图 |
- 返回值
int[] 10进制 颜色数组列表.可通过Color构造,获取RGB颜色值
- 示例
from ascript.android import screen
from ascript.android.screen import Color
colors = screen.get_colors()
print(f"共有:{len(colors)}个颜色点")
for i in range(len(colors)):
# 打印出屏幕第一个点的颜色值
if i == 0:
c = Color(colors[i])
print(c.rgb)
区域颜色点数量
在一个区域内找 指定颜色点的数量
- 函数
screen.get_color_num(colors:str,rect:list=None,sim:float=0.9)
- 参数
参数 | 类型 | 是否必填 | 说明 |
---|---|---|---|
colors | int | 否 | 颜色值:格式1: "#FFFFFF" 检索单一颜色值数量 格式2:"#FFFFFF|#000000" 多种颜色满足其一则算数 格式3:"#000000-#111111" 给定颜色值 在 两个颜色值之间则算数 |
rect | list | 否 | 屏幕范围 |
sim | float | 否 | 相似度 0~1之间,默认0.9:90%相似度 |
- 返回值
Bitmap Android图片对象
- 示例
# 获取屏幕中 #6989C5 和 #FF784B 颜色值数量
from ascript.android import screen
num = screen.get_color_num("#6989C5|#FF784B")
print(num)
# 获取屏幕指定范围内 #6989C5 和 #FF784B 颜色值数量
from ascript.android import screen
num = screen.get_color_num("#6989C5|#FF784B",rect =[413,358,709,578])
print(num)
# 获取屏幕指定范围内 #6989C5 和 #FF784B 相似度80% 的颜色点数量
from ascript.android import screen
num = screen.get_color_num("#6989C5|#FF784B",rect =[413,358,709,578],sim=0.8)
print(num)
横竖屏切换监听
当手机横竖屏变化后的监听
- 函数
screen.set_ori_change_listener(obj_listener):
- 参数
参数 | 类型 | 是否必填 | 说明 |
---|---|---|---|
obj_listener | fun | 是 | 一个回调函数,必须包含两个形参,来接收回传的width,height |
- 示例
# 当横竖屏变化时,会调用该函数,并回传windth,height
def on_ori_change(w,h):
print("横竖屏变化了")
if w > h:
print("横屏")
else:
print("竖屏")
# 设置监听函数
screen.set_ori_change_listener(on_ori_change)
图像转换
图像转文件
将 Android Bitmap 转存为文件
- 函数
screen.bitmap_to_file(path:str,bitmap=screen.capture(),quality=100)
- 参数
参数 | 类型 | 是否必填 | 说明 |
---|---|---|---|
path | str | 是 | 文件路径 |
bitmap | Bitmap | 否 | 图片 默认:全屏截图 |
quality | int | 否 | 图片清晰度,1-100之间 ,100为100%无损图片 默认:100 |
- 示例
# 将屏幕截图存储在SD卡下的1.png中
from ascript.android import screen
from ascript.android.system import R
screen.bitmap_to_file(R.sd("1.png"))
# 将屏幕截图存储在SD卡下的1.png中,清晰度设为80%
from ascript.android import screen
from ascript.android.system import R
screen.bitmap_to_file(R.sd("1.png"),quality=80)
文件转图片
将 文件 转存为Android Bitmap
- 函数
screen.file_to_bitmap(path:str,sampleSize:int=1)
- 参数
参数 | 类型 | 是否必填 | 说明 |
---|---|---|---|
path | str | 是 | 文件路径 |
sampleSize | int | 否 | 采样率,如参数为2:每隔2行,2列采集1行,结果为原图的1/4大小 默认1:无损 |
- 示例
# 将屏幕截图存储在SD卡下的1.png中
from ascript.android import screen
from ascript.android.system import R
bitmap = screen.file_to_bitmap(R.sd("2.png"))
print(bitmap)
图片转Base64数据
将 图片 转为 base64数据
- 函数
screen.bitmap_base64(bitmap=screen.capture())
- 参数
参数 | 类型 | 是否必填 | 说明 |
---|---|---|---|
bitmap | Bitmap | 否 | 图片 默认:将当前屏幕转为 base64数据 |
- 示例
# 将屏幕图像转换为base64
from ascript.android import screen
b64_str = screen.bitmap_base64()
print(b64_str)
# 将文件转换为base64
from ascript.android import screen
from ascript.android.system import R
bitmap = screen.file_to_bitmap(R.sd("22222.png"))
b64_str = screen.bitmap_base64(bitmap)
print(b64_str)
Base64数据转图片
将 base64数据 转为 图片
- 函数
screen.base64_bitmap(b64:str)
- 参数
参数 | 类型 | 是否必填 | 说明 |
---|---|---|---|
b64 | str | 否 | 图片 base64数据 |
- 示例
# 将屏幕图像转换为base64
from ascript.android import screen
bitmap = screen.base64_bitmap("b64:str......")
print(bitmap)
图片最大边缩放
将 图片 缩放, 最大边不超过设定值,短边等比缩放.
- 函数
screen.bitmap_maxside(bitmap=screen.capture(),max_side_len=9999)
- 参数
参数 | 类型 | 是否必填 | 说明 |
---|---|---|---|
bitmap | Bitmap | 否 | 要缩放的图片 默认:当前屏幕截图 |
max_side_len | int | 是 | 最大边长度 ,默认最大边长 9999 |
- 示例
# 将当前屏幕截图,最大边缩放到800
bitmap= screen.bitmap_maxside(screen.capture(),max_side_len=800)
print(bitmap.getWidth(),bitmap.getHeight())
Bitmap 转 Python Image
将 Android Bitmap 转换为 Python Image(PIL)
- 函数
screen.bitmap_to_pilimage(bitmap=capture())
- 参数
参数 | 类型 | 是否必填 | 说明 |
---|---|---|---|
bitmap | Bitmap | 否 | 要转换的Bitmap图像 默认:当前屏幕截图 |
- 返回值
Image Python PIL 图像
- 示例
# 将当前屏幕Bitmap 转换为 Python Image
from ascript.android import screen
img= screen.bitmap_to_pilimage()
print(img.width,img.height)
Bitmap 转 Opencv Image
将 Android Bitmap 转换为 Opencv Image
由于android图像是 ARGB通道 ,因此在转换后会丢失A通道,并且图像数据 为BGR三通道格式
- 函数
screen.bitmap_to_cvimage(bitmap=capture())
- 参数
参数 | 类型 | 是否必填 | 说明 |
---|---|---|---|
bitmap | Bitmap | 否 | 要转换的Bitmap图像 默认:当前屏幕截图 |
- 返回值
Numpy array Python Opencv Image
- 示例
# 将当前屏幕Bitmap 转换为 Openv Image = cv2.imread
import cv2
from ascript.android.ui import ImageWindow
from ascript.android import screen
image = screen.bitmap_to_cvimage()
# 展示图片
ImageWindow.show(image)
Opencv Image 转 Bitmap
将 Opencv Image 转换为 Android Bitmap
将BGR通道的CV图像 转换为 Bitmap(RGB)
- 函数
screen.cvimage_to_bitmap(image)
- 参数
参数 | 类型 | 是否必填 | 说明 |
---|---|---|---|
image | opencv image | 否 | 要转换的Opencv Image |
- 返回值
Bitmap Python PIL 图像
- 示例
# 将当前屏幕Bitmap 转换为 Openv Image = cv2.imread
from ascript.android import screen
img= screen.bitmap_to_cvimage()
print(img)
图像Bitmap
from android.graphics import Bitmap
在Android 中的内存图像对象
宽度与高度
获取图像宽度
- 示例
from ascript.android import screen
bitmap = screen.capture()
print(bitmap.getWidth(),bitmap.getHeight())
颜色
from ascript.android.screen import Color
创建一个颜色
创建一个颜色值,用于颜色值转换,和值的获取
- 函数
Color(color_argb:int)
- 参数
参数 | 类型 | 是否必填 | 说明 |
---|---|---|---|
color_argb | int | 是 | 图像所有色值 该方法返回结果中的Int值 (实际为ARGB的色值) |
- 示例
# __init__.py 为初始化加载文件
from ascript.android import screen
from ascript.android.screen import Color
colors = screen.get_colors()
# 获取第一个int颜色值
color_int = colors[0]
# 转换为 Color对象,方便对颜色值进行转换
color = Color(color_int)
print(color.rgb)
属性
属性 | 返回类型 | 说明 |
---|---|---|
r | int | R通道 10进制 颜色值 |
g | int | G通道 10进制 颜色值 |
b | int | B通道 10进制 颜色值 |
a | int | A通道(透明值) 10进制 颜色值 |
rgb | str | 16进制 RGB颜色值 |
argb | str | 16进制 ARGB颜色值 |
- 示例
from ascript.android import screen
from ascript.android.screen import Color
colors = screen.get_colors()
# 获取第一个int颜色值
color_int = colors[0]
# 转换为 Color对象,方便对颜色值进行转换
color = Color(color_int)
print(color.rgb) #16进制RGB颜色值
print(color.argb) #16进制ARGB颜色值 PS:A位透明值通道
print(color.r,color.g,color.b,color.a) # 获取R通道,G通道,B通道,A通道 10进制颜色值