Dragon
  非凡社群营销服务平台专注于社群管理,社群裂变,多群同步直播,企业微信SCRM系统。欢迎合作咨询;客服微信11112751

我们提供【社群管理裂变】【自动建群】【多群转播】【活码系统】【小程序开发】【公众号开发】【各类商城 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%+。

如何利用 Python 制作简单的公众号二维码关注图

创意配图:微信,微信公众号,微信大 V 而且最近发现了一个新的图像处理方面的库—Wand,它是 ImageMagick 库的 Python 接口。于是,我就打算用这个库来实现简单的制作一个二维码关注图,主要是完成以下几个工作: …

「点点赞赏,手留余香」

还没有人赞赏,快来当第一个赞赏的人吧!

非凡建群宝给非凡建群宝打赏
×
予人玫瑰,手有余香
  • 2
  • 5
  • 10
  • 20
  • 50
2
支付

本文来自投稿,不代表微信机器人立场,版权归原作者所有,欢迎分享本文,转载请保留出处!

2021-03-12

2021-03-12

×
Tips:非凡社群营销服务平台专注于社群管理,社群裂变,多群同步直播,企业微信SCRM系统。欢迎合作咨询;客服微信11112751