Android二维码快速生成和扫描
来源:互联网 发布:四川大学网络教育平台 编辑:程序博客网 时间:2024/06/05 10:09
废话不说直接说流程吧‘
** * Project Name: * Author:wsf * Date: 2017/9/8 10:50 * Notes: */public class EncodingUtils { /** * 创建二维码 * * @param content content * @param widthPix widthPix * @param heightPix heightPix * @param logoBm logoBm * @return 二维码 */ public static Bitmap createQRCode(String content, int widthPix, int heightPix, Bitmap logoBm) { try { if (content == null || "".equals(content)) { return null; } Map<EncodeHintType, Object> hints = new HashMap<>(); hints.put(EncodeHintType.CHARACTER_SET, "utf-8"); hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H); // 图像数据转换,使用了矩阵转换 BitMatrix bitMatrix = new QRCodeWriter().encode(content, BarcodeFormat.QR_CODE, widthPix, heightPix, hints); int[] pixels = new int[widthPix * heightPix]; // 下面这里按照二维码的算法,逐个生成二维码的图片, // 两个for循环是图片横列扫描的结果 for (int y = 0; y < heightPix; y++) { for (int x = 0; x < widthPix; x++) { if (bitMatrix.get(x, y)) { pixels[y * widthPix + x] = 0xff000000; } else { pixels[y * widthPix + x] = 0xffffffff; } } } // 生成二维码图片的格式,使用ARGB_8888 Bitmap bitmap = Bitmap.createBitmap(widthPix, heightPix, Bitmap.Config.ARGB_8888); bitmap.setPixels(pixels, 0, widthPix, 0, 0, widthPix, heightPix); if (logoBm != null) { bitmap = addLogo(bitmap, logoBm); } return bitmap; } 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; }}
然后在代码中
private void initView() { bitmap = EncodingUtils.createQRCode("这里就是我要传入的生成二维码的string", 600, 600,BitmapFactory.decodeResource(getResources(), R.mipmap .icon_l_2)); code.setImageBitmap(bitmap);
需要用到的jar包已上传地址:点击打开链接
阅读全文
1 0
- Android二维码快速生成和扫描
- android端快速生成二维码和进行二维码扫描
- android二维码扫描和生成
- Android 二维码生成和扫描
- Android生成二维码和扫描二维码zxing
- Android Xzing生成二维码和扫描二维码
- Android 二维码扫描和生成二维码
- zxing快速使用之生成二维码和扫描二维码
- Android中生成和扫描二维码
- Android开发扫描和生成二维码功能
- android二维码的生成和扫描
- Android二维码的扫描和生成(ZXing)
- Android 二维码扫描和生成简单实现
- Android实现二维码的生成和扫描
- Android实现二维码的生成和扫描
- android上实现二维码生成和扫描
- android之生成二维码和扫描
- Android二维码扫描、生成
- 在UBUNTU 16.04中安装为知笔记deb包
- hadoop集群运行jps命令以后Datanode节点未启动的解决办法
- 比iPhone8更值得期待的iOS11究竟有什么魔力?
- 系统学习ARM之四 --GNU的伪指令集
- 人工智能都要进小学了,你还在等什么?
- Android二维码快速生成和扫描
- eclipse svn 创建分支与合并,出现的问题
- 【学习】spring4.3.10之bean
- 9月8日国盟CISA每日一题 以下哪一种攻击最有可能影响网络资源的可用性? A.中间人 B.拒绝服务DOS C.网络钓鱼 D.结构化查询语言SQL注入 论坛讨论地址:http://www.cncisa
- fiddler javascript
- js的this指针指向谁,以及相关的call、apply、bind方法
- 驱动移植过程中DMA内存相关接口替换
- Android控件之AlertDialog-单选、多选信息列表弹出框
- linux操作系统中oracle数据库的密码过期问题解决