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);
- }
- }
结果如下:
