• 二维码生成和解析


    工作之余,练习练习二维码的生成,毕竟这几年二维码这么疯狂。闲话不多说了,来看看二维码的生成和解析过程Java:

    首先呢,引入两个jar包:QrCode.jar和qrcode_swtake.jar(网上都有,大家可以搜一下就知道了)

    下面看代码就行了(类名就叫CreateQRCode):

    /**
         * 用来测试
         * @param args
         */
        public static void main(String[] args) {

            String data = "我爱我想爱的人";
            
            /**
             * 生成二维码
             */
            CreateQRCode.encode(data, "E:/wang/erwei.jpg");
        }

    /**
         * 生成二维码
         * @param data
         * @param string
         * @return
         */
        private static boolean encode(String data, String path) {
            int MAX_DATA_LENGTH = 200;
            byte []d = data.getBytes();
            int dataLength = d.length;
            int imageWidth = 113;
            int imageHeight = imageWidth;
            
            BufferedImage bi = new BufferedImage(imageWidth, imageHeight, BufferedImage.TYPE_INT_RGB);
            Graphics2D g = bi.createGraphics();
            g.setBackground(Color.WHITE);
            g.clearRect(0, 0, imageWidth, imageHeight);
            g.setColor(Color.BLACK);
            if(dataLength > 0 && dataLength <= MAX_DATA_LENGTH){
                Qrcode qr = new Qrcode();
                qr.setQrcodeErrorCorrect('M');
                qr.setQrcodeEncodeMode('B');
                qr.setQrcodeVersion(5);
                
                boolean [][]b = qr.calQrcode(d);
                int qrDataLen = b.length;
                
                for(int i = 0; i < qrDataLen; i++){
                    for(int j = 0; j < qrDataLen; j++){
                        if(b[j][i]){
                            g.fillRect(j*3+2, i*3+2, 3, 3);
                        }
                    }
                }
                System.out.println("二维码生成!");
            }else{
                System.out.println(dataLength + "大于" + MAX_DATA_LENGTH);
                return false;
            }
            g.dispose();
            bi.flush();
            File f = new File(path);
            String suffix = f.getName().substring(f.getName().indexOf(".")+1,f.getName().length());
            System.out.println("二维码输出成功!");
            try{
                ImageIO.write(bi, suffix, f);
            }catch(IOException e){
                System.out.println("二维码生成失败"+e.getMessage());
                return false;
            }
            
            return true;
        }

    上面就已经成功生成一个带有信息的二维码了!

    下面来解析二维码:

    main函数中换成CreateQRCode.decode("E:/wang/erwei.jpg");

    private static String decode(String path) {

            System.out.println("开始解析二维码!");
            /*读取二维码图像数据*
             *
             */
            File imageFile = new File(path);
            BufferedImage image = null;
            try{
                image = ImageIO.read(imageFile);
                
            }catch(IOException e){
                System.out.print("读取失败!"+e.getMessage());
                return null;
            }
            /*
             * 解二维码
             */
            QRCodeDecoder decoder = new QRCodeDecoder();
            String decodeData = new String(decoder.decode(new J2SEImageGucas(image)));
            System.out.println("解析内容如下:"+decodeData);
            return decodeData;
        }

    其中需要说明的是J2SEImageGucas类需要你自己建:

    public class J2SEImageGucas implements QRCodeImage{

        BufferedImage image;
        
        public J2SEImageGucas(BufferedImage image){
            this.image = image;
        }
        @Override
        public int getHeight() {
            return image.getHeight();
        }

        @Override
        public int getPixel(int x, int y) {
            return image.getRGB(x, y);
        }

        @Override
        public int getWidth() {
            return image.getWidth();
        }
    }
    这样二维码的生成和解析就已经搞定了,是不是很简单!so easy!

    作者:战旗 内容声明: 本内容属自己学习使用 ,若有抄袭情邮件(zhanqi3712@qq.com)告知 ,本人会尽快删除
  • 相关阅读:
    创建的第二个随笔
    Jq基础简介
    从VG中去除PV unknown device
    redhat using publicyum
    Oracle 11g 安装文件说明
    WP8教程: 第一个WP8应用(一)
    WP8教程: 第一个WP8应用(二)
    sqlplus 的登录方式
    redhat7 安装oracle11g 缺少pdksh包
    jquery实现一个substr截取字符串的小效果
  • 原文地址:https://www.cnblogs.com/liuyun-10/p/6169938.html
Copyright © 2020-2023  润新知