用代码实现生成二维码和解析二维码
一、二维码简介
- 用某种特定的几何图形按一定规律在平面(二维方向上)分布的黑白相间的图形记录数据符号信息
- 比一维条形码能存更多信息,表示更多数据类型
- 能够存储数字/字母/汉字/图片等信息
- 字符集128个字符
- 可存储几百到几十KB字符
- 抗损坏
二、Zxing(Zebra Crossing)
- Zxing(Zebra Crossing)
– Google 出品
– 支持1D和2D的Barcode - 主要类
BitMatrix 位图矩阵
MultiFormatWriter 位图编写器
MatrixToImageWriter 写入图片
三、通过maven导入依赖包
<!-- 生成二维码和生成二维码的依赖包 --><!-- https://mvnrepository.com/artifact/com.google.zxing/core --><dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.3.0</version></dependency><!-- https://mvnrepository.com/artifact/com.google.zxing/javase --><dependency><groupId>com.google.zxing</groupId><artifactId>javase</artifactId><version>3.3.3</version></dependency>
四、代码实现
- 编写生成和解析二维码的工具类QrCode
package com.fz.util;import com.google.zxing.*;
import com.google.zxing.client.j2se.BufferedImageLuminanceSource;
import com.google.zxing.client.j2se.MatrixToImageWriter;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.common.HybridBinarizer;
import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.nio.charset.StandardCharsets;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;/*** @program: qrcode* @description: 生成二维码* @author: Fang* @create: 2020-05-01 09:19**/
public class QrCode {/*** 生成二维码* @param width 二维码宽度* @param height 二维码高度* @param fileDirectory 二维码存储路径* @param content 二维码内容* @param imageFormat 生成的图片格式*/public static void createQrCode(int width,int height,String fileDirectory, String content,String imageFormat){File file=new File(fileDirectory);if (!file.exists()){file.mkdirs();}//给二维码取名字,以生成的时间命名Date date=new Date();SimpleDateFormat sdf=new SimpleDateFormat("yyyyMMddHHmmss");String fileName=sdf.format(date)+"."+imageFormat;//第一步,定义二维码的参数Map<EncodeHintType,Object> hints=new HashMap<>(5);//1、设置编码格式hints.put(EncodeHintType.CHARACTER_SET,"utf-8");//2、设置容错等级hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.Q);//3、设置边距hints.put(EncodeHintType.MARGIN,1);try {BitMatrix bitMatrix=new MultiFormatWriter().encode(content, BarcodeFormat.QR_CODE,width,height,hints);MatrixToImageWriter.writeToPath(bitMatrix,imageFormat,new File(fileDirectory+File.separatorChar+ fileName).toPath());}catch (Exception e){e.printStackTrace();}}/*** 解析二维码* @param file 二维码* @return Result*/public static Result encodeQrCode(File file) {try {//创建MultiFormatReaderMultiFormatReader reader = new MultiFormatReader();//读取二维码BufferedImage image = ImageIO.read(file);BinaryBitmap binaryBitmap = new BinaryBitmap(new HybridBinarizer(new BufferedImageLuminanceSource(image)));Map<DecodeHintType, Object> hint=new HashMap<>(2);hint.put(DecodeHintType.CHARACTER_SET,"utf-8");//解析二维码return reader.decode(binaryBitmap,hint);} catch (Exception e) {e.printStackTrace();}return null;}}
- 编写测试类TestQrCode
import com.fz.util.QrCode;
import com.google.zxing.Result;
import org.junit.Test;import java.io.File;
import java.util.Date;/*** @program: ssmshiro* @description:* @author: Fang* @create: 2020-05-01 10:50**/
public class TestQrCode {public static void main(String[] args) {//生成二维码QrCode.createQrCode(300,300,"E:/IdeaProjects/ssmshiro/qrcode/","今天","png");//解析二维码 E:\IdeaProjects\ssmshiro\qrcode\20200501123646.pngFile file=new File("E:/IdeaProjects/ssmshiro/qrcode/20200501123646.png");Result result = QrCode.encodeQrCode(file);if (result!=null){//二维码类型System.out.println(result.getBarcodeFormat());//二维码的元数据例如容错等级System.out.println(result.getResultMetadata());//二维码内容System.out.println("内容:"+result.getText());//二维码生成时间System.out.println(new Date(result.getTimestamp()));}else{System.out.println("解析失败");}}
}
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
