本文主要是介绍简单记录一下-二维码生成和解析工具类,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
1.pom.xml配置添加依赖
<dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.2.1</version> </dependency> <dependency><groupId>com.google.zxing</groupId><artifactId>javase</artifactId><version>3.3.0</version> </dependency>
2.代码工具类
package com.xieli.test;import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Hashtable;import javax.imageio.ImageIO;import com.google.zxing.BarcodeFormat;
import com.google.zxing.BinaryBitmap;
import com.google.zxing.EncodeHintType;
import com.google.zxing.LuminanceSource;
import com.google.zxing.ReaderException;
import com.google.zxing.Result;
import com.google.zxing.WriterException;
import com.google.zxing.client.j2se.BufferedImageLuminanceSource;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.common.HybridBinarizer;
import com.google.zxing.qrcode.QRCodeReader;
import com.google.zxing.qrcode.QRCodeWriter;
import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;/*** 二维码工具类**/
public class QrCodeUtils {/*** 生成二维码图片* @param outputStream 文件输出流路径* @param content 二维码携带信息* @param qrCodeSize 二维码图片大小* @param imageFormat 二维码的格式* @throws WriterException* @throws IOException*/public static boolean createQrCode(OutputStream outputStream, String content, int qrCodeSize, String imageFormat) throws WriterException, IOException{//设置二维码纠错级别MAPHashtable<EncodeHintType, ErrorCorrectionLevel> hintMap = new Hashtable<>();hintMap.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.L); // 矫错级别QRCodeWriter qrCodeWriter = new QRCodeWriter();//创建比特矩阵(位矩阵)的QR码编码的字符串BitMatrix byteMatrix = qrCodeWriter.encode(content, BarcodeFormat.QR_CODE, qrCodeSize, qrCodeSize, hintMap);// 使BufferedImage勾画QRCode (matrixWidth 是行二维码像素点)int matrixWidth = byteMatrix.getWidth();BufferedImage image = new BufferedImage(matrixWidth-200, matrixWidth-200, BufferedImage.TYPE_INT_RGB);image.createGraphics();Graphics2D graphics = (Graphics2D) image.getGraphics();graphics.setColor(Color.WHITE);graphics.fillRect(0, 0, matrixWidth, matrixWidth);// 使用比特矩阵画并保存图像graphics.setColor(Color.BLACK);for (int i = 0; i < matrixWidth; i++){for (int j = 0; j < matrixWidth; j++){if (byteMatrix.get(i, j)){graphics.fillRect(i-100, j-100, 1, 1);}}}return ImageIO.write(image, imageFormat, outputStream);}/*** 解析二维码图片*/public static void readQrCode(InputStream inputStream) throws IOException{//从输入流中获取字符串信息BufferedImage image = ImageIO.read(inputStream);//将图像转换为二进制位图源LuminanceSource source = new BufferedImageLuminanceSource(image);BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source));QRCodeReader reader = new QRCodeReader();Result result = null ;try {result = reader.decode(bitmap);} catch (ReaderException e) {e.printStackTrace();}System.out.println("解析结果:"+result.toString());System.out.println("二维码格式类型:"+result.getBarcodeFormat());System.out.println("二维码文本内容:"+result.getText());}/*** main方法* @throws WriterException*/public static void main(String[] args) throws IOException, WriterException {createQrCode(new FileOutputStream(new File("d:\\test.png")),"www.baidu.com",800,"PNG");readQrCode(new FileInputStream(new File("d:\\test.png")));}}
这篇关于简单记录一下-二维码生成和解析工具类的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!