一、加入maven依赖
<!-- 谷歌zxing 二维码 --> <dependency> <groupId>com.google.zxing</groupId> <artifactId>core</artifactId> <version>3.3.3</version> </dependency> <dependency> <groupId>com.google.zxing</groupId> <artifactId>javase</artifactId> <version>3.3.3</version> </dependency>
二、工具类代码
1 package com.example.demo.utils; 2 3 import com.google.zxing.*; 4 import com.google.zxing.client.j2se.BufferedImageLuminanceSource; 5 import com.google.zxing.common.BitMatrix; 6 import com.google.zxing.common.HybridBinarizer; 7 import com.google.zxing.qrcode.QRCodeReader; 8 import com.google.zxing.qrcode.QRCodeWriter; 9 import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel; 10 11 import javax.imageio.ImageIO; 12 import java.awt.*; 13 import java.awt.image.BufferedImage; 14 import java.io.*; 15 import java.util.Hashtable; 16 17 /** 18 * @author zsh 19 * @company wlgzs 20 * @create 2019-03-10 15:17 21 * @Describe 二维码生成和读的工具类 22 */ 23 public class QrCodeCreateUtil { 24 /** 25 * 生成包含字符串信息的二维码图片 26 * @param outputStream 文件输出流路径 27 * @param content 二维码携带信息 28 * @param qrCodeSize 二维码图片大小 29 * @param imageFormat 二维码的格式 30 * @throws WriterException 31 * @throws IOException 32 */ 33 public static boolean createQrCode(OutputStream outputStream, String content, int qrCodeSize, String imageFormat) throws WriterException, IOException{ 34 //设置二维码纠错级别MAP 35 Hashtable<EncodeHintType, ErrorCorrectionLevel> hintMap = new Hashtable<EncodeHintType, ErrorCorrectionLevel>(); 36 hintMap.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.L); // 矫错级别 37 QRCodeWriter qrCodeWriter = new QRCodeWriter(); 38 //创建比特矩阵(位矩阵)的QR码编码的字符串 39 BitMatrix byteMatrix = qrCodeWriter.encode(content, BarcodeFormat.QR_CODE, qrCodeSize, qrCodeSize, hintMap); 40 // 使BufferedImage勾画QRCode (matrixWidth 是行二维码像素点) 41 int matrixWidth = byteMatrix.getWidth(); 42 BufferedImage image = new BufferedImage(matrixWidth-200, matrixWidth-200, BufferedImage.TYPE_INT_RGB); 43 image.createGraphics(); 44 Graphics2D graphics = (Graphics2D) image.getGraphics(); 45 graphics.setColor(Color.WHITE); 46 graphics.fillRect(0, 0, matrixWidth, matrixWidth); 47 // 使用比特矩阵画并保存图像 48 graphics.setColor(Color.BLACK); 49 for (int i = 0; i < matrixWidth; i++){ 50 for (int j = 0; j < matrixWidth; j++){ 51 if (byteMatrix.get(i, j)){ 52 graphics.fillRect(i-100, j-100, 1, 1); 53 } 54 } 55 } 56 return ImageIO.write(image, imageFormat, outputStream); 57 } 58 59 /** 60 * 读二维码并输出携带的信息 61 */ 62 public static void readQrCode(InputStream inputStream) throws IOException{ 63 //从输入流中获取字符串信息 64 BufferedImage image = ImageIO.read(inputStream); 65 //将图像转换为二进制位图源 66 LuminanceSource source = new BufferedImageLuminanceSource(image); 67 BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source)); 68 QRCodeReader reader = new QRCodeReader(); 69 Result result = null ; 70 try { 71 result = reader.decode(bitmap); 72 } catch (ReaderException e) { 73 e.printStackTrace(); 74 } 75 System.out.println(result.getText()); 76 } 77 /** 78 * 测试代码 79 * @throws WriterException 80 */ 81 public static void main(String[] args) throws IOException, WriterException { 82 83 createQrCode(new FileOutputStream(new File("d:\qrcode.jpg")),"WE1231238239128sASDASDSADSDWEWWREWRERWSDFDFSDSDF123123123123213123",900,"JPEG"); 84 readQrCode(new FileInputStream(new File("d:\qrcode.jpg"))); 85 } 86 }
效果图: