参考网上文章,做如下实践。

implementation('com.journeyapps:zxing-android-embedded:3.6.0') { transitive = false }
implementation 'com.google.zxing:core:3.3.0'

第一步:获取根据场景获取bitmap

1、通过url获取bitmap:

private void urlToBitmap(final String pic) {new Thread() {@Overridepublic void run() {try {URL url = new URL(pic);HttpURLConnection conn = (HttpURLConnection) url.openConnection();conn.setConnectTimeout(5000);conn.setRequestMethod("GET");if (conn.getResponseCode() == 200) {InputStream inputStream = conn.getInputStream();Bitmap bitmap = BitmapFactory.decodeStream(inputStream);//decodeImage(bitmap);}} catch (Exception e) {e.printStackTrace();}}}.start();
}

2、通过base64获取bitmap:

public static Bitmap base64ToBitmap(String base64Data) {byte[] bytes = Base64.decode(base64Data, Base64.DEFAULT);return BitmapFactory.decodeByteArray(bytes, 0, bytes.length);
}

第二步:解析Bitmap,获取二维码对应的url。

public static Result handleQRCodeFormBitmap(Bitmap bitmap) {Result result = null;if (bitmap != null) {// getSmallerBitmap 非常重要,图片太大会OOM,太小会找不到bitmap = BitmapUtil.getSmallerBitmap(bitmap);// 获取bitmap的宽高,像素矩阵int width = bitmap.getWidth();int height = bitmap.getHeight();int[] pixels = new int[width * height];bitmap.getPixels(pixels, 0, width, 0, 0, width, height);// 最新的库中,RGBLuminanceSource 的构造器参数不只是bitmap了RGBLuminanceSource source = new RGBLuminanceSource(width, height, pixels);BinaryBitmap binaryBitmap = new BinaryBitmap(new HybridBinarizer(source));Reader reader = new MultiFormatReader();// 尝试解析此bitmap,!!注意!! 这个部分一定写到外层的try之中,因为只有在bitmap获取到之后才能解析。写外部可能会有异步的问题。(开始解析时bitmap为空)try {Map<DecodeHintType, Object> hints = new HashMap<>();hints.put(DecodeHintType.TRY_HARDER, Boolean.TRUE);//花更多的时间用于寻找图上的编码,优化准确性,但不优化速度,Boolean类型
//加了hints解决了部分二维码解析出纯数字非url的问题result = reader.decode(binaryBitmap, hints);} catch (NotFoundException e) {e.printStackTrace();} catch (ChecksumException e) {e.printStackTrace();} catch (FormatException e) {e.printStackTrace();}}return result;
}
    //传入一个 bitmap,判断其大小是否 是 某一个 阙值(我在这里设置了1500000)的倍数。如果是其倍数,那么就等比缩小(也即是当 目前的bitmap大小为1500000的4倍的时候,那么宽,高各缩小2倍)
// 注意:阈值不能过小,图片压缩过小会导致识别不到二维码。public static Bitmap getSmallerBitmap(Bitmap bitmap) {int size = bitmap.getWidth() * bitmap.getHeight() / 1500000;//目前设计上最大的尺寸1000*1500,可根据自身产品情况做调整。if (size <= 1) return bitmap; // 如果小于else {Matrix matrix = new Matrix();matrix.postScale((float) (1 / Math.sqrt(size)), (float) (1 / Math.sqrt(size)));Bitmap resizeBitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true);return resizeBitmap;}}

第三步:result不为null,那么操作栏增加“识别图中二维码”的选项;用户点击该选项后,执行webview的访问操作:url=result.getText();

    /*** 判断是否为二维码* param url 图片地址* return*/private void decodeImage(final Bitmap bitmap) {new Thread() {@Overridepublic void run() {result = handleQRCodeFormBitmap(bitmap);Logger.d("result:" + result);if (result == null) {isQR = false;} else {isQR = true;Logger.d("result text:" + result.getText());}if (isQR) {handler.sendEmptyMessage(0);//通知用户操作ui修改}}}.start();}

Zxing识别图中二维码实践相关推荐

  1. 仿商城商品生成分享海报图片和识别图中二维码并跳转商品详情页

    购物商城里面的商品分享给朋友的时候会生成一张海报图片,图片上附带这二维码图片,朋友拿到这张图片扫描上面的二维码就可以进入商品详情页查看此商品了.今天来做一下这种功能,先生成商品海报图片,然后长按这张图 ...

  2. 点击复制以及长按识别图中二维码功能

    功能介绍:1.点击复制按钮,复制指定内容:2.借助微信浏览器识别图中二维码.效果如图: 功能介绍 点击复制功能 前提:引入clipboard.js html <div class="g ...

  3. Vue实现长按图片识别图中二维码

    Vue实现长按图片识别图中二维码 思路:要想实现可以识别图片中的二维码,那必定是要将这张图进行上传操作,上传则需要file对象格式.不管是在H5还是APP中,展示的图片都是通过url的方式展示在img ...

  4. 小程序: 长按识别图中二维码

    在小程序项目中,有时候我们需要按住二维码,弹出: 识别图中二维码的功能 1. API 小程序文档 - API - 媒体 - 图片 - perviewImage( ) :  在新页面中全屏预览图片.预览 ...

  5. cocoscreator实现微信内置浏览器点击图片识别图中二维码

    最近在做一个微信内置浏览器的小游戏,小游戏中有一个二维码,需要用户点击长按二维码弹出系统识别二维码按钮. 下面是解决步骤: 1.cocoscreator是如何实现在浏览器中渲染游戏画面的 看图中箭头处 ...

  6. 微信小程序长按图片,实现保存、转发、识别图中二维码

    在小程序image组件中二维码/小程序码图片不支持长按识别,仅在 wx.previewImage 中支持长按识别 但是通过wx.previewImage只能实现保存,转发,小程序 只能识别 小程序二维 ...

  7. 小程序中图片点击预览、长按识别图中二维码的问题

    通过自己的测试以及各类博客资料的查询,总结如下: 1.小程序中的图片不能识别除小程序码以外的二维码 2.并且仅在 wx.previewImage 中支持长按识别 官方文档(wx.previewImag ...

  8. Android 长按识别图中二维码

    基于 Zing, 初学android  代码质量可能不高 bigImage.setOnLongClickListener(new View.OnLongClickListener() {@Overri ...

  9. Android实现二维码扫描功能-ZXing识别图片二维码,相册选图

    文章目录 1.演示 2.权限问题 3.实现步骤 4.工具类 5.图片Uri处理(重要更新) 1.演示 2.权限问题 部分朋友在打开相册时遇到读写权限未授权的问题,我在开发的时候没有遇到,也没有注册读写 ...

最新文章

  1. C++之多态性与虚函数
  2. 总结Linux-ubuntu基本配置方法(远程连接,数据库,jdk,tomcat......)
  3. 天才王垠惊人言论炸翻网友:相对论是假说,爱因斯坦是民科!
  4. h5页面不可 移动_H5营销|为什么H5适合于微信营销
  5. SQL Server 加密层级
  6. 又一数据库高危漏洞爆出,数据安全如何有效保障?
  7. 牛客网-这是一个沙雕题
  8. Git实现从本地添加项目到远程仓库
  9. android通话流程浅析RIL层
  10. Selenium自动化框架:数据驱动、关键字驱动和混合
  11. web项目 压力测试
  12. ad采样的符号位_AD采样后数据如何在FPGA中转化为有符号数
  13. pip 命令报错 Fatal error in launcher: Unable to create process using ... ???? ???????
  14. PLC 200 Smart模拟量输入输出编程应用
  15. pve开启嵌套虚拟化,pve下kvm类型CPU的群晖VMM虚拟机创建
  16. Docker可视化工具Portainer安装
  17. c++实现两有序链表合并成一个新的有序链表
  18. 大数据毕设 - 网络游戏数据分析与可视化(python 大数据)
  19. Java学习笔记01—Java概述、数据类型、变量、标识符、类型转换
  20. 每个软件工程师都应该知道的有关实时数据的统一概念

热门文章

  1. 快来get微信清理的正确方法
  2. 第七章 上机练习1 2
  3. C++各大有名库的介绍(转)
  4. C++数组求和用自带的库超级方便
  5. 银行家算法(操作系统)
  6. JavaSE第七天(面向对象:权限和继承)
  7. 商业模式的关键点有哪些,推荐商业模式的6个要素
  8. 稻盛和夫《活法》之六项精进
  9. 数据结构之——《队列》
  10. 全局变量被未知原因改变的解决方法