Sikulix选取相对位置的图片或对象

转载:https://www.cnblogs.com/goldenRazor/p/4884499.html

Sikulix选取相对位置的图片或对象

一般来说有这样的需求,我已经有了一个图片元素,在这个元素的周围会有一个动态显示的对象,我要去做一个点击或者是hover又或者是单纯把这个对象图片save到本地,留做下个页面点击的对象,在这种情况下就可以用到sikuli来解决。

这里我还是依照baidu首页做个例子,可能不是很典型,但是做例子是没问题的。

我先点击换肤按钮,然后在已知换肤图片的情况下,点取其他方位的图片,并save到本地留住成为下次脚本点击的对象。

1. 首先建立一个region对象,这个region是一个方形区域,我先默认成分辨率大小

Region r = new Region(0,0,1023,767);

2. 点击皮肤按钮

r.click("img/ChangeSK.png");

3. 这个我有一个皮肤的图片是在所有皮肤图片的中央

r.exists("img/SK1.png");

运行下,结果还是没问题的:

[debug] Region: exists: img/SK1.png has appeared

4. 把这个图片找到并作为一个Match对象,highlight并打印相似度,同时打印出width和height

Match SK1 = r.find("img/SK1.png");
System.out.println(baidu.getScore());
SK1.highlight();
System.out.println(SK1.h); 
System.out.println(SK1.w);

结果0.9999843239784241, 说明已经找到

5. 新建一个Location对象,来存放此对象在region中的坐标

Location Loc1 = SK1.getTarget();

注意描述一个图片就有四维,start x,start y,width,height.  这里的location是指的x+height/2, y+width/2, 也就是中心位置

这里我们需要一个工具来获取屏幕上的坐标,这样在手动测试的时候就能精准获取图片的相对位置,网上这样的工具很多,搜下就有了

6. 获取到Location之后,我就需要知道在这个SK1对象的上方的一个同样大小的图片,这里如何做呢:

Location Loc2 = Loc1.above(60);

通过工具得知上方图片的位置大概要高出60pix,所以新建一个location对象

7.因为我们已经知道上方图片的width和height,所以现在就需要新建一个Match对象就行了

Match SK2 = new Match(SK1);
SK2.setLocation(Loc2);//这样的做法是错误的,因为这里setLocation不是中心轴了,而是set成起始坐标了,应该这样:

SK2.y = SK2.y-60;

8,打印下相似度看是否找到

SK2.highlight();
System.out.println(SK2.getScore());

得分是1,没问题

9,把这个图片save到本地路径下

SK2.saveScreenCapture("img", "SK2");

SK2-1444961093063.png 保存名后面的应该是timestream,应该是避免覆盖,改下sikuli jar包里的源代码重新编译下就可以了。

在Android平台上,实现拍照或从相册选取图片上传多张可以通过以下步骤实现。首先,需要在AndroidManifest.xml文件添加相机和存储权限。接着,在相应的Activity,我们可以使用Intent来启动系统相机应用,或者打开系统相册应用。 如果是拍照上传,我们可以创建一个Intent对象,指定Action为MediaStore.ACTION_IMAGE_CAPTURE,然后使用startActivityForResult方法启动相机应用。拍摄完成后,系统会将照片保存在指定的URI路径上。 如果是从相册选取图片上传,我们同样可以创建一个Intent对象,指定Action为Intent.ACTION_PICK,Type为“image/*”,然后使用startActivityForResult方法启动相册应用。 接着,在onActivityResult方法,我们可以根据requestCode和resultCode来判断是从相机还是相册返回的数据。如果是从相机返回的数据,我们可以通过指定的URI路径来获取拍摄的照片;如果是从相册返回的数据,我们可以通过data.getData()方法来获取选取图片。 最后,我们可以将获取到的照片进行上传操作,可以是将图片转换成Bitmap对象,然后上传至服务器;或者将图片的URI路径传递给服务器进行上传。如果有多张图片需要上传,可以采用循环的方式依次处理每张图片。 总的来说,实现拍照或从相册选取图片上传多张,需要通过Intent调用系统应用获取图片,然后在onActivityResult方法处理返回的数据,最后进行图片的上传操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值