zoukankan      html  css  js  c++  java
  • Android之二维码的生成与解析

    直接上代码,代码上面有具体的解析,并且提供jar供下载:二维码Jar包.rar

    根据文本生成对应的二维码:

    // 生成QR图
        private void createImage() {
            try {
                // 需要引入core包
                QRCodeWriter writer = new QRCodeWriter();
    
                String text = qr_text.getText().toString();
    
                Log.i(TAG, "生成的文本:" + text);
                if (text == null || "".equals(text) || text.length() < 1) {
                    return;
                }
    
                // 把输入的文本转为二维码
                BitMatrix martix = writer.encode(text, BarcodeFormat.QR_CODE,
                        QR_WIDTH, QR_HEIGHT);
    
                System.out.println("w:" + martix.getWidth() + "h:"
                        + martix.getHeight());
    
                Hashtable<EncodeHintType, String> hints = new Hashtable<EncodeHintType, String>();
                hints.put(EncodeHintType.CHARACTER_SET, "utf-8");
                BitMatrix bitMatrix = new QRCodeWriter().encode(text,
                        BarcodeFormat.QR_CODE, QR_WIDTH, QR_HEIGHT, hints);
                int[] pixels = new int[QR_WIDTH * QR_HEIGHT];
                for (int y = 0; y < QR_HEIGHT; y++) {
                    for (int x = 0; x < QR_WIDTH; x++) {
                        if (bitMatrix.get(x, y)) {
                            pixels[y * QR_WIDTH + x] = 0xff000000;
                        } else {
                            pixels[y * QR_WIDTH + x] = 0xffffffff;
                        }
    
                    }
                }
    
                Bitmap bitmap = Bitmap.createBitmap(QR_WIDTH, QR_HEIGHT,
                        Bitmap.Config.ARGB_8888);
    
                bitmap.setPixels(pixels, 0, QR_WIDTH, 0, 0, QR_WIDTH, QR_HEIGHT);
                qr_image.setImageBitmap(bitmap);
    
            } catch (WriterException e) {
                e.printStackTrace();
            }
        }


    根据二维码图片读取内容:

    // 解析QR图片
        private void scanningImage() {
    
            Map<DecodeHintType, String> hints = new HashMap<DecodeHintType, String>();
            hints.put(DecodeHintType.CHARACTER_SET, "utf-8");
    
            // 获得待解析的图片
            Bitmap bitmap = ((BitmapDrawable) qr_image.getDrawable()).getBitmap();
            RGBLuminanceSource source = new RGBLuminanceSource(bitmap);
            BinaryBitmap bitmap1 = new BinaryBitmap(new HybridBinarizer(source));
            QRCodeReader reader = new QRCodeReader();
            Result result;
            try {
                result = reader.decode(bitmap1, hints);
                // 得到解析后的文字
                qr_result.setText(result.getText());
            } catch (NotFoundException e) {
                e.printStackTrace();
            } catch (ChecksumException e) {
                e.printStackTrace();
            } catch (FormatException e) {
                e.printStackTrace();
            }
        }
  • 相关阅读:
    Linux学习32
    Linux学习31-如何查看 linux 系统是centos还是ubuntu,并查看系统版本号
    python测试开发django-124.bootstrap点删除按钮弹确认删除
    python测试开发django-123.bootstrap模态框(modal)垂直居中显示
    python测试开发django-122.bootstrap模态框(modal)学习
    Linux下查询tomcat进程命令
    linux服务器通过X11实现图形化界面显示 1 背景描述
    linux(centos)配置ipv6网卡
    linux 下给网卡添加ipv6、路由
    2021年最新大厂php+go面试题集(1)
  • 原文地址:https://www.cnblogs.com/lee0oo0/p/2826070.html
Copyright © 2011-2022 走看看