近日,微信推出新功能“拍一拍”。这个风趣的功能一上线就炸了锅,冲上热搜。
当然,我们说的拍一拍,不是这个。
也不是这个拍一拍。
所谓“拍一拍”,是指在私聊或群聊的时候,双击对方头像,手机就会震动两下,同时,聊天框里就会提示“你拍了拍xxx”字样。虽然被拍的用户只能看到字样,手机不会震动,但聊天框却和收到消息一样,被显示到前排。
网友吐槽:这个功能真是鸡肋
很多网友抱怨,这个功能没起到提醒目的,却让人意识到自己时刻在线,增加了焦虑。还有网友吐槽,现在微信还有很多不完善的功能,推出这么个功能,没有实际用途,真是鸡肋。
这个新功能马上被玩得花样翻飞。一些网友将昵称改成马屁、钱包等,群里画风顿时诡谲异常。
有人说,这个功能终结了“在吗”的问候方式。但也会有尴尬的事情发生。比如,你在群里爬楼的时候,没忍住双击了领导的头像。
针对微信待开发的功能,很多媒体在微博上发起了投票活动。
支持者力挺:这是产品经理式的浪漫
有人反对,就必然有人赞同。有人将这个看似鸡肋功能看作“产品经理式”的浪漫情怀?这个功能有以下几个作用:
1. 缓解社交压力
拍一拍的存在,会缓解“在吗”引起的尴尬与不适;虽然,“拍一拍”和QQ的“抖一抖”、“戳一戳”类似,都属于向好友轻量级打招呼,但“拍一拍”很克制很微弱,并没有像“抖一抖”那样,将对话框突兀地到屏幕前,给对方造成干扰。
2. 熟人间互动游戏
实际上,“拍一拍”与其说是功能性的,不如说是娱乐性的。拍一拍这个动作,在现实生活中,只有熟人之间才会发生,通过这个小功能,能够增加熟人之间的互动感,而且对不同的人拍一拍,会得到不同回应。
3. 提高社群活跃度
微信产品经理张小龙这样评价“拍一拍”功能:
这个功能明显提升了微信活跃度,尤其是提高了微信群的活跃度。
大家都有很多微信群,但活跃的群不超过三分之一,有些群只是管理员每天发早报、广告,即便工作群,除了工作汇报,也很少热起来,根本没实现社群互动效果。“拍一拍”虽算不上酷炫,却为沉寂的社群提供了促活机会。
关于“拍一拍”的一行代码
很多人感兴趣实现“拍一拍”的这行代码长什么样,于是有大神贴出了下面这一行使用了 Lambda语法的C++代码:
head.onDoubleClick([&](e){ msgSender.send({.msgType= MSG_TYPE_SYSTEM_TEXT, .contentTemplate = fmt("%s拍了拍%s" , app.getCurrentUser(), e.target)}); });
这行代码,主要是在“拍了拍”前后传递你和好友的微信昵称参数,发送相应接口后,输出为一条小灰色条消息。但这程序里不包括双击抖动头像的效果,因为这个功能是之前版本中的。
另外,Python也能实现这个功能,步骤如下:
1. 用appium操控手机
安装appium后用Python打开微信,如下:
难点是desired_cap参数配置,下面介绍一下:
platformName:表示设备操作系统
deviceName:表示设备名称
apppackage:表示app程序包名
appActivity:表示app入口Activity名
手机连接电脑后,打开开发者模式,运行程序,手机里的微信就自动打开了。
2. 模拟双击头像
(1)原理介绍
微信“拍一拍”通过双击好友头像实现,如下图:
想双击头像,就要先获得头像在屏幕中的坐标。这里给大家介绍一个函数。
基于Python-opencv2的目标定位模块:Aircv使用其find_template函数,可以查找目标图像在原始图像中的坐标范围,用法如下:
imgsrc=原始图片路径
imgobj=待查找目标图片路径
若未找到,则match_result=None;若找到,则返回如下数据:
{'result':(570.0,2771.0),'rectangle':((30,1601),(30,3941),(1110,1601),(1110,3941)),'confidence':0.999999463558197}
其中:
result为匹配图片在原始图片上的中心坐标,即点击点;
rectangle为匹配图片在原始图像上四边形坐标;
confidence为匹配相似率
(2)如何在程序中自动获取好友头像坐标?
在appium中,头像在屏幕中像素为140×140。先保存好友头像,用PS将头像改为此像素。
在程序中创建1个while循环,在第一步基础上,手动进入好友聊天框(也可通过识别好友头像自动进入);
通过appium对手机屏幕截图,命名为src.png,将其和头像路径(obj.png)导入1中检测函数:
driver.save_screenshot('src.png')imgsrc='src.png'imgobj='obj.png'match_result=matchImg(imgsrc, imgobj)
若返回None,说明聊天窗口没检测到好友头像,继续循环;若检测到头像坐标,则解析返回的坐标数据,用for循环模拟双击坐标位置:
if match_result is not None:result = [match_result['rectangle'][0], match_result['rectangle'][3]] for i in range(2): driver.tap(result,100) print('拍成功')else: print('没找到头像')
以上就是实现“拍一拍”的过程,学会了吗?
如果学会了,就拍了拍你,送你四个字:
没学会,就赶紧学习去吧。
东软睿道数据结构系列课程,免费上线!
8堂课,近10小时课程,让你掌握数据结构重要考点。课堂中附源码及文档,便于反复学习。
请大家戳以下海报二维码收看。