加载中...

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

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

1、引入依赖

  1. <!-- https://mvnrepository.com/artifact/QRCode/QRCode -->
  2. <dependency>
  3. <groupId>QRCode</groupId>
  4. <artifactId>QRCode</artifactId>
  5. <version>3.0.0</version>
  6. </dependency>

2、生成二维码

  1. package org.example;
  2. import com.swetake.util.Qrcode;
  3. import javax.imageio.ImageIO;
  4. import java.awt.*;
  5. import java.awt.image.BufferedImage;
  6. import java.io.File;
  7. import java.io.IOException;
  8. import java.util.Scanner;
  9. public class creatQRcode {
  10. public static void main(String[] args) {
  11. //通过Qrcode这个jar包设置二维码的一些属性
  12. Qrcode x = new Qrcode();
  13. //纠错等级为M级
  14. x.setQrcodeErrorCorrect(''M'');
  15. //N代表数字 A代表a-z B代表其他内容
  16. x.setQrcodeEncodeMode(''B'');
  17. /*
  18. * Qrcode的版本号 1-40
  19. *21x21(版本1),到177x177(版本40),每一版本符号比前一版本每边增加4个模块。
  20. * */
  21. int version=7;
  22. x.setQrcodeVersion(version);
  23. //创建Scanner对象
  24. Scanner input=new Scanner(System.in);
  25. System.out.print("请输入信息:");
  26. //获取用户输入的信息,并保存在变量中
  27. String qrData=input.nextLine();
  28. //画的长度根据版本的不同,大小不同, 下面的长度计算公式固定
  29. int width = 67+12*(version-1);
  30. int height = 67+12*(version-1);
  31. //BufferedImage.TYPE_INT_RGB 指定图片的RGB值为int型 的 8
  32. BufferedImage bufferedImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
  33. /*
  34. * Graphics2D 是java的画图工具
  35. * */
  36. Graphics2D gs = bufferedImage.createGraphics();
  37. gs.setBackground(Color.white);//设置背景为白色
  38. gs.setColor(Color.black);//设置颜色为黑色
  39. gs.clearRect(0, 0, width, height);//存储画板的内容
  40. int pixOff = 2;//偏移量
  41. /*
  42. * 往画板填充内容
  43. */
  44. byte[] d =qrData.getBytes();
  45. if (d.length>0 && d.length <120){
  46. boolean[][] s = x.calQrcode(d);
  47. for (int i=0;i<s.length;i++){
  48. for (int j=0;j<s.length;j++){
  49. if (s[j][i]) {
  50. gs.fillRect(j*3+pixOff,i*3+pixOff,3,3);//加入偏移量
  51. }
  52. }
  53. }
  54. }
  55. /*
  56. * 结束
  57. */
  58. gs.dispose();
  59. bufferedImage.flush();
  60. try {
  61. ImageIO.write(bufferedImage, "png", new File("H:/DEMO/erweima/bolg.png"));
  62. } catch (IOException e) {
  63. // TODO Auto-generated catch block
  64. e.printStackTrace();
  65. }
  66. }
  67. }

注意:

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

3、解析二维码

  1. package org.example;
  2. import jp.sourceforge.qrcode.QRCodeDecoder;
  3. import javax.imageio.ImageIO;
  4. import java.awt.image.BufferedImage;
  5. import java.io.File;
  6. public class ReadQRcode {
  7. public static void main(String[] args) throws Exception {
  8. //指定文件路径
  9. File file=new File("E:/code/qrcode.png");
  10. //读取验证码图片
  11. BufferedImage bufferedImage= ImageIO.read(file);
  12. //调用方法
  13. QRCodeDecoder codeDecoder=new QRCodeDecoder();
  14. String result=new String(codeDecoder.decode(new MyQRCodeImage(bufferedImage)),"gb2312");
  15. System.out.println("二维码的内容为:"+result);
  16. }
  17. }

  1. package org.example;
  2. import jp.sourceforge.qrcode.data.QRCodeImage;
  3. import java.awt.image.BufferedImage;
  4. public class MyQRCodeImage implements QRCodeImage {
  5. BufferedImage bufferedImage;
  6. public MyQRCodeImage(BufferedImage bufferedImage){
  7. this.bufferedImage = bufferedImage;
  8. }
  9. @Override
  10. public int getWidth() {
  11. return bufferedImage.getWidth();
  12. }
  13. @Override
  14. public int getHeight() {
  15. return bufferedImage.getHeight();
  16. }
  17. @Override
  18. public int getPixel(int i, int i1) {
  19. return bufferedImage.getRGB(i,i1);
  20. }
  21. }

结果如下: 

New Image