导读
简单的来说,通过将URL生成二维码,比如微信登录,就是采用扫二维码来发送请求。
使用
1、依赖
<!-- https://mvnrepository.com/artifact/QRCode/QRCode --><dependency><groupId>QRCode</groupId><artifactId>QRCode</artifactId><version>3.0</version></dependency>
1、jar包爆红
如果添加依赖爆红,如下,可以下方链接获取jar包:
QRCode.zip

1.1、解决办法
将jar包解压复制到对应依赖生成jar包的位置,如下:
在项目中输入以下命令:
mvn install:install-file -Dfile=E:\MavenHouse\QRCode\QRCode\3.0\QRCode.jar -DgroupId=QRCode -DartifactId=QRCode -Dversion=3.0 -Dpackaging=jar
解释说明:
mvn install:install-file-DgroupId=包名-DartifactId=项目名-Dversion=版本号-Dpackaging=jar-Dfile=jar文件所在路径
然后成功,不再爆红了:
2、工具类
1、生成二维码
/*** 生成二维码* @param content :二维码中的内容* @param imgPath :二维码生成的位置* @param version :版本* @return void*/public static void encoderQRCode(String content, String imgPath,int version) {try {Qrcode qrcodeHandler = new Qrcode();//设置二维码排错率,可选L(7%)、M(15%)、Q(25%)、H(30%),排错率越高可存储的信息越少,但对二维码清晰度的要求越小qrcodeHandler.setQrcodeErrorCorrect('M');//N代表数字,A代表字符a-Z,B代表其他字符qrcodeHandler.setQrcodeEncodeMode('B');//版本1为21*21矩阵,版本每增1,二维码的两个边长都增4;所以版本7为45*45的矩阵;最高版本为是40,是177*177的矩阵qrcodeHandler.setQrcodeVersion(version);int imgSize = 67 + 12 * (version- 1) ;System.out.println("二维码中的内容:" + content);byte[] contentBytes = content.getBytes("gb2312");BufferedImage bufImg = new BufferedImage(imgSize , imgSize ,BufferedImage.TYPE_INT_RGB);Graphics2D gs = bufImg.createGraphics();gs.setBackground(Color.WHITE);gs.clearRect(0, 0, imgSize , imgSize );//设定图像颜色 > BLACKgs.setColor(Color.BLACK);//设置偏移量 不设置可能导致解析出错int pixoff = 2;//输出内容 > 二维码System.out.println("二维码中内容的长度:" + contentBytes.length);if (contentBytes.length > 0 && contentBytes.length < 130) {boolean[][] codeOut = qrcodeHandler.calQrcode(contentBytes);for (int i = 0; i < codeOut.length; i++) {for (int j = 0; j < codeOut.length; j++) {if (codeOut[j][i]) {gs.fillRect(j * 3 + pixoff, i * 3 + pixoff, 3, 3);}}}} else {System.err.println("QRCode content bytes length = "+ contentBytes.length + " not in [ 0,130 ]. ");}gs.dispose();bufImg.flush();File imgFile = new File(imgPath);// 生成二维码QRCode图片ImageIO.write(bufImg, "png", imgFile);} catch (Exception e) {e.printStackTrace();}
3、解析二维码中的内容
/*** 解析二维码中的内容* @param imgPath :二维码的位置* @return java.lang.String*/public static String decoderQRCode(String imgPath) {// QRCode 二维码图片的文件File imageFile = new File(imgPath);BufferedImage bufImg = null;String decodedData = null;try {bufImg = ImageIO.read(imageFile);QRCodeDecoder decoder = new QRCodeDecoder();decodedData = new String(decoder.decode(new J2SEImage(bufImg)),"gb2312");} catch (IOException e) {System.out.println("Error: " + e.getMessage());e.printStackTrace();} catch (DecodingFailedException dfe) {System.out.println("Error: " + dfe.getMessage());dfe.printStackTrace();}return decodedData;}static class J2SEImage implements QRCodeImage {BufferedImage bufImg;public J2SEImage(BufferedImage bufImg) {this.bufImg = bufImg;}public int getWidth() {return bufImg.getWidth();}public int getHeight() {return bufImg.getHeight();}public int getPixel(int x, int y) {return bufImg.getRGB(x, y);}}public static void main(String[] args) {String imgPath = "D:/temp/picture/Test_Qrcode.png";System.out.println("二维码中的内容:" + decoderQRCode(imgPath));System.out.println("decoderQRCode QRcode success");}
详细可以参考:https://blog.csdn.net/weixin_42687829/article/details/93063647
