Android生成二维码与识别二维码(ZXing)
来源:互联网 发布:为什么服务器用centos 编辑:程序博客网 时间:2024/05/18 21:43
前言:现在很多App都集成了扫一扫功能,最常用的微信、QQ等。那么今天我们就来看看怎么样在我们自己的App中集成二维码的扫描与生成功能。OK,废话不多说,我们就开始做吧。
首先看看我们需要的开源库
[github-Zxing官方库的地址 ]:(https://github.com/zxing/zxing)
下面给大家介绍一下,ZXing库里面主要的类以及这些类的作用:
CaptureActivity。这个是启动Activity 也就是扫描器。
CaptureActivityHandler 解码处理类,负责调用另外的线程进行解码。
DecodeThread 解码的线程。
com.google.zxing.client.android.camera 包,摄像头控制包。
ViewfinderView 自定义的View,就是我们看见的拍摄时中间的框框了。
二维码的生成
**
如果只需要生成二维码功能,那么只需导入下面一个jar包就行。(最新的到3.3了,需要最新可以到下面链接下载,也可以到官网下载)
Android studio在gradle文件里添加以下:
compile 'com.google.zxing:core:3.3.0'
不是Android studio的提供jar包:下载 core-3.2.1.jar
下载core-3.3.0.jar包 http://repo1.maven.org/maven2/com/google/zxing/core/3.3.0/core-3.3.0.jar
**
生成二维码图片的核心代码:
/** * 第一个参数是生成二维码的内容(可以是任意字符串,超链接等等),第二三个参数表示生成二维码的宽度和高度 * @param content * @param width * @param height * @return */private Bitmap generateBitmap(String content,int width, int height) { if (TextUtils.isEmpty(content)) return null;//这里是非空判断,更改为自己非空判断的或者删掉 QRCodeWriter qrCodeWriter = new QRCodeWriter(); Map<EncodeHintType, String> hints = new HashMap<>(); hints.put(EncodeHintType.CHARACTER_SET, "utf-8"); try { BitMatrix encode = qrCodeWriter.encode(content, BarcodeFormat.QR_CODE, width, height, hints); int[] pixels = new int[width * height]; for (int i = 0; i < height; i++) { for (int j = 0; j < width; j++) { if (encode.get(j, i)) { pixels[i * width + j] = 0x00000000; } else { pixels[i * width + j] = 0xffffffff; } } } return Bitmap.createBitmap(pixels, 0, width, width, height, Bitmap.Config.RGB_565); } catch (WriterException e) { e.printStackTrace(); } return null; } /** * 在二维码中间添加Logo图案 */ private static Bitmap addLogo(Bitmap src, Bitmap logo) { if (src == null) { return null; } if (logo == null) { return src; } //获取图片的宽高 int srcWidth = src.getWidth(); int srcHeight = src.getHeight(); int logoWidth = logo.getWidth(); int logoHeight = logo.getHeight(); if (srcWidth == 0 || srcHeight == 0) { return null; } if (logoWidth == 0 || logoHeight == 0) { return src; } //logo大小为二维码整体大小的1/5 float scaleFactor = srcWidth * 1.0f / 5 / logoWidth; Bitmap bitmap = Bitmap.createBitmap(srcWidth, srcHeight, Bitmap.Config.ARGB_8888); try { Canvas canvas = new Canvas(bitmap); canvas.drawBitmap(src, 0, 0, null); canvas.scale(scaleFactor, scaleFactor, srcWidth / 2, srcHeight / 2); canvas.drawBitmap(logo, (srcWidth - logoWidth) / 2, (srcHeight - logoHeight) / 2, null); canvas.save(Canvas.ALL_SAVE_FLAG); canvas.restore(); } catch (Exception e) { bitmap = null; e.getStackTrace(); } return bitmap; }
OK,至此,我们的二维码生成就说完了,就是这么简单。
二维码的识别
我们需要将GitHub上的开源项目zxing作为Library导入,在这个开源项目中有一个CaptureActivity,这个Activity专门用来扫描二维码,所以我们只需要在自己的项目中直接来启动这个Activity就可以了。不知道怎么导入的自行搜索,网上已经有很多教程了。不过现在gradle这么NB,那我们能不能直接导入依赖呢?请接下来继续看:
首先要知道Android使用Zxing常用的库有: core, android, android-core, android-integration,而我们实现识别需要的核心库是 core, android-core这两个;作为一个开源项目,库的开发者肯定已经放在了AS对应的仓库中了,那么接下来我们就只需要很简单的添加2个依赖就可以把该Demo所需的依赖库下载。
dependencies { compile 'com.google.zxing:core:3.3.0'; compile 'com.google.zxing:android-core:3.3.0';}
是不是很简单,不需要我们去下载然后导入后处理编译问题了(省了很多事)。
之后要调用扫描只需启动CaptureActivity就可以了: startActivity(new Intent(this, CaptureActivity.class));
谢谢大家观看!
为了向别人、向世界证明自己而努力拼搏,而一旦你真的取得了成绩,才会明白:人无须向别人证明什么,只要你能超越自己。
- Android生成二维码与识别二维码(ZXing)
- Android之zxing二维码生成与识别
- Android之zxing二维码生成与识别
- Android之zxing二维码生成与识别
- Android之zxing二维码生成与识别
- ZXing 二维码生成与识别
- 基于ZXing的二维码生成与识别
- Zxing 二维码的生成与识别
- Android之zxing二维码生成于识别
- Android之zxing二维码生成于识别
- Android利用 Zxing 生成/识别二维码
- 使用ZXing.Net生成与识别二维码(QR Code)
- 二维码生成、扫描、图片识别(Zxing)
- 二维码识别(Zxing)
- Android zxing生成二维码
- Android二维码识别与生成
- android二维码生成与识别
- Android-扫描二维码、生成二维码(Zxing库)
- spark HA 模式搭建 (详细配置)《转载》
- maven web 项目部署到tomcat 下面无web.xml文件
- 07.25.17 2017年多校联合训练第1场
- Codevs1380没有上司的舞会_KEY
- hdu1714RedField 椭圆扇形面积公式
- Android生成二维码与识别二维码(ZXing)
- 工作第四周了,比急忙,好久没总结啦
- 风险预警·如何预防开发问题流到生产
- 《邓小平时代》读后
- 保持Android Service在手机休眠后继续运行
- es6 模块化语法(十七)
- 写高质量OC代码52建议总结:45.使用dispatch_once来执行只需要运行一次的线程安全代码
- java程序导出jar包运行
- 百练_2869:计算费马数