zoukankan      html  css  js  c++  java
  • Java使用QRCode.jar生成与解析二维码

    原文V:http://www.cnblogs.com/bigroc/p/7496995.html#3797682

    正题:Java使用QRCode.jar生成与解析二维码demo

    欢迎新手共勉,大神监督指正

    # 不知道QRCode的请移步wiki,自行了解,这里不多做解释

    *******创建二维码之前的工作********

    去下面给出的地址下载QRCode.jar包,此jar包已经包括 生成与解析 。

    官网下载到的jar包是没有解析的

    https://files.cnblogs.com/files/bigroc/QRCode.zip

    ***创建好你的测试类导好jar包开始吧***

    第一部分:生成二维码

    复制代码
    package com.bigroc.qrcode;
    
    import com.swetake.util.Qrcode;
    
    import javax.imageio.ImageIO;
    import java.awt.*;
    import java.awt.image.BufferedImage;
    import java.io.File;
    import java.io.IOException;
    import java.io.UnsupportedEncodingException;
    
    /**
     * Created by BigRoc on 2017/9/8.
     */
    public class CreateQRCode {
        public static void main(String[] args) throws IOException {
    
            //API文档规定计算图片宽高的方式 ,7是本次测试的版本号
            int width = 67+12*(7-1);
            int height = 67+12*(7-1);
    
    
            Qrcode x = new Qrcode();
            x.setQrcodeErrorCorrect('M');//纠错等级
            x.setQrcodeEncodeMode('B');//(N:数字) (A: a~z,A~Z)(B:其他)
            x.setQrcodeVersion(7);//版本号  1-40
            String qrData = "www.bigroc.xyz";//内容信息
    
            byte[] d = qrData.getBytes("utf-8");//汉子转格式需要抛出异常
    
            //缓冲区
            BufferedImage bufferedImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_BGR);
    
            //绘图
            Graphics2D gs = bufferedImage.createGraphics();
    
            gs.setBackground(Color.WHITE);
            gs.setColor(Color.BLACK);
            gs.clearRect(0, 0, width, height);
    
            //偏移量
            int pixoff = 2;
    
    
            /**
             * 容易踩坑的地方
             * 注意for循环里面的i,j的顺序,
             * s[j][i]二维数组的j,i的顺序要与
             * 这个方法中的 gs.fillRect(j*3+pixoff,i*3+pixoff, 3, 3);
             * 顺序匹配,否则会出现解析图片是一串数字
             */
            if (d.length > 0 && d.length < 120) {
                boolean[][] s = x.calQrcode(d);
    
                for (int i = 0; i < s.length; i++) {
                    for (int j = 0; j < s.length; j++) {
                        if (s[j][i]) {
                            gs.fillRect(j * 3 + pixoff, i * 3 + pixoff, 3, 3);
                        }
                    }
                }
            }
            gs.dispose();
            bufferedImage.flush();
    
            ImageIO.write(bufferedImage,"png",new File("D:/qrcode.png"));
            System.out.println("二维码生成完毕");
        }
    }
    复制代码

     第二部分:解析二维码(注意:其中需要实现QRCodeImage接口)

    复制代码
    package com.bigroc.qrcode;
    
    import jp.sourceforge.qrcode.QRCodeDecoder;
    
    import javax.imageio.ImageIO;
    import java.awt.image.BufferedImage;
    import java.io.File;
    import java.io.IOException;
    
    /**
     * Created by BigRoc on 2017/9/8.
     */
    public class ReadQRCode {
        public static void main(String[] args) throws IOException {
            //图片路径
            File file = new File("D:/qrcode.png");
            //读取图片到缓冲区
            BufferedImage bufferedImage = ImageIO.read(file);
            //QRCode解码器
            QRCodeDecoder codeDecoder = new QRCodeDecoder();
            /**
             *codeDecoder.decode(new MyQRCodeImage())
             *这里需要实现QRCodeImage接口,移步最后一段代码
             */
            //通过解析二维码获得信息
            String result = new String(codeDecoder.decode(new MyQRCodeImage(bufferedImage)), "utf-8");
            System.out.println(result);
        }
    }
    复制代码

    第三部分补充:实现QRCodeImage接口

    复制代码
    package com.bigroc.qrcode;
    
    import jp.sourceforge.qrcode.data.QRCodeImage;
    
    import java.awt.image.BufferedImage;
    
    /**
     * 实现QRCodeImage接口,
     * 设置解码的图片信息
     * 告诉codeDecoder.decode()将要解析的图片类型
     * Created by BigRoc on 2017/9/9.
     */
    public class MyQRCodeImage implements QRCodeImage{
    
    
        BufferedImage bufferedImage;
    
        public MyQRCodeImage(BufferedImage bufferedImage){
            this.bufferedImage=bufferedImage;
        }
    
        //宽
        @Override
        public int getWidth() {
            return bufferedImage.getWidth();
        }
    
        //高
        @Override
        public int getHeight() {
            return bufferedImage.getHeight();
        }
    
        //像素还是颜色
        @Override
        public int getPixel(int i, int j) {
            return bufferedImage.getRGB(i,j);
        }
    }
    复制代码
  • 相关阅读:
    1.27
    1.25
    Representation Learning with Contrastive Predictive Coding
    Learning a Similarity Metric Discriminatively, with Application to Face Verification
    噪声对比估计(负样本采样)
    Certified Adversarial Robustness via Randomized Smoothing
    Certified Robustness to Adversarial Examples with Differential Privacy
    Dynamic Routing Between Capsules
    Defending Adversarial Attacks by Correcting logits
    Visualizing Data using t-SNE
  • 原文地址:https://www.cnblogs.com/shihaiming/p/7599069.html
Copyright © 2011-2022 走看看