首页 > 其他 > 详细

二维码生成与读取

时间:2014-03-06 20:13:18      阅读:554      评论:0      收藏:0      [点我收藏+]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
生成QR图    <br>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();
        }
    }

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
解析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();
    }
}

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
/**
     * 用字符串生成二维码
     * @param str
     * @author zhouzhe@lenovo-cw.com
         * zxing是google的一个开源二维码项目,目前基本上和二维码打交道的东西,都会用到它. 最近项
         *  目中用到了android手机需要根据提供的字符串生成二维码图片,之前用zxing做过二维码解码,
         * 编码还没做过,看了一些demo都是用到了zxing的j2se包的内容,这个在android或者其他平台
         * 上显然无法实现,所以我们要利用zxing生成二维矩阵,然后根据android平台的提供的api来
         * 生成图片.
         * 这一切,需要zxing的core包,在zxing 1.6下测试通过.
     * @return
     * @throws WriterException
     */
    public Bitmap Create2DCode(String str) throws WriterException {
        //生成二维矩阵,编码时指定大小,不要生成了图片以后再进行缩放,这样会模糊导致识别失败
        BitMatrix matrix = new MultiFormatWriter().encode(str,BarcodeFormat.QR_CODE, 300, 300);
        int width = matrix.getWidth();
        int height = matrix.getHeight();
        //二维矩阵转为一维像素数组,也就是一直横着排了
        int[] pixels = new int[width * height];
        for (int y = 0; y < height; y++) {
            for (int x = 0; x < width; x++) {
                if(matrix.get(x, y)){
                    pixels[y * width + x] = 0xff000000;
                }
                 
            }
        }
         
        Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
        //通过像素数组生成bitmap,具体参考api
        bitmap.setPixels(pixels, 0, width, 0, 0, width, height);
        return bitmap;
    }   

二维码生成与读取,布布扣,bubuko.com

二维码生成与读取

原文:http://www.cnblogs.com/xiaosw/p/3584232.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!