qrcode(2):QRCode生成和解析二维码

1、引入依赖

    <!-- https://mvnrepository.com/artifact/QRCode/QRCode -->
    <dependency>
      <groupId>QRCode</groupId>
      <artifactId>QRCode</artifactId>
      <version>3.0.0</version>
    </dependency>

2、生成二维码

package org.example;

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.util.Scanner;

public class creatQRcode {
    public static void main(String[] args) {
        //通过Qrcode这个jar包设置二维码的一些属性
        Qrcode x = new Qrcode();
        //纠错等级为M级
        x.setQrcodeErrorCorrect('M');
        //N代表数字   A代表a-z  B代表其他内容
        x.setQrcodeEncodeMode('B');

        /*
         * Qrcode的版本号   1-40
         * 从21x21(版本1),到177x177(版本40),每一版本符号比前一版本每边增加4个模块。
         * */
        int version=7;
        x.setQrcodeVersion(version);
        //创建Scanner对象
        Scanner input=new Scanner(System.in);
        System.out.print("请输入信息:");
        //获取用户输入的信息,并保存在变量中
        String qrData=input.nextLine();

        //画的长度根据版本的不同,大小不同, 下面的长度计算公式固定
        int width = 67+12*(version-1);
        int height = 67+12*(version-1);

        //BufferedImage.TYPE_INT_RGB    指定图片的RGB值为int型 的 8位
        BufferedImage bufferedImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);

        /*
         * Graphics2D 是java的画图工具
         * */
        Graphics2D gs = bufferedImage.createGraphics();

        gs.setBackground(Color.white);//设置背景为白色
        gs.setColor(Color.black);//设置颜色为黑色
        gs.clearRect(0, 0, width, height);//存储画板的内容
        int pixOff = 2;//偏移量
        /*
         * 往画板填充内容
         */
        byte[] d =qrData.getBytes();
        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();
        try {
            ImageIO.write(bufferedImage, "png", new File("H:/DEMO/erweima/bolg.png"));
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }
}

注意:

定义二维码内容时候,如果是网址需要添加htttp://协议前缀,不然会被识别成文本。

3、解析二维码

package org.example;

import jp.sourceforge.qrcode.QRCodeDecoder;

import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;

public class ReadQRcode {
    public static void main(String[] args) throws Exception {
        //指定文件路径
        File file=new File("E:/code/qrcode.png");
        //读取验证码图片
        BufferedImage bufferedImage= ImageIO.read(file);
        //调用方法
        QRCodeDecoder codeDecoder=new QRCodeDecoder();
        String result=new String(codeDecoder.decode(new MyQRCodeImage(bufferedImage)),"gb2312");

        System.out.println("二维码的内容为:"+result);

    }

}

package org.example;

import jp.sourceforge.qrcode.data.QRCodeImage;

import java.awt.image.BufferedImage;

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 i1) {
        return bufferedImage.getRGB(i,i1);
    }
}

结果如下: 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不死鸟.亚历山大.狼崽子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值