二维码生成和解析

工作之余,练习练习二维码的生成,毕竟这几年二维码这么疯狂。闲话不多说了,来看看二维码的生成和解析过程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)告知 ,本人会尽快删除
原文地址:https://www.cnblogs.com/liuyun-10/p/6169938.html