建群宝收费吗_二维码转换链接_二维码扫描优化_二维码小鹿活码生成器_微信二维码

非凡管家旗下:微信机器人,微信助手,社群营销,营销大师,企业微信大管家,小鹿活码,非凡建群宝,非凡群直播,非凡一折购商城,SAAS非凡营销商城等微信社群营销服务平台,为你的微信营销私欲流量保驾护航。非凡微信社群营销服务平台www.haqsl.com

我们提供【社群管理裂变】【自动建群】【多群转播】【活码系统】【小程序开发】【公众号开发】【各类商城SAAS】一站式服务,各类功能提供免费体验,满意付款,如您还有其他疑问请您添加企鹅/微信1003312430方便咨询哦。
非凡社群助手——微信活码系统演示(客户活码二维码累计扫描量一千万+)
活码系统介绍:
二维码图案不变,内容可随时变更, 极大提高营销效果,基于活码技术,二维码图案更简单,扫码更加容易宣传海报、二维码印刷、商品.群.软文。
让二维码图案更简单,扫码更加容易宣传。

,

特殊微信社群营销服务平台www.haqsl.com我们提供【社群治理裂变】【自动建群】【多群转播】【活码系统】【小程序开发】【民众号开发】【种种商城SAAS】一站式服务,种种功效提供免费体验,知足付款,如您尚有其他疑问请您添加企鹅/微信1003312430利便咨询哦。
特殊社群助手——微信活码系统演示(客户活码二维码累计扫描量一万万+)
活码系统先容:
二维码图案稳固,内容可随时调换, 极大提高营销效果,基于活码手艺,二维码图案更简朴,扫码加倍容易宣传海报、二维码印刷、商品.群.软文。
让二维码图案更简朴,扫码加倍容易宣传。,

前言

zxing是一款跨平台的基于Java实现的处置一维或二维条码的库。支持多种名堂,一维条码支持UPC-A,UPC-E,EAN-8,Code 39,Code 93等名堂,二维条码支持QR Code,Data Matrix,PDF 417,MaxiCode等名堂。

上述的二维条码指的是较宽泛的二维条码,而不是QR Code示意的二维码。

原本Lark直接集成了zxing实现扫一扫功效。由于Lark的特殊营业需求,因此并不需要支持到这么多名堂,只需要支持QR Code,因此我们对zxing内部举行定制,使得zxing只支持QR Code。这样既可以削减zxing库的巨细,也可以加速zxing处置一帧数据的速率。

优化主要包罗两方面:(1)扫描性能(2)交互体验。

扫描性能优化包罗:

  • 去除zxing格外支持的名堂。
  • 删除zxing冗余代码。
  • 将处置相机帧从串行改为并行。

交互体验优化包罗:

  • 自动放大。
  • 双击放大。
  • 重力传感器聚焦。
  • 手势调整焦距。

1. 去除zxing格外支持的名堂

MultiFormatReader的decodeWithState()是使用方的入口方式,内部挪用了decodeInternal(),输入是相机的一帧数据,若是抛了NotFoundException,则示意没找到二维码;若是返回了Result,则示意找到了二维码,并剖析完成。代码如下:


其中,readers变量是一个数组,数组的巨细示意支持的条码名堂个数,zxing原本由于支持许多名堂,因此这个数组长度对照长。当拿到相机的一帧数据后,需要去检测是否是所有支持名堂的某一个名堂,每一种名堂的检测都需要破费一些时间,因此这个遍历对于Lark是不需要的。若是将zxing内部定制成只支持QR Code名堂,那么就免去了格外的名堂检测。

2. 删除zxing冗余代码

我们主要从几方面删除冗余代码:

  • 删除zxing除了二维码之外的名堂的相关代码,zxing对每种名堂的相关代码都放在各自的目录中,因此我们只需要把这些名堂对应的目录删除即可,好比aztec、maxicode等。
  • 删除二维码的encode相关代码,即”qrcode/encoder”目录。
  • 删除decode后文本的剖析相关类(好比地址、通讯录、邮件等剖析类),只保留URI、URL、Text。

通过以上方式,zxing文件数目从263个缩减到67个,库巨细从1.8M缩减到451K,效果异常显著。

3. 将处置相机帧从串行改为并行

原本Lark扫一扫的逻辑是串行的,如下图:


每次从onPreviewFrame()中获取一帧数据,然后挪用zxing的decode剖析二维码,若是乐成,则返回;若是失败,则挪用setOneShotPreviewCallback()重新挪用一次onPreviewFrame()。

瑕玷是若是处置一帧数据时间很长,会阻碍下一帧的处置,好比上一帧是没有二维码的,而下一帧是有二维码的,若是上一帧处置时间较长,那么虽然用户瞄准了二维码,然则现实处置的照样上一帧,因此不太合理。

我们将串行处置改成并行处置,一旦从onPreviewFrame()获取一帧数据,将decode义务丢进线程池,并马上挪用setOneShotPreviewCallback()获取下一帧数据。一旦某个义务检测到二维码,马上将isSuccess变量置为true,忽略其他义务。这样能够大大加速二维码检测的速率。

4. 自动放大

当二维码很小很远时,自动放大能大大加速检测二维码的速率。

QRCodeReader的decode()是二维码检测的主方式,分为两步:(1)大致判断是否存在二维码;(2)解码。


第一步只是检测是否存在二维码,好比去寻找是否存在Position Detection Pattern,Timing Pattern,Alignment Pattern。若是检测到了,则返回DetectorResult,内部包罗了定位点的位置信息;若是没检测到,则抛出NotFoundException。若是二维码很小,纵然第一步检测存在二维码,然则第二步解码也可能会失败。由于我们在第一步已经能够知道二维码的巨细,因此凭证DetectorResult返回的二维码定位点信息盘算出二维码的大致宽度,然后判断二维码巨细在扫码框中是否足够小,若是足够小,则放大一定焦距:若是小于十分之一,则放大到最大焦距;若是小于即是六分之一,则放大到最大焦距的一半。

详细二维码的原理参见: 。

我们实现了zoomCamera(),若是判断需要放大,则返回true,若是不需要放大,则返回false。代码如下:


我们在第一步和第二步中央插入该方式,若是需要放大,则不执行第二步;若是二维码已经足够大,则执行第二步。代码如下:


5. 双击放大

原本Lark的二维码扫描中没有调整焦距的功效,这个对于一些特定场景下会不太利便,因此这里加入了双击放大的功效能够对焦距举行简略的调整。行使GestureDetector的onDoubleTap()回调捕捉用户双击事宜,并在CameraPreview中的onTouchEvent()中添加mGestureDetector.onTouchEvent()。实现如下:


6. 重力传感器聚焦

重力传感器能够捕捉用户手机的运动状态,当检测到用户手机住手时,触发对焦逻辑。我们通过实现SensorEventListener接口,并重写onSensorChanged()监听手机的运动状态。

7. 手势调整焦距

为了更精致化的让用户调整焦距,我们提供了手势来缩放焦距。通过在onTouchEvent()中获取用户两个手指的距离是越来越近照样越来越远来调整焦距。代码如下:


优化效果

经由上述优化,不仅增添了用户体验,而且还大幅增添了二维码扫描速率。 测试手机:坚果Pro,4G内存,Android 7.1.1。


上图示意了从打开相机到二维码解码乐成的耗时,可以看出,整体时间提升了300%+。


上图示意检测失败时的耗时指的是当相机帧中没有二维码时检测的时间,检测失败耗时的削减有助于更快地处置相机帧数据,当包罗二维码的帧泛起时更快地处置它;上图中看出,耗时削减300%+。


上图示意检测乐成时的耗时指的是当相机帧中有二维码时检测+解码的时间;上图中看出,耗时削减150%+。

相关文章

联系我们

联系我们

17638350532

在线咨询: QQ交谈

邮箱: 1003312430@qq.com

工作时间:周一至周日,8:00-19:00,节假日休息
关注微信
微信扫一扫关注我们

微信扫一扫关注我们

关注微博
返回顶部