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();
            }
        }
  • 相关阅读:
    记录移动端原生开发基础样式
    windows关闭打开应用的时候的安全弹窗
    thinkPad触控板手势安装
    git修改账号密码
    ssh免密登录失效处理
    xxl-rpc remoting error(Connection refused (Connection refused)), for url : http://xxxxxx:19997/run
    utools好用插件分享
    Android Studio打包apk闪退处理
    maven下载jar包失败处理
    微信文件下载位置
  • 原文地址:https://www.cnblogs.com/lee0oo0/p/2826070.html
Copyright © 2011-2022 走看看